dhcp.h revision 1.1 1 1.1 christos /* $NetBSD: dhcp.h,v 1.1 2018/04/07 22:34:26 christos Exp $ */
2 1.1 christos
3 1.1 christos /* dhcp.h
4 1.1 christos
5 1.1 christos Protocol structures... */
6 1.1 christos
7 1.1 christos /*
8 1.1 christos * Copyright (c) 2004-2017 by Internet Systems Consortium, Inc. ("ISC")
9 1.1 christos * Copyright (c) 1995-2003 by Internet Software Consortium
10 1.1 christos *
11 1.1 christos * This Source Code Form is subject to the terms of the Mozilla Public
12 1.1 christos * License, v. 2.0. If a copy of the MPL was not distributed with this
13 1.1 christos * file, You can obtain one at http://mozilla.org/MPL/2.0/.
14 1.1 christos *
15 1.1 christos * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
16 1.1 christos * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17 1.1 christos * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
18 1.1 christos * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19 1.1 christos * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20 1.1 christos * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
21 1.1 christos * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22 1.1 christos *
23 1.1 christos * Internet Systems Consortium, Inc.
24 1.1 christos * 950 Charter Street
25 1.1 christos * Redwood City, CA 94063
26 1.1 christos * <info (at) isc.org>
27 1.1 christos * https://www.isc.org/
28 1.1 christos *
29 1.1 christos */
30 1.1 christos
31 1.1 christos #ifndef DHCP_H
32 1.1 christos #define DHCP_H
33 1.1 christos
34 1.1 christos #define DHCP_UDP_OVERHEAD (20 + /* IP header */ \
35 1.1 christos 8) /* UDP header */
36 1.1 christos #define DHCP_SNAME_LEN 64
37 1.1 christos #define DHCP_FILE_LEN 128
38 1.1 christos #define DHCP_FIXED_NON_UDP 236
39 1.1 christos #define DHCP_FIXED_LEN (DHCP_FIXED_NON_UDP + DHCP_UDP_OVERHEAD)
40 1.1 christos /* Everything but options. */
41 1.1 christos #define BOOTP_MIN_LEN 300
42 1.1 christos
43 1.1 christos #define DHCP_MTU_MAX 1500
44 1.1 christos #define DHCP_MTU_MIN 576
45 1.1 christos
46 1.1 christos #define DHCP_MAX_OPTION_LEN (DHCP_MTU_MAX - DHCP_FIXED_LEN)
47 1.1 christos #define DHCP_MIN_OPTION_LEN (DHCP_MTU_MIN - DHCP_FIXED_LEN)
48 1.1 christos
49 1.1 christos struct dhcp_packet {
50 1.1 christos u_int8_t op; /* 0: Message opcode/type */
51 1.1 christos u_int8_t htype; /* 1: Hardware addr type (net/if_types.h) */
52 1.1 christos u_int8_t hlen; /* 2: Hardware addr length */
53 1.1 christos u_int8_t hops; /* 3: Number of relay agent hops from client */
54 1.1 christos u_int32_t xid; /* 4: Transaction ID */
55 1.1 christos u_int16_t secs; /* 8: Seconds since client started looking */
56 1.1 christos u_int16_t flags; /* 10: Flag bits */
57 1.1 christos struct in_addr ciaddr; /* 12: Client IP address (if already in use) */
58 1.1 christos struct in_addr yiaddr; /* 16: Client IP address */
59 1.1 christos struct in_addr siaddr; /* 18: IP address of next server to talk to */
60 1.1 christos struct in_addr giaddr; /* 20: DHCP relay agent IP address */
61 1.1 christos unsigned char chaddr [16]; /* 24: Client hardware address */
62 1.1 christos char sname [DHCP_SNAME_LEN]; /* 40: Server name */
63 1.1 christos char file [DHCP_FILE_LEN]; /* 104: Boot filename */
64 1.1 christos unsigned char options [DHCP_MAX_OPTION_LEN];
65 1.1 christos /* 212: Optional parameters
66 1.1 christos (actual length dependent on MTU). */
67 1.1 christos };
68 1.1 christos
69 1.1 christos /* BOOTP (rfc951) message types */
70 1.1 christos #define BOOTREQUEST 1
71 1.1 christos #define BOOTREPLY 2
72 1.1 christos
73 1.1 christos /* Possible values for flags field... */
74 1.1 christos #define BOOTP_BROADCAST 32768L
75 1.1 christos
76 1.1 christos /* Possible values for hardware type (htype) field... */
77 1.1 christos #define HTYPE_ETHER 1 /* Ethernet 10Mbps */
78 1.1 christos #define HTYPE_IEEE802 6 /* IEEE 802.2 Token Ring... */
79 1.1 christos #define HTYPE_FDDI 8 /* FDDI... */
80 1.1 christos #define HTYPE_INFINIBAND 32 /* IP over Infiniband */
81 1.1 christos #define HTYPE_IPMP 255 /* IPMP - random hw address - there
82 1.1 christos * is no standard for this so we
83 1.1 christos * just steal a type */
84 1.1 christos
85 1.1 christos /* Magic cookie validating dhcp options field (and bootp vendor
86 1.1 christos extensions field). */
87 1.1 christos #define DHCP_OPTIONS_COOKIE "\143\202\123\143"
88 1.1 christos
89 1.1 christos /* DHCP Option codes: */
90 1.1 christos
91 1.1 christos #define DHO_PAD 0
92 1.1 christos #define DHO_SUBNET_MASK 1
93 1.1 christos #define DHO_TIME_OFFSET 2
94 1.1 christos #define DHO_ROUTERS 3
95 1.1 christos #define DHO_TIME_SERVERS 4
96 1.1 christos #define DHO_NAME_SERVERS 5
97 1.1 christos #define DHO_DOMAIN_NAME_SERVERS 6
98 1.1 christos #define DHO_LOG_SERVERS 7
99 1.1 christos #define DHO_COOKIE_SERVERS 8
100 1.1 christos #define DHO_LPR_SERVERS 9
101 1.1 christos #define DHO_IMPRESS_SERVERS 10
102 1.1 christos #define DHO_RESOURCE_LOCATION_SERVERS 11
103 1.1 christos #define DHO_HOST_NAME 12
104 1.1 christos #define DHO_BOOT_SIZE 13
105 1.1 christos #define DHO_MERIT_DUMP 14
106 1.1 christos #define DHO_DOMAIN_NAME 15
107 1.1 christos #define DHO_SWAP_SERVER 16
108 1.1 christos #define DHO_ROOT_PATH 17
109 1.1 christos #define DHO_EXTENSIONS_PATH 18
110 1.1 christos #define DHO_IP_FORWARDING 19
111 1.1 christos #define DHO_NON_LOCAL_SOURCE_ROUTING 20
112 1.1 christos #define DHO_POLICY_FILTER 21
113 1.1 christos #define DHO_MAX_DGRAM_REASSEMBLY 22
114 1.1 christos #define DHO_DEFAULT_IP_TTL 23
115 1.1 christos #define DHO_PATH_MTU_AGING_TIMEOUT 24
116 1.1 christos #define DHO_PATH_MTU_PLATEAU_TABLE 25
117 1.1 christos #define DHO_INTERFACE_MTU 26
118 1.1 christos #define DHO_ALL_SUBNETS_LOCAL 27
119 1.1 christos #define DHO_BROADCAST_ADDRESS 28
120 1.1 christos #define DHO_PERFORM_MASK_DISCOVERY 29
121 1.1 christos #define DHO_MASK_SUPPLIER 30
122 1.1 christos #define DHO_ROUTER_DISCOVERY 31
123 1.1 christos #define DHO_ROUTER_SOLICITATION_ADDRESS 32
124 1.1 christos #define DHO_STATIC_ROUTES 33
125 1.1 christos #define DHO_TRAILER_ENCAPSULATION 34
126 1.1 christos #define DHO_ARP_CACHE_TIMEOUT 35
127 1.1 christos #define DHO_IEEE802_3_ENCAPSULATION 36
128 1.1 christos #define DHO_DEFAULT_TCP_TTL 37
129 1.1 christos #define DHO_TCP_KEEPALIVE_INTERVAL 38
130 1.1 christos #define DHO_TCP_KEEPALIVE_GARBAGE 39
131 1.1 christos #define DHO_NIS_DOMAIN 40
132 1.1 christos #define DHO_NIS_SERVERS 41
133 1.1 christos #define DHO_NTP_SERVERS 42
134 1.1 christos #define DHO_VENDOR_ENCAPSULATED_OPTIONS 43
135 1.1 christos #define DHO_NETBIOS_NAME_SERVERS 44
136 1.1 christos #define DHO_NETBIOS_DD_SERVER 45
137 1.1 christos #define DHO_NETBIOS_NODE_TYPE 46
138 1.1 christos #define DHO_NETBIOS_SCOPE 47
139 1.1 christos #define DHO_FONT_SERVERS 48
140 1.1 christos #define DHO_X_DISPLAY_MANAGER 49
141 1.1 christos #define DHO_DHCP_REQUESTED_ADDRESS 50
142 1.1 christos #define DHO_DHCP_LEASE_TIME 51
143 1.1 christos #define DHO_DHCP_OPTION_OVERLOAD 52
144 1.1 christos #define DHO_DHCP_MESSAGE_TYPE 53
145 1.1 christos #define DHO_DHCP_SERVER_IDENTIFIER 54
146 1.1 christos #define DHO_DHCP_PARAMETER_REQUEST_LIST 55
147 1.1 christos #define DHO_DHCP_MESSAGE 56
148 1.1 christos #define DHO_DHCP_MAX_MESSAGE_SIZE 57
149 1.1 christos #define DHO_DHCP_RENEWAL_TIME 58
150 1.1 christos #define DHO_DHCP_REBINDING_TIME 59
151 1.1 christos #define DHO_VENDOR_CLASS_IDENTIFIER 60
152 1.1 christos #define DHO_DHCP_CLIENT_IDENTIFIER 61
153 1.1 christos #define DHO_NWIP_DOMAIN_NAME 62
154 1.1 christos #define DHO_NWIP_SUBOPTIONS 63
155 1.1 christos #define DHO_USER_CLASS 77
156 1.1 christos #define DHO_FQDN 81
157 1.1 christos #define DHO_DHCP_AGENT_OPTIONS 82
158 1.1 christos #define DHO_AUTHENTICATE 90 /* RFC3118, was 210 */
159 1.1 christos #define DHO_CLIENT_LAST_TRANSACTION_TIME 91
160 1.1 christos #define DHO_ASSOCIATED_IP 92
161 1.1 christos #define DHO_SUBNET_SELECTION 118 /* RFC3011! */
162 1.1 christos #define DHO_DOMAIN_SEARCH 119 /* RFC3397 */
163 1.1 christos #define DHO_VIVCO_SUBOPTIONS 124
164 1.1 christos #define DHO_VIVSO_SUBOPTIONS 125
165 1.1 christos
166 1.1 christos #define DHO_END 255
167 1.1 christos
168 1.1 christos /* DHCP message types. */
169 1.1 christos #define DHCPDISCOVER 1
170 1.1 christos #define DHCPOFFER 2
171 1.1 christos #define DHCPREQUEST 3
172 1.1 christos #define DHCPDECLINE 4
173 1.1 christos #define DHCPACK 5
174 1.1 christos #define DHCPNAK 6
175 1.1 christos #define DHCPRELEASE 7
176 1.1 christos #define DHCPINFORM 8
177 1.1 christos #define DHCPLEASEQUERY 10
178 1.1 christos #define DHCPLEASEUNASSIGNED 11
179 1.1 christos #define DHCPLEASEUNKNOWN 12
180 1.1 christos #define DHCPLEASEACTIVE 13
181 1.1 christos
182 1.1 christos
183 1.1 christos /* Relay Agent Information option subtypes: */
184 1.1 christos #define RAI_CIRCUIT_ID 1
185 1.1 christos #define RAI_REMOTE_ID 2
186 1.1 christos #define RAI_AGENT_ID 3
187 1.1 christos #define RAI_LINK_SELECT 5
188 1.1 christos /* not yet assigned but next free value */
189 1.1 christos #define RAI_RELAY_PORT 19
190 1.1 christos
191 1.1 christos /* FQDN suboptions: */
192 1.1 christos #define FQDN_NO_CLIENT_UPDATE 1
193 1.1 christos #define FQDN_SERVER_UPDATE 2
194 1.1 christos #define FQDN_ENCODED 3
195 1.1 christos #define FQDN_RCODE1 4
196 1.1 christos #define FQDN_RCODE2 5
197 1.1 christos #define FQDN_HOSTNAME 6
198 1.1 christos #define FQDN_DOMAINNAME 7
199 1.1 christos #define FQDN_FQDN 8
200 1.1 christos #define FQDN_SUBOPTION_COUNT 8
201 1.1 christos
202 1.1 christos /* Enterprise Suboptions: */
203 1.1 christos #define VENDOR_ISC_SUBOPTIONS 2495
204 1.1 christos
205 1.1 christos #endif /* DHCP_H */
206 1.1 christos
207