Fix warning:
[dragonfly.git] / contrib / dhcp-3.0 / includes / dhcp.h
1 /* dhcp.h
2
3    Protocol structures... */
4
5 /*
6  * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
7  * Copyright (c) 1995-2003 by Internet Software Consortium
8  *
9  * Permission to use, copy, modify, and distribute this software for any
10  * purpose with or without fee is hereby granted, provided that the above
11  * copyright notice and this permission notice appear in all copies.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
14  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15  * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
16  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
19  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20  *
21  *   Internet Systems Consortium, Inc.
22  *   950 Charter Street
23  *   Redwood City, CA 94063
24  *   <info@isc.org>
25  *   http://www.isc.org/
26  *
27  * This software has been written for Internet Systems Consortium
28  * by Ted Lemon in cooperation with Vixie Enterprises.  To learn more
29  * about Internet Systems Consortium, see ``http://www.isc.org''.
30  * To learn more about Vixie Enterprises, see ``http://www.vix.com''.
31  */
32
33 #define DHCP_UDP_OVERHEAD       (14 + /* Ethernet header */             \
34                                  20 + /* IP header */                   \
35                                  8)   /* UDP header */
36 #define DHCP_SNAME_LEN          64
37 #define DHCP_FILE_LEN           128
38 #define DHCP_FIXED_NON_UDP      236
39 #define DHCP_FIXED_LEN          (DHCP_FIXED_NON_UDP + DHCP_UDP_OVERHEAD)
40                                                 /* Everything but options. */
41 #define DHCP_MTU_MAX            1500
42 #define DHCP_OPTION_LEN         (DHCP_MTU_MAX - DHCP_FIXED_LEN)
43
44 #define BOOTP_MIN_LEN           300
45 #define DHCP_MIN_LEN            548
46
47 struct dhcp_packet {
48         u_int8_t  op;           /* 0: Message opcode/type */
49         u_int8_t  htype;        /* 1: Hardware addr type (net/if_types.h) */
50         u_int8_t  hlen;         /* 2: Hardware addr length */
51         u_int8_t  hops;         /* 3: Number of relay agent hops from client */
52         u_int32_t xid;          /* 4: Transaction ID */
53         u_int16_t secs;         /* 8: Seconds since client started looking */
54         u_int16_t flags;        /* 10: Flag bits */
55         struct in_addr ciaddr;  /* 12: Client IP address (if already in use) */
56         struct in_addr yiaddr;  /* 16: Client IP address */
57         struct in_addr siaddr;  /* 18: IP address of next server to talk to */
58         struct in_addr giaddr;  /* 20: DHCP relay agent IP address */
59         unsigned char chaddr [16];      /* 24: Client hardware address */
60         char sname [DHCP_SNAME_LEN];    /* 40: Server name */
61         char file [DHCP_FILE_LEN];      /* 104: Boot filename */
62         unsigned char options [DHCP_OPTION_LEN];
63                                 /* 212: Optional parameters
64                                    (actual length dependent on MTU). */
65 };
66
67 /* BOOTP (rfc951) message types */
68 #define BOOTREQUEST     1
69 #define BOOTREPLY       2
70
71 /* Possible values for flags field... */
72 #define BOOTP_BROADCAST 32768L
73
74 /* Possible values for hardware type (htype) field... */
75 #define HTYPE_ETHER     1               /* Ethernet 10Mbps              */
76 #define HTYPE_IEEE802   6               /* IEEE 802.2 Token Ring...     */
77 #define HTYPE_FDDI      8               /* FDDI...                      */
78
79 /* Magic cookie validating dhcp options field (and bootp vendor
80    extensions field). */
81 #define DHCP_OPTIONS_COOKIE     "\143\202\123\143"
82
83 /* DHCP Option codes: */
84
85 #define DHO_PAD                         0
86 #define DHO_SUBNET_MASK                 1
87 #define DHO_TIME_OFFSET                 2
88 #define DHO_ROUTERS                     3
89 #define DHO_TIME_SERVERS                4
90 #define DHO_NAME_SERVERS                5
91 #define DHO_DOMAIN_NAME_SERVERS         6
92 #define DHO_LOG_SERVERS                 7
93 #define DHO_COOKIE_SERVERS              8
94 #define DHO_LPR_SERVERS                 9
95 #define DHO_IMPRESS_SERVERS             10
96 #define DHO_RESOURCE_LOCATION_SERVERS   11
97 #define DHO_HOST_NAME                   12
98 #define DHO_BOOT_SIZE                   13
99 #define DHO_MERIT_DUMP                  14
100 #define DHO_DOMAIN_NAME                 15
101 #define DHO_SWAP_SERVER                 16
102 #define DHO_ROOT_PATH                   17
103 #define DHO_EXTENSIONS_PATH             18
104 #define DHO_IP_FORWARDING               19
105 #define DHO_NON_LOCAL_SOURCE_ROUTING    20
106 #define DHO_POLICY_FILTER               21
107 #define DHO_MAX_DGRAM_REASSEMBLY        22
108 #define DHO_DEFAULT_IP_TTL              23
109 #define DHO_PATH_MTU_AGING_TIMEOUT      24
110 #define DHO_PATH_MTU_PLATEAU_TABLE      25
111 #define DHO_INTERFACE_MTU               26
112 #define DHO_ALL_SUBNETS_LOCAL           27
113 #define DHO_BROADCAST_ADDRESS           28
114 #define DHO_PERFORM_MASK_DISCOVERY      29
115 #define DHO_MASK_SUPPLIER               30
116 #define DHO_ROUTER_DISCOVERY            31
117 #define DHO_ROUTER_SOLICITATION_ADDRESS 32
118 #define DHO_STATIC_ROUTES               33
119 #define DHO_TRAILER_ENCAPSULATION       34
120 #define DHO_ARP_CACHE_TIMEOUT           35
121 #define DHO_IEEE802_3_ENCAPSULATION     36
122 #define DHO_DEFAULT_TCP_TTL             37
123 #define DHO_TCP_KEEPALIVE_INTERVAL      38
124 #define DHO_TCP_KEEPALIVE_GARBAGE       39
125 #define DHO_NIS_DOMAIN                  40
126 #define DHO_NIS_SERVERS                 41
127 #define DHO_NTP_SERVERS                 42
128 #define DHO_VENDOR_ENCAPSULATED_OPTIONS 43
129 #define DHO_NETBIOS_NAME_SERVERS        44
130 #define DHO_NETBIOS_DD_SERVER           45
131 #define DHO_NETBIOS_NODE_TYPE           46
132 #define DHO_NETBIOS_SCOPE               47
133 #define DHO_FONT_SERVERS                48
134 #define DHO_X_DISPLAY_MANAGER           49
135 #define DHO_DHCP_REQUESTED_ADDRESS      50
136 #define DHO_DHCP_LEASE_TIME             51
137 #define DHO_DHCP_OPTION_OVERLOAD        52
138 #define DHO_DHCP_MESSAGE_TYPE           53
139 #define DHO_DHCP_SERVER_IDENTIFIER      54
140 #define DHO_DHCP_PARAMETER_REQUEST_LIST 55
141 #define DHO_DHCP_MESSAGE                56
142 #define DHO_DHCP_MAX_MESSAGE_SIZE       57
143 #define DHO_DHCP_RENEWAL_TIME           58
144 #define DHO_DHCP_REBINDING_TIME         59
145 #define DHO_VENDOR_CLASS_IDENTIFIER     60
146 #define DHO_DHCP_CLIENT_IDENTIFIER      61
147 #define DHO_NWIP_DOMAIN_NAME            62
148 #define DHO_NWIP_SUBOPTIONS             63
149 #define DHO_USER_CLASS                  77
150 #define DHO_FQDN                        81
151 #define DHO_DHCP_AGENT_OPTIONS          82
152 #define DHO_SUBNET_SELECTION            118 /* RFC3011! */
153 /* The DHO_AUTHENTICATE option is not a standard yet, so I've
154    allocated an option out of the "local" option space for it on a
155    temporary basis.  Once an option code number is assigned, I will
156    immediately and shamelessly break this, so don't count on it
157    continuing to work. */
158 #define DHO_AUTHENTICATE                210
159
160 #define DHO_END                         255
161
162 /* DHCP message types. */
163 #define DHCPDISCOVER    1
164 #define DHCPOFFER       2
165 #define DHCPREQUEST     3
166 #define DHCPDECLINE     4
167 #define DHCPACK         5
168 #define DHCPNAK         6
169 #define DHCPRELEASE     7
170 #define DHCPINFORM      8
171
172 /* Relay Agent Information option subtypes: */
173 #define RAI_CIRCUIT_ID  1
174 #define RAI_REMOTE_ID   2
175 #define RAI_AGENT_ID    3
176
177 /* FQDN suboptions: */
178 #define FQDN_NO_CLIENT_UPDATE           1
179 #define FQDN_SERVER_UPDATE              2
180 #define FQDN_ENCODED                    3
181 #define FQDN_RCODE1                     4
182 #define FQDN_RCODE2                     5
183 #define FQDN_HOSTNAME                   6
184 #define FQDN_DOMAINNAME                 7
185 #define FQDN_FQDN                       8
186 #define FQDN_SUBOPTION_COUNT            8