Merge commit '720b16875295d57e0e6a4e0ec32db4d47412f896'
[unleashed.git] / usr / src / uts / common / netinet / dhcp.h
blobda835f39aa1807a9f0406dc184a5e3487146d7f0
1 /*
2 * CDDL HEADER START
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.
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.
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]
20 * CDDL HEADER END
23 * Copyright 1996-2003 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 * Copyright (c) 2016, Chris Fraire <cfraire@me.com>.
29 * dhcp.h - Generic DHCP definitions, as per RFC's 2131 and 2132.
32 #ifndef _DHCP_H
33 #define _DHCP_H
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
39 #ifndef _KERNEL
40 #include <thread.h>
41 #endif
44 * DHCP option codes.
47 #define CD_PAD 0
48 #define CD_END 255
49 #define CD_SUBNETMASK 1
50 #define CD_TIMEOFFSET 2
51 #define CD_ROUTER 3
52 #define CD_TIMESERV 4
53 #define CD_IEN116_NAME_SERV 5
54 #define CD_DNSSERV 6
55 #define CD_LOG_SERV 7
56 #define CD_COOKIE_SERV 8
57 #define CD_LPR_SERV 9
58 #define CD_IMPRESS_SERV 10
59 #define CD_RESOURCE_SERV 11
60 #define CD_HOSTNAME 12
61 #define CD_BOOT_SIZE 13
62 #define CD_DUMP_FILE 14
63 #define CD_DNSDOMAIN 15
64 #define CD_SWAP_SERV 16
65 #define CD_ROOT_PATH 17
66 #define CD_EXTEND_PATH 18
68 /* IP layer parameters */
69 #define CD_IP_FORWARDING_ON 19
70 #define CD_NON_LCL_ROUTE_ON 20
71 #define CD_POLICY_FILTER 21
72 #define CD_MAXIPSIZE 22
73 #define CD_IPTTL 23
74 #define CD_PATH_MTU_TIMEOUT 24
75 #define CD_PATH_MTU_TABLE_SZ 25
77 /* IP layer parameters per interface */
78 #define CD_MTU 26
79 #define CD_ALL_SUBNETS_LCL_ON 27
80 #define CD_BROADCASTADDR 28
81 #define CD_MASK_DISCVRY_ON 29
82 #define CD_MASK_SUPPLIER_ON 30
83 #define CD_ROUTER_DISCVRY_ON 31
84 #define CD_ROUTER_SOLICIT_SERV 32
85 #define CD_STATIC_ROUTE 33
87 /* Link Layer Parameters per Interface */
88 #define CD_TRAILER_ENCAPS_ON 34
89 #define CD_ARP_TIMEOUT 35
90 #define CD_ETHERNET_ENCAPS_ON 36
92 /* TCP Parameters */
93 #define CD_TCP_TTL 37
94 #define CD_TCP_KALIVE_INTVL 38
95 #define CD_TCP_KALIVE_GRBG_ON 39
97 /* Application layer parameters */
98 #define CD_NIS_DOMAIN 40
99 #define CD_NIS_SERV 41
100 #define CD_NTP_SERV 42
101 #define CD_VENDOR_SPEC 43
103 /* NetBIOS parameters */
104 #define CD_NETBIOS_NAME_SERV 44
105 #define CD_NETBIOS_DIST_SERV 45
106 #define CD_NETBIOS_NODE_TYPE 46
107 #define CD_NETBIOS_SCOPE 47
109 /* X Window parameters */
110 #define CD_XWIN_FONT_SERV 48
111 #define CD_XWIN_DISP_SERV 49
113 /* DHCP protocol extension options */
114 #define CD_REQUESTED_IP_ADDR 50
115 #define CD_LEASE_TIME 51
116 #define CD_OPTION_OVERLOAD 52
117 #define CD_DHCP_TYPE 53
118 #define CD_SERVER_ID 54
119 #define CD_REQUEST_LIST 55
120 #define CD_MESSAGE 56
121 #define CD_MAX_DHCP_SIZE 57
122 #define CD_T1_TIME 58
123 #define CD_T2_TIME 59
124 #define CD_CLASS_ID 60
125 #define CD_CLIENT_ID 61
127 /* Netware options */
128 #define CD_NW_IP_DOMAIN 62
129 #define CD_NW_IP_OPTIONS 63
131 /* Nisplus options */
132 #define CD_NISPLUS_DMAIN 64
133 #define CD_NISPLUS_SERVS 65
135 /* Optional sname/bootfile options */
136 #define CD_TFTP_SERV_NAME 66
137 #define CD_OPT_BOOTFILE_NAME 67
139 /* Additional server options */
140 #define CD_MOBILE_IP_AGENT 68
141 #define CD_SMTP_SERVS 69
142 #define CD_POP3_SERVS 70
143 #define CD_NNTP_SERVS 71
144 #define CD_WWW_SERVS 72
145 #define CD_FINGER_SERVS 73
146 #define CD_IRC_SERVS 74
148 /* Streettalk options */
149 #define CD_STREETTALK_SERVS 75
150 #define CD_STREETTALK_DA_SERVS 76
152 /* User class identifier */
153 #define CD_USER_CLASS_ID 77
155 /* Newer options */
157 #define CD_SLPDA 78
158 #define CD_SLPSS 79
159 #define CD_CLIENTFQDN 81
160 #define CD_AGENTOPT 82
163 * Per RFC 3679, option 89 was "Never published as standard and [is] not in
164 * general use". See active CD_CLIENTFQDN and RFC 4702.
166 #define CD_FQDN 89
168 #define CD_PXEARCHi 93
169 #define CD_PXENIIi 94
170 #define CD_PXECID 95
171 #define CD_MULTICST 107
173 #define DHCP_FIRST_OPT CD_SUBNETMASK
174 #define DHCP_LAST_STD CD_MULTICST
175 #define DHCP_SITE_OPT 128 /* inclusive */
176 #define DHCP_END_SITE 254
177 #define DHCP_LAST_OPT DHCP_END_SITE /* last op code */
179 #define DHCP_MAX_OPT_SIZE 255 /* maximum option size in octets */
182 * DHCP Packet. What will fit in a ethernet frame. We may use a smaller
183 * size, based on what our transport can handle.
185 #define DHCP_DEF_MAX_SIZE 576 /* as spec'ed in RFC 2131 */
186 #define PKT_BUFFER 1486 /* max possible size of pkt buffer */
187 #define BASE_PKT_SIZE 240 /* everything but the options */
188 typedef struct dhcp {
189 uint8_t op; /* message opcode */
190 uint8_t htype; /* Hardware address type */
191 uint8_t hlen; /* Hardware address length */
192 uint8_t hops; /* Used by relay agents */
193 uint32_t xid; /* transaction id */
194 uint16_t secs; /* Secs elapsed since client boot */
195 uint16_t flags; /* DHCP Flags field */
196 struct in_addr ciaddr; /* client IP addr */
197 struct in_addr yiaddr; /* 'Your' IP addr. (from server) */
198 struct in_addr siaddr; /* Boot server IP addr */
199 struct in_addr giaddr; /* Relay agent IP addr */
200 uint8_t chaddr[16]; /* Client hardware addr */
201 uint8_t sname[64]; /* Optl. boot server hostname */
202 uint8_t file[128]; /* boot file name (ascii path) */
203 uint8_t cookie[4]; /* Magic cookie */
204 uint8_t options[60]; /* Options */
205 } PKT;
207 typedef uint32_t lease_t; /* DHCP lease time (32 bit quantity) */
210 * DHCP packet types. As per protocol.
212 #define DISCOVER ((uint8_t)1)
213 #define OFFER ((uint8_t)2)
214 #define REQUEST ((uint8_t)3)
215 #define DECLINE ((uint8_t)4)
216 #define ACK ((uint8_t)5)
217 #define NAK ((uint8_t)6)
218 #define RELEASE ((uint8_t)7)
219 #define INFORM ((uint8_t)8)
222 * Generic DHCP protocol defines
224 #define DHCP_PERM ((lease_t)0xffffffff) /* "permanent" lease time */
225 #define BOOTREQUEST (1) /* BOOTP REQUEST opcode */
226 #define BOOTREPLY (2) /* BOOTP REPLY opcode */
227 #define BOOTMAGIC { 99, 130, 83, 99 } /* rfc1048 magic cookie */
228 #define BCAST_MASK 0x8000 /* BROADCAST flag */
230 #ifdef __cplusplus
232 #endif
234 #endif /* _DHCP_H */