Commit | Line | Data |
---|---|---|
741bbb9f | 1 | /* $OpenBSD: src/sbin/dhclient/dhcp.h,v 1.9 2011/05/11 14:38:36 krw Exp $ */ |
846204b6 HT |
2 | |
3 | /* Protocol structures... */ | |
4 | ||
5 | /* | |
6 | * Copyright (c) 1995, 1996 The Internet Software Consortium. | |
7 | * All rights reserved. | |
8 | * | |
9 | * Redistribution and use in source and binary forms, with or without | |
10 | * modification, are permitted provided that the following conditions | |
11 | * are met: | |
12 | * | |
13 | * 1. Redistributions of source code must retain the above copyright | |
14 | * notice, this list of conditions and the following disclaimer. | |
15 | * 2. Redistributions in binary form must reproduce the above copyright | |
16 | * notice, this list of conditions and the following disclaimer in the | |
17 | * documentation and/or other materials provided with the distribution. | |
18 | * 3. Neither the name of The Internet Software Consortium nor the names | |
19 | * of its contributors may be used to endorse or promote products derived | |
20 | * from this software without specific prior written permission. | |
21 | * | |
22 | * THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND | |
23 | * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, | |
24 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
25 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
26 | * DISCLAIMED. IN NO EVENT SHALL THE INTERNET SOFTWARE CONSORTIUM OR | |
27 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
28 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
29 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |
30 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
31 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
32 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |
33 | * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
34 | * SUCH DAMAGE. | |
35 | * | |
36 | * This software has been written for the Internet Software Consortium | |
37 | * by Ted Lemon <mellon@fugue.com> in cooperation with Vixie | |
38 | * Enterprises. To learn more about the Internet Software Consortium, | |
39 | * see ``http://www.vix.com/isc''. To learn more about Vixie | |
40 | * Enterprises, see ``http://www.vix.com''. | |
41 | */ | |
42 | ||
43 | #define DHCP_UDP_OVERHEAD (20 + /* IP header */ \ | |
44 | 8) /* UDP header */ | |
45 | #define DHCP_SNAME_LEN 64 | |
46 | #define DHCP_FILE_LEN 128 | |
47 | #define DHCP_FIXED_NON_UDP 236 | |
48 | #define DHCP_FIXED_LEN (DHCP_FIXED_NON_UDP + DHCP_UDP_OVERHEAD) | |
49 | /* Everything but options. */ | |
50 | #define DHCP_MTU_MAX 1500 | |
51 | #define DHCP_OPTION_LEN (DHCP_MTU_MAX - DHCP_FIXED_LEN) | |
52 | ||
53 | #define BOOTP_MIN_LEN 300 | |
54 | ||
55 | struct dhcp_packet { | |
56 | u_int8_t op; /* Message opcode/type */ | |
57 | u_int8_t htype; /* Hardware addr type (see net/if_types.h) */ | |
58 | u_int8_t hlen; /* Hardware addr length */ | |
59 | u_int8_t hops; /* Number of relay agent hops from client */ | |
60 | u_int32_t xid; /* Transaction ID */ | |
61 | u_int16_t secs; /* Seconds since client started looking */ | |
62 | u_int16_t flags; /* Flag bits */ | |
63 | struct in_addr ciaddr; /* Client IP address (if already in use) */ | |
64 | struct in_addr yiaddr; /* Client IP address */ | |
65 | struct in_addr siaddr; /* IP address of next server to talk to */ | |
66 | struct in_addr giaddr; /* DHCP relay agent IP address */ | |
67 | unsigned char chaddr[16]; /* Client hardware address */ | |
68 | char sname[DHCP_SNAME_LEN]; /* Server name */ | |
69 | char file[DHCP_FILE_LEN]; /* Boot filename */ | |
70 | unsigned char options[DHCP_OPTION_LEN]; | |
71 | /* Optional parameters | |
72 | (actual length dependent on MTU). */ | |
73 | }; | |
74 | ||
75 | /* BOOTP (rfc951) message types */ | |
76 | #define BOOTREQUEST 1 | |
77 | #define BOOTREPLY 2 | |
78 | ||
79 | /* Possible values for flags field... */ | |
80 | #define BOOTP_BROADCAST 32768L | |
81 | ||
82 | /* Possible values for hardware type (htype) field... */ | |
83 | #define HTYPE_ETHER 1 /* Ethernet */ | |
84 | #define HTYPE_IEEE802 6 /* IEEE 802.2 Token Ring... */ | |
85 | #define HTYPE_FDDI 8 /* FDDI... */ | |
86 | ||
87 | /* Magic cookie validating dhcp options field (and bootp vendor | |
88 | extensions field). */ | |
741bbb9f AHJ |
89 | #define DHCP_OPTIONS_COOKIE "\143\202\123\143" |
90 | #define DHCP_OPTIONS_MESSAGE_TYPE "\065\001\000" | |
846204b6 HT |
91 | |
92 | /* DHCP Option codes: */ | |
93 | ||
94 | #define DHO_PAD 0 | |
95 | #define DHO_SUBNET_MASK 1 | |
96 | #define DHO_TIME_OFFSET 2 | |
97 | #define DHO_ROUTERS 3 | |
98 | #define DHO_TIME_SERVERS 4 | |
99 | #define DHO_NAME_SERVERS 5 | |
100 | #define DHO_DOMAIN_NAME_SERVERS 6 | |
101 | #define DHO_LOG_SERVERS 7 | |
102 | #define DHO_COOKIE_SERVERS 8 | |
103 | #define DHO_LPR_SERVERS 9 | |
104 | #define DHO_IMPRESS_SERVERS 10 | |
105 | #define DHO_RESOURCE_LOCATION_SERVERS 11 | |
106 | #define DHO_HOST_NAME 12 | |
107 | #define DHO_BOOT_SIZE 13 | |
108 | #define DHO_MERIT_DUMP 14 | |
109 | #define DHO_DOMAIN_NAME 15 | |
110 | #define DHO_SWAP_SERVER 16 | |
111 | #define DHO_ROOT_PATH 17 | |
112 | #define DHO_EXTENSIONS_PATH 18 | |
113 | #define DHO_IP_FORWARDING 19 | |
114 | #define DHO_NON_LOCAL_SOURCE_ROUTING 20 | |
115 | #define DHO_POLICY_FILTER 21 | |
116 | #define DHO_MAX_DGRAM_REASSEMBLY 22 | |
117 | #define DHO_DEFAULT_IP_TTL 23 | |
118 | #define DHO_PATH_MTU_AGING_TIMEOUT 24 | |
119 | #define DHO_PATH_MTU_PLATEAU_TABLE 25 | |
120 | #define DHO_INTERFACE_MTU 26 | |
121 | #define DHO_ALL_SUBNETS_LOCAL 27 | |
122 | #define DHO_BROADCAST_ADDRESS 28 | |
123 | #define DHO_PERFORM_MASK_DISCOVERY 29 | |
124 | #define DHO_MASK_SUPPLIER 30 | |
125 | #define DHO_ROUTER_DISCOVERY 31 | |
126 | #define DHO_ROUTER_SOLICITATION_ADDRESS 32 | |
127 | #define DHO_STATIC_ROUTES 33 | |
128 | #define DHO_TRAILER_ENCAPSULATION 34 | |
129 | #define DHO_ARP_CACHE_TIMEOUT 35 | |
130 | #define DHO_IEEE802_3_ENCAPSULATION 36 | |
131 | #define DHO_DEFAULT_TCP_TTL 37 | |
132 | #define DHO_TCP_KEEPALIVE_INTERVAL 38 | |
133 | #define DHO_TCP_KEEPALIVE_GARBAGE 39 | |
134 | #define DHO_NIS_DOMAIN 40 | |
135 | #define DHO_NIS_SERVERS 41 | |
136 | #define DHO_NTP_SERVERS 42 | |
137 | #define DHO_VENDOR_ENCAPSULATED_OPTIONS 43 | |
138 | #define DHO_NETBIOS_NAME_SERVERS 44 | |
139 | #define DHO_NETBIOS_DD_SERVER 45 | |
140 | #define DHO_NETBIOS_NODE_TYPE 46 | |
141 | #define DHO_NETBIOS_SCOPE 47 | |
142 | #define DHO_FONT_SERVERS 48 | |
143 | #define DHO_X_DISPLAY_MANAGER 49 | |
144 | #define DHO_DHCP_REQUESTED_ADDRESS 50 | |
145 | #define DHO_DHCP_LEASE_TIME 51 | |
146 | #define DHO_DHCP_OPTION_OVERLOAD 52 | |
147 | #define DHO_DHCP_MESSAGE_TYPE 53 | |
148 | #define DHO_DHCP_SERVER_IDENTIFIER 54 | |
149 | #define DHO_DHCP_PARAMETER_REQUEST_LIST 55 | |
150 | #define DHO_DHCP_MESSAGE 56 | |
151 | #define DHO_DHCP_MAX_MESSAGE_SIZE 57 | |
152 | #define DHO_DHCP_RENEWAL_TIME 58 | |
153 | #define DHO_DHCP_REBINDING_TIME 59 | |
154 | #define DHO_DHCP_CLASS_IDENTIFIER 60 | |
155 | #define DHO_DHCP_CLIENT_IDENTIFIER 61 | |
7a6ba664 | 156 | #define DHO_TFTP_SERVER 66 |
846204b6 HT |
157 | #define DHO_DHCP_USER_CLASS_ID 77 |
158 | #define DHO_END 255 | |
159 | ||
160 | /* DHCP message types. */ | |
161 | #define DHCPDISCOVER 1 | |
162 | #define DHCPOFFER 2 | |
163 | #define DHCPREQUEST 3 | |
164 | #define DHCPDECLINE 4 | |
165 | #define DHCPACK 5 | |
166 | #define DHCPNAK 6 | |
167 | #define DHCPRELEASE 7 | |
168 | #define DHCPINFORM 8 |