Home | History | Annotate | Download | only in netinet
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License, Version 1.0 only
      6  * (the "License").  You may not use this file except in compliance
      7  * with the License.
      8  *
      9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  * or http://www.opensolaris.org/os/licensing.
     11  * See the License for the specific language governing permissions
     12  * and limitations under the License.
     13  *
     14  * When distributing Covered Code, include this CDDL HEADER in each
     15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  * If applicable, add the following below this CDDL HEADER, with the
     17  * fields enclosed by brackets "[]" replaced with your own identifying
     18  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  *
     20  * CDDL HEADER END
     21  */
     22 /*
     23  * Copyright 1996-2003 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 /*
     28  * dhcp.h - Generic DHCP definitions, as per RFC's 2131 and 2132.
     29  */
     30 
     31 #ifndef	_DHCP_H
     32 #define	_DHCP_H
     33 
     34 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     35 
     36 #ifdef	__cplusplus
     37 extern "C" {
     38 #endif
     39 
     40 #ifdef  _REENTRANT
     41 #include <thread.h>
     42 #endif  /* _REENTRANT */
     43 
     44 /*
     45  * DHCP option codes.
     46  */
     47 
     48 #define	CD_PAD			0
     49 #define	CD_END			255
     50 #define	CD_SUBNETMASK		1
     51 #define	CD_TIMEOFFSET		2
     52 #define	CD_ROUTER		3
     53 #define	CD_TIMESERV		4
     54 #define	CD_IEN116_NAME_SERV	5
     55 #define	CD_DNSSERV		6
     56 #define	CD_LOG_SERV		7
     57 #define	CD_COOKIE_SERV		8
     58 #define	CD_LPR_SERV		9
     59 #define	CD_IMPRESS_SERV		10
     60 #define	CD_RESOURCE_SERV	11
     61 #define	CD_HOSTNAME		12
     62 #define	CD_BOOT_SIZE		13
     63 #define	CD_DUMP_FILE		14
     64 #define	CD_DNSDOMAIN		15
     65 #define	CD_SWAP_SERV		16
     66 #define	CD_ROOT_PATH		17
     67 #define	CD_EXTEND_PATH		18
     68 
     69 /* IP layer parameters */
     70 #define	CD_IP_FORWARDING_ON	19
     71 #define	CD_NON_LCL_ROUTE_ON	20
     72 #define	CD_POLICY_FILTER	21
     73 #define	CD_MAXIPSIZE		22
     74 #define	CD_IPTTL		23
     75 #define	CD_PATH_MTU_TIMEOUT	24
     76 #define	CD_PATH_MTU_TABLE_SZ	25
     77 
     78 /* IP layer parameters per interface */
     79 #define	CD_MTU			26
     80 #define	CD_ALL_SUBNETS_LCL_ON	27
     81 #define	CD_BROADCASTADDR	28
     82 #define	CD_MASK_DISCVRY_ON	29
     83 #define	CD_MASK_SUPPLIER_ON	30
     84 #define	CD_ROUTER_DISCVRY_ON	31
     85 #define	CD_ROUTER_SOLICIT_SERV	32
     86 #define	CD_STATIC_ROUTE		33
     87 
     88 /* Link Layer Parameters per Interface */
     89 #define	CD_TRAILER_ENCAPS_ON	34
     90 #define	CD_ARP_TIMEOUT		35
     91 #define	CD_ETHERNET_ENCAPS_ON	36
     92 
     93 /* TCP Parameters */
     94 #define	CD_TCP_TTL		37
     95 #define	CD_TCP_KALIVE_INTVL	38
     96 #define	CD_TCP_KALIVE_GRBG_ON	39
     97 
     98 /* Application layer parameters */
     99 #define	CD_NIS_DOMAIN		40
    100 #define	CD_NIS_SERV		41
    101 #define	CD_NTP_SERV		42
    102 #define	CD_VENDOR_SPEC		43
    103 
    104 /* NetBIOS parameters */
    105 #define	CD_NETBIOS_NAME_SERV	44
    106 #define	CD_NETBIOS_DIST_SERV	45
    107 #define	CD_NETBIOS_NODE_TYPE	46
    108 #define	CD_NETBIOS_SCOPE	47
    109 
    110 /* X Window parameters */
    111 #define	CD_XWIN_FONT_SERV	48
    112 #define	CD_XWIN_DISP_SERV	49
    113 
    114 /* DHCP protocol extension options */
    115 #define	CD_REQUESTED_IP_ADDR	50
    116 #define	CD_LEASE_TIME		51
    117 #define	CD_OPTION_OVERLOAD	52
    118 #define	CD_DHCP_TYPE		53
    119 #define	CD_SERVER_ID		54
    120 #define	CD_REQUEST_LIST		55
    121 #define	CD_MESSAGE		56
    122 #define	CD_MAX_DHCP_SIZE	57
    123 #define	CD_T1_TIME		58
    124 #define	CD_T2_TIME		59
    125 #define	CD_CLASS_ID		60
    126 #define	CD_CLIENT_ID		61
    127 
    128 /* Netware options */
    129 #define	CD_NW_IP_DOMAIN		62
    130 #define	CD_NW_IP_OPTIONS	63
    131 
    132 /* Nisplus options */
    133 #define	CD_NISPLUS_DMAIN	64
    134 #define	CD_NISPLUS_SERVS	65
    135 
    136 /* Optional sname/bootfile options */
    137 #define	CD_TFTP_SERV_NAME	66
    138 #define	CD_OPT_BOOTFILE_NAME	67
    139 
    140 /* Additional server options */
    141 #define	CD_MOBILE_IP_AGENT	68
    142 #define	CD_SMTP_SERVS		69
    143 #define	CD_POP3_SERVS		70
    144 #define	CD_NNTP_SERVS		71
    145 #define	CD_WWW_SERVS		72
    146 #define	CD_FINGER_SERVS		73
    147 #define	CD_IRC_SERVS		74
    148 
    149 /* Streettalk options */
    150 #define	CD_STREETTALK_SERVS	75
    151 #define	CD_STREETTALK_DA_SERVS	76
    152 
    153 /* User class identifier */
    154 #define	CD_USER_CLASS_ID	77
    155 
    156 /* Newer options */
    157 
    158 #define	CD_SLPDA		78
    159 #define	CD_SLPSS		79
    160 #define	CD_AGENTOPT		82
    161 #define	CD_FQDN			89
    162 #define	CD_PXEARCHi		93
    163 #define	CD_PXENIIi		94
    164 #define	CD_PXECID		95
    165 #define	CD_MULTICST		107
    166 
    167 #define	DHCP_FIRST_OPT		CD_SUBNETMASK
    168 #define	DHCP_LAST_STD		CD_MULTICST
    169 #define	DHCP_SITE_OPT		128		/* inclusive */
    170 #define	DHCP_END_SITE		254
    171 #define	DHCP_LAST_OPT		DHCP_END_SITE	/* last op code */
    172 
    173 #define	DHCP_MAX_OPT_SIZE	255	/* maximum option size in octets */
    174 
    175 /*
    176  * DHCP Packet. What will fit in a ethernet frame. We may use a smaller
    177  * size, based on what our transport can handle.
    178  */
    179 #define	DHCP_DEF_MAX_SIZE	576	/* as spec'ed in RFC 2131 */
    180 #define	PKT_BUFFER		1486	/* max possible size of pkt buffer */
    181 #define	BASE_PKT_SIZE		240	/* everything but the options */
    182 typedef struct dhcp {
    183 	uint8_t		op;		/* message opcode */
    184 	uint8_t		htype;		/* Hardware address type */
    185 	uint8_t		hlen;		/* Hardware address length */
    186 	uint8_t		hops;		/* Used by relay agents */
    187 	uint32_t	xid;		/* transaction id */
    188 	uint16_t	secs;		/* Secs elapsed since client boot */
    189 	uint16_t	flags;		/* DHCP Flags field */
    190 	struct in_addr	ciaddr;		/* client IP addr */
    191 	struct in_addr	yiaddr;		/* 'Your' IP addr. (from server) */
    192 	struct in_addr	siaddr;		/* Boot server IP addr */
    193 	struct in_addr	giaddr;		/* Relay agent IP addr */
    194 	uint8_t		chaddr[16];	/* Client hardware addr */
    195 	uint8_t		sname[64];	/* Optl. boot server hostname */
    196 	uint8_t		file[128];	/* boot file name (ascii path) */
    197 	uint8_t		cookie[4];	/* Magic cookie */
    198 	uint8_t		options[60];	/* Options */
    199 } PKT;
    200 
    201 typedef uint32_t	lease_t; /* DHCP lease time (32 bit quantity) */
    202 
    203 /*
    204  * DHCP packet types. As per protocol.
    205  */
    206 #define	DISCOVER	((uint8_t)1)
    207 #define	OFFER		((uint8_t)2)
    208 #define	REQUEST		((uint8_t)3)
    209 #define	DECLINE		((uint8_t)4)
    210 #define	ACK		((uint8_t)5)
    211 #define	NAK		((uint8_t)6)
    212 #define	RELEASE		((uint8_t)7)
    213 #define	INFORM		((uint8_t)8)
    214 
    215 /*
    216  * Generic DHCP protocol defines
    217  */
    218 #define	DHCP_PERM	((lease_t)0xffffffff)	/* "permanent" lease time */
    219 #define	BOOTREQUEST		(1)		/* BOOTP REQUEST opcode */
    220 #define	BOOTREPLY		(2)		/* BOOTP REPLY opcode */
    221 #define	BOOTMAGIC	{ 99, 130, 83, 99 }	/* rfc1048 magic cookie */
    222 #define	BCAST_MASK	0x8000			/* BROADCAST flag */
    223 
    224 #ifdef	__cplusplus
    225 }
    226 #endif
    227 
    228 #endif	/* _DHCP_H */
    229