]> git.ipfire.org Git - thirdparty/dhcp.git/blob - common/tables.c
Go back to the BSD license.
[thirdparty/dhcp.git] / common / tables.c
1 /* tables.c
2
3 Tables of information... */
4
5 /*
6 * Copyright (c) 1995-2000 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 in cooperation with Vixie Enterprises and Nominum, Inc.
38 * To learn more about the Internet Software Consortium, see
39 * ``http://www.isc.org/''. To learn more about Vixie Enterprises,
40 * see ``http://www.vix.com''. To learn more about Nominum, Inc., see
41 * ``http://www.nominum.com''.
42 */
43
44 #ifndef lint
45 static char copyright[] =
46 "$Id: tables.c,v 1.38 2000/03/17 03:59:02 mellon Exp $ Copyright (c) 1995-2000 The Internet Software Consortium. All rights reserved.\n";
47 #endif /* not lint */
48
49 #include "dhcpd.h"
50
51 /* DHCP Option names, formats and codes, from RFC1533.
52
53 Format codes:
54
55 e - end of data
56 I - IP address
57 l - 32-bit signed integer
58 L - 32-bit unsigned integer
59 s - 16-bit signed integer
60 S - 16-bit unsigned integer
61 b - 8-bit signed integer
62 B - 8-bit unsigned integer
63 t - ASCII text
64 f - flag (true or false)
65 A - array of whatever precedes (e.g., IA means array of IP addresses)
66 U - name of an option space (universe)
67 F - implicit flag - the presence of the option indicates that the
68 flag is true.
69 */
70
71 struct universe dhcp_universe;
72 struct option dhcp_options [256] = {
73 { "pad", "", &dhcp_universe, 0 },
74 { "subnet-mask", "I", &dhcp_universe, 1 },
75 { "time-offset", "l", &dhcp_universe, 2 },
76 { "routers", "IA", &dhcp_universe, 3 },
77 { "time-servers", "IA", &dhcp_universe, 4 },
78 { "ien116-name-servers", "IA", &dhcp_universe, 5 },
79 { "domain-name-servers", "IA", &dhcp_universe, 6 },
80 { "log-servers", "IA", &dhcp_universe, 7 },
81 { "cookie-servers", "IA", &dhcp_universe, 8 },
82 { "lpr-servers", "IA", &dhcp_universe, 9 },
83 { "impress-servers", "IA", &dhcp_universe, 10 },
84 { "resource-location-servers", "IA", &dhcp_universe, 11 },
85 { "host-name", "X", &dhcp_universe, 12 },
86 { "boot-size", "S", &dhcp_universe, 13 },
87 { "merit-dump", "t", &dhcp_universe, 14 },
88 { "domain-name", "t", &dhcp_universe, 15 },
89 { "swap-server", "I", &dhcp_universe, 16 },
90 { "root-path", "t", &dhcp_universe, 17 },
91 { "extensions-path", "t", &dhcp_universe, 18 },
92 { "ip-forwarding", "f", &dhcp_universe, 19 },
93 { "non-local-source-routing", "f", &dhcp_universe, 20 },
94 { "policy-filter", "IIA", &dhcp_universe, 21 },
95 { "max-dgram-reassembly", "S", &dhcp_universe, 22 },
96 { "default-ip-ttl", "B", &dhcp_universe, 23 },
97 { "path-mtu-aging-timeout", "L", &dhcp_universe, 24 },
98 { "path-mtu-plateau-table", "SA", &dhcp_universe, 25 },
99 { "interface-mtu", "S", &dhcp_universe, 26 },
100 { "all-subnets-local", "f", &dhcp_universe, 27 },
101 { "broadcast-address", "I", &dhcp_universe, 28 },
102 { "perform-mask-discovery", "f", &dhcp_universe, 29 },
103 { "mask-supplier", "f", &dhcp_universe, 30 },
104 { "router-discovery", "f", &dhcp_universe, 31 },
105 { "router-solicitation-address", "I", &dhcp_universe, 32 },
106 { "static-routes", "IIA", &dhcp_universe, 33 },
107 { "trailer-encapsulation", "f", &dhcp_universe, 34 },
108 { "arp-cache-timeout", "L", &dhcp_universe, 35 },
109 { "ieee802-3-encapsulation", "f", &dhcp_universe, 36 },
110 { "default-tcp-ttl", "B", &dhcp_universe, 37 },
111 { "tcp-keepalive-interval", "L", &dhcp_universe, 38 },
112 { "tcp-keepalive-garbage", "f", &dhcp_universe, 39 },
113 { "nis-domain", "t", &dhcp_universe, 40 },
114 { "nis-servers", "IA", &dhcp_universe, 41 },
115 { "ntp-servers", "IA", &dhcp_universe, 42 },
116 { "vendor-encapsulated-options", "X", &dhcp_universe, 43 },
117 { "netbios-name-servers", "IA", &dhcp_universe, 44 },
118 { "netbios-dd-server", "IA", &dhcp_universe, 45 },
119 { "netbios-node-type", "B", &dhcp_universe, 46 },
120 { "netbios-scope", "t", &dhcp_universe, 47 },
121 { "font-servers", "IA", &dhcp_universe, 48 },
122 { "x-display-manager", "IA", &dhcp_universe, 49 },
123 { "dhcp-requested-address", "I", &dhcp_universe, 50 },
124 { "dhcp-lease-time", "L", &dhcp_universe, 51 },
125 { "dhcp-option-overload", "B", &dhcp_universe, 52 },
126 { "dhcp-message-type", "B", &dhcp_universe, 53 },
127 { "dhcp-server-identifier", "I", &dhcp_universe, 54 },
128 { "dhcp-parameter-request-list", "BA", &dhcp_universe, 55 },
129 { "dhcp-message", "t", &dhcp_universe, 56 },
130 { "dhcp-max-message-size", "S", &dhcp_universe, 57 },
131 { "dhcp-renewal-time", "L", &dhcp_universe, 58 },
132 { "dhcp-rebinding-time", "L", &dhcp_universe, 59 },
133 { "vendor-class-identifier", "X", &dhcp_universe, 60 },
134 { "dhcp-client-identifier", "X", &dhcp_universe, 61 },
135 { "nwip-domain", "X", &dhcp_universe, 62 },
136 { "nwip-suboptions", "X", &dhcp_universe, 63 },
137 { "nisplus-domain", "t", &dhcp_universe, 64 },
138 { "nisplus-servers", "IA", &dhcp_universe, 65 },
139 { "tftp-server-name", "t", &dhcp_universe, 66 },
140 { "bootfile-name", "t", &dhcp_universe, 67 },
141 { "mobile-ip-home-agent", "IA", &dhcp_universe, 68 },
142 { "smtp-server", "IA", &dhcp_universe, 69 },
143 { "pop-server", "IA", &dhcp_universe, 70 },
144 { "nntp-server", "IA", &dhcp_universe, 71 },
145 { "www-server", "IA", &dhcp_universe, 72 },
146 { "finger-server", "IA", &dhcp_universe, 73 },
147 { "irc-server", "IA", &dhcp_universe, 74 },
148 { "streettalk-server", "IA", &dhcp_universe, 75 },
149 { "streettalk-directory-assistance-server", "IA", &dhcp_universe, 76 },
150 { "user-class", "t", &dhcp_universe, 77 },
151 { "option-78", "X", &dhcp_universe, 78 },
152 { "option-79", "X", &dhcp_universe, 79 },
153 { "option-80", "X", &dhcp_universe, 80 },
154 { "option-81", "X", &dhcp_universe, 81 },
155 { "option-82", "X", &dhcp_universe, 82 },
156 { "option-83", "X", &dhcp_universe, 83 },
157 { "option-84", "X", &dhcp_universe, 84 },
158 { "nds-servers", "IA", &dhcp_universe, 85 },
159 { "nds-tree-name", "X", &dhcp_universe, 86 },
160 { "nds-context", "X", &dhcp_universe, 87 },
161 { "option-88", "X", &dhcp_universe, 88 },
162 { "option-89", "X", &dhcp_universe, 89 },
163 { "option-90", "X", &dhcp_universe, 90 },
164 { "option-91", "X", &dhcp_universe, 91 },
165 { "option-92", "X", &dhcp_universe, 92 },
166 { "option-93", "X", &dhcp_universe, 93 },
167 { "option-94", "X", &dhcp_universe, 94 },
168 { "option-95", "X", &dhcp_universe, 95 },
169 { "option-96", "X", &dhcp_universe, 96 },
170 { "option-97", "X", &dhcp_universe, 97 },
171 { "uap-servers", "t", &dhcp_universe, 98 },
172 { "option-99", "X", &dhcp_universe, 99 },
173 { "option-100", "X", &dhcp_universe, 100 },
174 { "option-101", "X", &dhcp_universe, 101 },
175 { "option-102", "X", &dhcp_universe, 102 },
176 { "option-103", "X", &dhcp_universe, 103 },
177 { "option-104", "X", &dhcp_universe, 104 },
178 { "option-105", "X", &dhcp_universe, 105 },
179 { "option-106", "X", &dhcp_universe, 106 },
180 { "option-107", "X", &dhcp_universe, 107 },
181 { "option-108", "X", &dhcp_universe, 108 },
182 { "option-109", "X", &dhcp_universe, 109 },
183 { "option-110", "X", &dhcp_universe, 110 },
184 { "option-111", "X", &dhcp_universe, 111 },
185 { "option-112", "X", &dhcp_universe, 112 },
186 { "option-113", "X", &dhcp_universe, 113 },
187 { "option-114", "X", &dhcp_universe, 114 },
188 { "option-115", "X", &dhcp_universe, 115 },
189 { "option-116", "X", &dhcp_universe, 116 },
190 { "option-117", "X", &dhcp_universe, 117 },
191 { "option-118", "X", &dhcp_universe, 118 },
192 { "option-119", "X", &dhcp_universe, 119 },
193 { "option-120", "X", &dhcp_universe, 120 },
194 { "option-121", "X", &dhcp_universe, 121 },
195 { "option-122", "X", &dhcp_universe, 122 },
196 { "option-123", "X", &dhcp_universe, 123 },
197 { "option-124", "X", &dhcp_universe, 124 },
198 { "option-125", "X", &dhcp_universe, 125 },
199 { "option-126", "X", &dhcp_universe, 126 },
200 { "option-127", "X", &dhcp_universe, 127 },
201 { "option-128", "X", &dhcp_universe, 128 },
202 { "option-129", "X", &dhcp_universe, 129 },
203 { "option-130", "X", &dhcp_universe, 130 },
204 { "option-131", "X", &dhcp_universe, 131 },
205 { "option-132", "X", &dhcp_universe, 132 },
206 { "option-133", "X", &dhcp_universe, 133 },
207 { "option-134", "X", &dhcp_universe, 134 },
208 { "option-135", "X", &dhcp_universe, 135 },
209 { "option-136", "X", &dhcp_universe, 136 },
210 { "option-137", "X", &dhcp_universe, 137 },
211 { "option-138", "X", &dhcp_universe, 138 },
212 { "option-139", "X", &dhcp_universe, 139 },
213 { "option-140", "X", &dhcp_universe, 140 },
214 { "option-141", "X", &dhcp_universe, 141 },
215 { "option-142", "X", &dhcp_universe, 142 },
216 { "option-143", "X", &dhcp_universe, 143 },
217 { "option-144", "X", &dhcp_universe, 144 },
218 { "option-145", "X", &dhcp_universe, 145 },
219 { "option-146", "X", &dhcp_universe, 146 },
220 { "option-147", "X", &dhcp_universe, 147 },
221 { "option-148", "X", &dhcp_universe, 148 },
222 { "option-149", "X", &dhcp_universe, 149 },
223 { "option-150", "X", &dhcp_universe, 150 },
224 { "option-151", "X", &dhcp_universe, 151 },
225 { "option-152", "X", &dhcp_universe, 152 },
226 { "option-153", "X", &dhcp_universe, 153 },
227 { "option-154", "X", &dhcp_universe, 154 },
228 { "option-155", "X", &dhcp_universe, 155 },
229 { "option-156", "X", &dhcp_universe, 156 },
230 { "option-157", "X", &dhcp_universe, 157 },
231 { "option-158", "X", &dhcp_universe, 158 },
232 { "option-159", "X", &dhcp_universe, 159 },
233 { "option-160", "X", &dhcp_universe, 160 },
234 { "option-161", "X", &dhcp_universe, 161 },
235 { "option-162", "X", &dhcp_universe, 162 },
236 { "option-163", "X", &dhcp_universe, 163 },
237 { "option-164", "X", &dhcp_universe, 164 },
238 { "option-165", "X", &dhcp_universe, 165 },
239 { "option-166", "X", &dhcp_universe, 166 },
240 { "option-167", "X", &dhcp_universe, 167 },
241 { "option-168", "X", &dhcp_universe, 168 },
242 { "option-169", "X", &dhcp_universe, 169 },
243 { "option-170", "X", &dhcp_universe, 170 },
244 { "option-171", "X", &dhcp_universe, 171 },
245 { "option-172", "X", &dhcp_universe, 172 },
246 { "option-173", "X", &dhcp_universe, 173 },
247 { "option-174", "X", &dhcp_universe, 174 },
248 { "option-175", "X", &dhcp_universe, 175 },
249 { "option-176", "X", &dhcp_universe, 176 },
250 { "option-177", "X", &dhcp_universe, 177 },
251 { "option-178", "X", &dhcp_universe, 178 },
252 { "option-179", "X", &dhcp_universe, 179 },
253 { "option-180", "X", &dhcp_universe, 180 },
254 { "option-181", "X", &dhcp_universe, 181 },
255 { "option-182", "X", &dhcp_universe, 182 },
256 { "option-183", "X", &dhcp_universe, 183 },
257 { "option-184", "X", &dhcp_universe, 184 },
258 { "option-185", "X", &dhcp_universe, 185 },
259 { "option-186", "X", &dhcp_universe, 186 },
260 { "option-187", "X", &dhcp_universe, 187 },
261 { "option-188", "X", &dhcp_universe, 188 },
262 { "option-189", "X", &dhcp_universe, 189 },
263 { "option-190", "X", &dhcp_universe, 190 },
264 { "option-191", "X", &dhcp_universe, 191 },
265 { "option-192", "X", &dhcp_universe, 192 },
266 { "option-193", "X", &dhcp_universe, 193 },
267 { "option-194", "X", &dhcp_universe, 194 },
268 { "option-195", "X", &dhcp_universe, 195 },
269 { "option-196", "X", &dhcp_universe, 196 },
270 { "option-197", "X", &dhcp_universe, 197 },
271 { "option-198", "X", &dhcp_universe, 198 },
272 { "option-199", "X", &dhcp_universe, 199 },
273 { "option-200", "X", &dhcp_universe, 200 },
274 { "option-201", "X", &dhcp_universe, 201 },
275 { "option-202", "X", &dhcp_universe, 202 },
276 { "option-203", "X", &dhcp_universe, 203 },
277 { "option-204", "X", &dhcp_universe, 204 },
278 { "option-205", "X", &dhcp_universe, 205 },
279 { "option-206", "X", &dhcp_universe, 206 },
280 { "option-207", "X", &dhcp_universe, 207 },
281 { "option-208", "X", &dhcp_universe, 208 },
282 { "option-209", "X", &dhcp_universe, 209 },
283 { "authenticate", "X", &dhcp_universe, 210 },
284 { "option-211", "X", &dhcp_universe, 211 },
285 { "option-212", "X", &dhcp_universe, 212 },
286 { "option-213", "X", &dhcp_universe, 213 },
287 { "option-214", "X", &dhcp_universe, 214 },
288 { "option-215", "X", &dhcp_universe, 215 },
289 { "option-216", "X", &dhcp_universe, 216 },
290 { "option-217", "X", &dhcp_universe, 217 },
291 { "option-218", "X", &dhcp_universe, 218 },
292 { "option-219", "X", &dhcp_universe, 219 },
293 { "option-220", "X", &dhcp_universe, 220 },
294 { "option-221", "X", &dhcp_universe, 221 },
295 { "option-222", "X", &dhcp_universe, 222 },
296 { "option-223", "X", &dhcp_universe, 223 },
297 { "option-224", "X", &dhcp_universe, 224 },
298 { "option-225", "X", &dhcp_universe, 225 },
299 { "option-226", "X", &dhcp_universe, 226 },
300 { "option-227", "X", &dhcp_universe, 227 },
301 { "option-228", "X", &dhcp_universe, 228 },
302 { "option-229", "X", &dhcp_universe, 229 },
303 { "option-230", "X", &dhcp_universe, 230 },
304 { "option-231", "X", &dhcp_universe, 231 },
305 { "option-232", "X", &dhcp_universe, 232 },
306 { "option-233", "X", &dhcp_universe, 233 },
307 { "option-234", "X", &dhcp_universe, 234 },
308 { "option-235", "X", &dhcp_universe, 235 },
309 { "option-236", "X", &dhcp_universe, 236 },
310 { "option-237", "X", &dhcp_universe, 237 },
311 { "option-238", "X", &dhcp_universe, 238 },
312 { "option-239", "X", &dhcp_universe, 239 },
313 { "option-240", "X", &dhcp_universe, 240 },
314 { "option-241", "X", &dhcp_universe, 241 },
315 { "option-242", "X", &dhcp_universe, 242 },
316 { "option-243", "X", &dhcp_universe, 243 },
317 { "option-244", "X", &dhcp_universe, 244 },
318 { "option-245", "X", &dhcp_universe, 245 },
319 { "option-246", "X", &dhcp_universe, 246 },
320 { "option-247", "X", &dhcp_universe, 247 },
321 { "option-248", "X", &dhcp_universe, 248 },
322 { "option-249", "X", &dhcp_universe, 249 },
323 { "option-250", "X", &dhcp_universe, 250 },
324 { "option-251", "X", &dhcp_universe, 251 },
325 { "option-252", "X", &dhcp_universe, 252 },
326 { "option-253", "X", &dhcp_universe, 253 },
327 { "option-254", "X", &dhcp_universe, 254 },
328 { "option-end", "e", &dhcp_universe, 255 },
329 };
330
331 struct universe nwip_universe;
332 struct option nwip_options [256] = {
333 { "pad", "", &nwip_universe, 0 },
334 { "illegal-1", "", &nwip_universe, 1 },
335 { "illegal-2", "", &nwip_universe, 2 },
336 { "illegal-3", "", &nwip_universe, 3 },
337 { "illegal-4", "", &nwip_universe, 4 },
338 { "nsq-broadcast", "f", &nwip_universe, 5 },
339 { "preferred-dss", "IA", &nwip_universe, 6 },
340 { "nearest-nwip-server", "IA", &nwip_universe, 7 },
341 { "autoretries", "B", &nwip_universe, 8 },
342 { "autoretry-secs", "B", &nwip_universe, 9 },
343 { "nwip-1-1", "f", &nwip_universe, 10 },
344 { "primary-dss", "I", &nwip_universe, 11 },
345 { "option-12", "X", &nwip_universe, 12 },
346 { "option-13", "X", &nwip_universe, 13 },
347 { "option-14", "X", &nwip_universe, 14 },
348 { "option-15", "X", &nwip_universe, 15 },
349 { "option-16", "X", &nwip_universe, 16 },
350 { "option-17", "X", &nwip_universe, 17 },
351 { "option-18", "X", &nwip_universe, 18 },
352 { "option-19", "X", &nwip_universe, 19 },
353 { "option-20", "X", &nwip_universe, 20 },
354 { "option-21", "X", &nwip_universe, 21 },
355 { "option-22", "X", &nwip_universe, 22 },
356 { "option-23", "X", &nwip_universe, 23 },
357 { "option-24", "X", &nwip_universe, 24 },
358 { "option-25", "X", &nwip_universe, 25 },
359 { "option-26", "X", &nwip_universe, 26 },
360 { "option-27", "X", &nwip_universe, 27 },
361 { "option-28", "X", &nwip_universe, 28 },
362 { "option-29", "X", &nwip_universe, 29 },
363 { "option-30", "X", &nwip_universe, 30 },
364 { "option-31", "X", &nwip_universe, 31 },
365 { "option-32", "X", &nwip_universe, 32 },
366 { "option-33", "X", &nwip_universe, 33 },
367 { "option-34", "X", &nwip_universe, 34 },
368 { "option-35", "X", &nwip_universe, 35 },
369 { "option-36", "X", &nwip_universe, 36 },
370 { "option-37", "X", &nwip_universe, 37 },
371 { "option-38", "X", &nwip_universe, 38 },
372 { "option-39", "X", &nwip_universe, 39 },
373 { "option-40", "X", &nwip_universe, 40 },
374 { "option-41", "X", &nwip_universe, 41 },
375 { "option-42", "X", &nwip_universe, 42 },
376 { "option-43", "X", &nwip_universe, 43 },
377 { "option-44", "X", &nwip_universe, 44 },
378 { "option-45", "X", &nwip_universe, 45 },
379 { "option-46", "X", &nwip_universe, 46 },
380 { "option-47", "X", &nwip_universe, 47 },
381 { "option-48", "X", &nwip_universe, 48 },
382 { "option-49", "X", &nwip_universe, 49 },
383 { "option-50", "X", &nwip_universe, 50 },
384 { "option-51", "X", &nwip_universe, 51 },
385 { "option-52", "X", &nwip_universe, 52 },
386 { "option-53", "X", &nwip_universe, 53 },
387 { "option-54", "X", &nwip_universe, 54 },
388 { "option-55", "X", &nwip_universe, 55 },
389 { "option-56", "X", &nwip_universe, 56 },
390 { "option-57", "X", &nwip_universe, 57 },
391 { "option-58", "X", &nwip_universe, 58 },
392 { "option-59", "X", &nwip_universe, 59 },
393 { "option-60", "X", &nwip_universe, 60 },
394 { "option-61", "X", &nwip_universe, 61 },
395 { "option-62", "X", &nwip_universe, 62 },
396 { "option-63", "X", &nwip_universe, 63 },
397 { "option-64", "X", &nwip_universe, 64 },
398 { "option-65", "X", &nwip_universe, 65 },
399 { "option-66", "X", &nwip_universe, 66 },
400 { "option-67", "X", &nwip_universe, 67 },
401 { "option-68", "X", &nwip_universe, 68 },
402 { "option-69", "X", &nwip_universe, 69 },
403 { "option-70", "X", &nwip_universe, 70 },
404 { "option-71", "X", &nwip_universe, 71 },
405 { "option-72", "X", &nwip_universe, 72 },
406 { "option-73", "X", &nwip_universe, 73 },
407 { "option-74", "X", &nwip_universe, 74 },
408 { "option-75", "X", &nwip_universe, 75 },
409 { "option-76", "X", &nwip_universe, 76 },
410 { "option-77", "X", &nwip_universe, 77 },
411 { "option-78", "X", &nwip_universe, 78 },
412 { "option-79", "X", &nwip_universe, 79 },
413 { "option-80", "X", &nwip_universe, 80 },
414 { "option-81", "X", &nwip_universe, 81 },
415 { "option-82", "X", &nwip_universe, 82 },
416 { "option-83", "X", &nwip_universe, 83 },
417 { "option-84", "X", &nwip_universe, 84 },
418 { "option-85", "X", &nwip_universe, 85 },
419 { "option-86", "X", &nwip_universe, 86 },
420 { "option-87", "X", &nwip_universe, 87 },
421 { "option-88", "X", &nwip_universe, 88 },
422 { "option-89", "X", &nwip_universe, 89 },
423 { "option-90", "X", &nwip_universe, 90 },
424 { "option-91", "X", &nwip_universe, 91 },
425 { "option-92", "X", &nwip_universe, 92 },
426 { "option-93", "X", &nwip_universe, 93 },
427 { "option-94", "X", &nwip_universe, 94 },
428 { "option-95", "X", &nwip_universe, 95 },
429 { "option-96", "X", &nwip_universe, 96 },
430 { "option-97", "X", &nwip_universe, 97 },
431 { "option-98", "X", &nwip_universe, 98 },
432 { "option-99", "X", &nwip_universe, 99 },
433 { "option-100", "X", &nwip_universe, 100 },
434 { "option-101", "X", &nwip_universe, 101 },
435 { "option-102", "X", &nwip_universe, 102 },
436 { "option-103", "X", &nwip_universe, 103 },
437 { "option-104", "X", &nwip_universe, 104 },
438 { "option-105", "X", &nwip_universe, 105 },
439 { "option-106", "X", &nwip_universe, 106 },
440 { "option-107", "X", &nwip_universe, 107 },
441 { "option-108", "X", &nwip_universe, 108 },
442 { "option-109", "X", &nwip_universe, 109 },
443 { "option-110", "X", &nwip_universe, 110 },
444 { "option-111", "X", &nwip_universe, 111 },
445 { "option-112", "X", &nwip_universe, 112 },
446 { "option-113", "X", &nwip_universe, 113 },
447 { "option-114", "X", &nwip_universe, 114 },
448 { "option-115", "X", &nwip_universe, 115 },
449 { "option-116", "X", &nwip_universe, 116 },
450 { "option-117", "X", &nwip_universe, 117 },
451 { "option-118", "X", &nwip_universe, 118 },
452 { "option-119", "X", &nwip_universe, 119 },
453 { "option-120", "X", &nwip_universe, 120 },
454 { "option-121", "X", &nwip_universe, 121 },
455 { "option-122", "X", &nwip_universe, 122 },
456 { "option-123", "X", &nwip_universe, 123 },
457 { "option-124", "X", &nwip_universe, 124 },
458 { "option-125", "X", &nwip_universe, 125 },
459 { "option-126", "X", &nwip_universe, 126 },
460 { "option-127", "X", &nwip_universe, 127 },
461 { "option-128", "X", &nwip_universe, 128 },
462 { "option-129", "X", &nwip_universe, 129 },
463 { "option-130", "X", &nwip_universe, 130 },
464 { "option-131", "X", &nwip_universe, 131 },
465 { "option-132", "X", &nwip_universe, 132 },
466 { "option-133", "X", &nwip_universe, 133 },
467 { "option-134", "X", &nwip_universe, 134 },
468 { "option-135", "X", &nwip_universe, 135 },
469 { "option-136", "X", &nwip_universe, 136 },
470 { "option-137", "X", &nwip_universe, 137 },
471 { "option-138", "X", &nwip_universe, 138 },
472 { "option-139", "X", &nwip_universe, 139 },
473 { "option-140", "X", &nwip_universe, 140 },
474 { "option-141", "X", &nwip_universe, 141 },
475 { "option-142", "X", &nwip_universe, 142 },
476 { "option-143", "X", &nwip_universe, 143 },
477 { "option-144", "X", &nwip_universe, 144 },
478 { "option-145", "X", &nwip_universe, 145 },
479 { "option-146", "X", &nwip_universe, 146 },
480 { "option-147", "X", &nwip_universe, 147 },
481 { "option-148", "X", &nwip_universe, 148 },
482 { "option-149", "X", &nwip_universe, 149 },
483 { "option-150", "X", &nwip_universe, 150 },
484 { "option-151", "X", &nwip_universe, 151 },
485 { "option-152", "X", &nwip_universe, 152 },
486 { "option-153", "X", &nwip_universe, 153 },
487 { "option-154", "X", &nwip_universe, 154 },
488 { "option-155", "X", &nwip_universe, 155 },
489 { "option-156", "X", &nwip_universe, 156 },
490 { "option-157", "X", &nwip_universe, 157 },
491 { "option-158", "X", &nwip_universe, 158 },
492 { "option-159", "X", &nwip_universe, 159 },
493 { "option-160", "X", &nwip_universe, 160 },
494 { "option-161", "X", &nwip_universe, 161 },
495 { "option-162", "X", &nwip_universe, 162 },
496 { "option-163", "X", &nwip_universe, 163 },
497 { "option-164", "X", &nwip_universe, 164 },
498 { "option-165", "X", &nwip_universe, 165 },
499 { "option-166", "X", &nwip_universe, 166 },
500 { "option-167", "X", &nwip_universe, 167 },
501 { "option-168", "X", &nwip_universe, 168 },
502 { "option-169", "X", &nwip_universe, 169 },
503 { "option-170", "X", &nwip_universe, 170 },
504 { "option-171", "X", &nwip_universe, 171 },
505 { "option-172", "X", &nwip_universe, 172 },
506 { "option-173", "X", &nwip_universe, 173 },
507 { "option-174", "X", &nwip_universe, 174 },
508 { "option-175", "X", &nwip_universe, 175 },
509 { "option-176", "X", &nwip_universe, 176 },
510 { "option-177", "X", &nwip_universe, 177 },
511 { "option-178", "X", &nwip_universe, 178 },
512 { "option-179", "X", &nwip_universe, 179 },
513 { "option-180", "X", &nwip_universe, 180 },
514 { "option-181", "X", &nwip_universe, 181 },
515 { "option-182", "X", &nwip_universe, 182 },
516 { "option-183", "X", &nwip_universe, 183 },
517 { "option-184", "X", &nwip_universe, 184 },
518 { "option-185", "X", &nwip_universe, 185 },
519 { "option-186", "X", &nwip_universe, 186 },
520 { "option-187", "X", &nwip_universe, 187 },
521 { "option-188", "X", &nwip_universe, 188 },
522 { "option-189", "X", &nwip_universe, 189 },
523 { "option-190", "X", &nwip_universe, 190 },
524 { "option-191", "X", &nwip_universe, 191 },
525 { "option-192", "X", &nwip_universe, 192 },
526 { "option-193", "X", &nwip_universe, 193 },
527 { "option-194", "X", &nwip_universe, 194 },
528 { "option-195", "X", &nwip_universe, 195 },
529 { "option-196", "X", &nwip_universe, 196 },
530 { "option-197", "X", &nwip_universe, 197 },
531 { "option-198", "X", &nwip_universe, 198 },
532 { "option-199", "X", &nwip_universe, 199 },
533 { "option-200", "X", &nwip_universe, 200 },
534 { "option-201", "X", &nwip_universe, 201 },
535 { "option-202", "X", &nwip_universe, 202 },
536 { "option-203", "X", &nwip_universe, 203 },
537 { "option-204", "X", &nwip_universe, 204 },
538 { "option-205", "X", &nwip_universe, 205 },
539 { "option-206", "X", &nwip_universe, 206 },
540 { "option-207", "X", &nwip_universe, 207 },
541 { "option-208", "X", &nwip_universe, 208 },
542 { "option-209", "X", &nwip_universe, 209 },
543 { "authenticate", "X", &nwip_universe, 210 },
544 { "option-211", "X", &nwip_universe, 211 },
545 { "option-212", "X", &nwip_universe, 212 },
546 { "option-213", "X", &nwip_universe, 213 },
547 { "option-214", "X", &nwip_universe, 214 },
548 { "option-215", "X", &nwip_universe, 215 },
549 { "option-216", "X", &nwip_universe, 216 },
550 { "option-217", "X", &nwip_universe, 217 },
551 { "option-218", "X", &nwip_universe, 218 },
552 { "option-219", "X", &nwip_universe, 219 },
553 { "option-220", "X", &nwip_universe, 220 },
554 { "option-221", "X", &nwip_universe, 221 },
555 { "option-222", "X", &nwip_universe, 222 },
556 { "option-223", "X", &nwip_universe, 223 },
557 { "option-224", "X", &nwip_universe, 224 },
558 { "option-225", "X", &nwip_universe, 225 },
559 { "option-226", "X", &nwip_universe, 226 },
560 { "option-227", "X", &nwip_universe, 227 },
561 { "option-228", "X", &nwip_universe, 228 },
562 { "option-229", "X", &nwip_universe, 229 },
563 { "option-230", "X", &nwip_universe, 230 },
564 { "option-231", "X", &nwip_universe, 231 },
565 { "option-232", "X", &nwip_universe, 232 },
566 { "option-233", "X", &nwip_universe, 233 },
567 { "option-234", "X", &nwip_universe, 234 },
568 { "option-235", "X", &nwip_universe, 235 },
569 { "option-236", "X", &nwip_universe, 236 },
570 { "option-237", "X", &nwip_universe, 237 },
571 { "option-238", "X", &nwip_universe, 238 },
572 { "option-239", "X", &nwip_universe, 239 },
573 { "option-240", "X", &nwip_universe, 240 },
574 { "option-241", "X", &nwip_universe, 241 },
575 { "option-242", "X", &nwip_universe, 242 },
576 { "option-243", "X", &nwip_universe, 243 },
577 { "option-244", "X", &nwip_universe, 244 },
578 { "option-245", "X", &nwip_universe, 245 },
579 { "option-246", "X", &nwip_universe, 246 },
580 { "option-247", "X", &nwip_universe, 247 },
581 { "option-248", "X", &nwip_universe, 248 },
582 { "option-249", "X", &nwip_universe, 249 },
583 { "option-250", "X", &nwip_universe, 250 },
584 { "option-251", "X", &nwip_universe, 251 },
585 { "option-252", "X", &nwip_universe, 252 },
586 { "option-253", "X", &nwip_universe, 253 },
587 { "option-254", "X", &nwip_universe, 254 },
588 { "option-end", "e", &nwip_universe, 255 },
589 };
590
591 const char *hardware_types [] = {
592 "unknown-0",
593 "ethernet",
594 "unknown-2",
595 "unknown-3",
596 "unknown-4",
597 "unknown-5",
598 "token-ring",
599 "unknown-7",
600 "fddi",
601 "unknown-9",
602 "unknown-10",
603 "unknown-11",
604 "unknown-12",
605 "unknown-13",
606 "unknown-14",
607 "unknown-15",
608 "unknown-16",
609 "unknown-17",
610 "unknown-18",
611 "unknown-19",
612 "unknown-20",
613 "unknown-21",
614 "unknown-22",
615 "unknown-23",
616 "unknown-24",
617 "unknown-25",
618 "unknown-26",
619 "unknown-27",
620 "unknown-28",
621 "unknown-29",
622 "unknown-30",
623 "unknown-31",
624 "unknown-32",
625 "unknown-33",
626 "unknown-34",
627 "unknown-35",
628 "unknown-36",
629 "unknown-37",
630 "unknown-38",
631 "unknown-39",
632 "unknown-40",
633 "unknown-41",
634 "unknown-42",
635 "unknown-43",
636 "unknown-44",
637 "unknown-45",
638 "unknown-46",
639 "unknown-47",
640 "unknown-48",
641 "unknown-49",
642 "unknown-50",
643 "unknown-51",
644 "unknown-52",
645 "unknown-53",
646 "unknown-54",
647 "unknown-55",
648 "unknown-56",
649 "unknown-57",
650 "unknown-58",
651 "unknown-59",
652 "unknown-60",
653 "unknown-61",
654 "unknown-62",
655 "unknown-63",
656 "unknown-64",
657 "unknown-65",
658 "unknown-66",
659 "unknown-67",
660 "unknown-68",
661 "unknown-69",
662 "unknown-70",
663 "unknown-71",
664 "unknown-72",
665 "unknown-73",
666 "unknown-74",
667 "unknown-75",
668 "unknown-76",
669 "unknown-77",
670 "unknown-78",
671 "unknown-79",
672 "unknown-80",
673 "unknown-81",
674 "unknown-82",
675 "unknown-83",
676 "unknown-84",
677 "unknown-85",
678 "unknown-86",
679 "unknown-87",
680 "unknown-88",
681 "unknown-89",
682 "unknown-90",
683 "unknown-91",
684 "unknown-92",
685 "unknown-93",
686 "unknown-94",
687 "unknown-95",
688 "unknown-96",
689 "unknown-97",
690 "unknown-98",
691 "unknown-99",
692 "unknown-100",
693 "unknown-101",
694 "unknown-102",
695 "unknown-103",
696 "unknown-104",
697 "unknown-105",
698 "unknown-106",
699 "unknown-107",
700 "unknown-108",
701 "unknown-109",
702 "unknown-110",
703 "unknown-111",
704 "unknown-112",
705 "unknown-113",
706 "unknown-114",
707 "unknown-115",
708 "unknown-116",
709 "unknown-117",
710 "unknown-118",
711 "unknown-119",
712 "unknown-120",
713 "unknown-121",
714 "unknown-122",
715 "unknown-123",
716 "unknown-124",
717 "unknown-125",
718 "unknown-126",
719 "unknown-127",
720 "unknown-128",
721 "unknown-129",
722 "unknown-130",
723 "unknown-131",
724 "unknown-132",
725 "unknown-133",
726 "unknown-134",
727 "unknown-135",
728 "unknown-136",
729 "unknown-137",
730 "unknown-138",
731 "unknown-139",
732 "unknown-140",
733 "unknown-141",
734 "unknown-142",
735 "unknown-143",
736 "unknown-144",
737 "unknown-145",
738 "unknown-146",
739 "unknown-147",
740 "unknown-148",
741 "unknown-149",
742 "unknown-150",
743 "unknown-151",
744 "unknown-152",
745 "unknown-153",
746 "unknown-154",
747 "unknown-155",
748 "unknown-156",
749 "unknown-157",
750 "unknown-158",
751 "unknown-159",
752 "unknown-160",
753 "unknown-161",
754 "unknown-162",
755 "unknown-163",
756 "unknown-164",
757 "unknown-165",
758 "unknown-166",
759 "unknown-167",
760 "unknown-168",
761 "unknown-169",
762 "unknown-170",
763 "unknown-171",
764 "unknown-172",
765 "unknown-173",
766 "unknown-174",
767 "unknown-175",
768 "unknown-176",
769 "unknown-177",
770 "unknown-178",
771 "unknown-179",
772 "unknown-180",
773 "unknown-181",
774 "unknown-182",
775 "unknown-183",
776 "unknown-184",
777 "unknown-185",
778 "unknown-186",
779 "unknown-187",
780 "unknown-188",
781 "unknown-189",
782 "unknown-190",
783 "unknown-191",
784 "unknown-192",
785 "unknown-193",
786 "unknown-194",
787 "unknown-195",
788 "unknown-196",
789 "unknown-197",
790 "unknown-198",
791 "unknown-199",
792 "unknown-200",
793 "unknown-201",
794 "unknown-202",
795 "unknown-203",
796 "unknown-204",
797 "unknown-205",
798 "unknown-206",
799 "unknown-207",
800 "unknown-208",
801 "unknown-209",
802 "unknown-210",
803 "unknown-211",
804 "unknown-212",
805 "unknown-213",
806 "unknown-214",
807 "unknown-215",
808 "unknown-216",
809 "unknown-217",
810 "unknown-218",
811 "unknown-219",
812 "unknown-220",
813 "unknown-221",
814 "unknown-222",
815 "unknown-223",
816 "unknown-224",
817 "unknown-225",
818 "unknown-226",
819 "unknown-227",
820 "unknown-228",
821 "unknown-229",
822 "unknown-230",
823 "unknown-231",
824 "unknown-232",
825 "unknown-233",
826 "unknown-234",
827 "unknown-235",
828 "unknown-236",
829 "unknown-237",
830 "unknown-238",
831 "unknown-239",
832 "unknown-240",
833 "unknown-241",
834 "unknown-242",
835 "unknown-243",
836 "unknown-244",
837 "unknown-245",
838 "unknown-246",
839 "unknown-247",
840 "unknown-248",
841 "unknown-249",
842 "unknown-250",
843 "unknown-251",
844 "unknown-252",
845 "unknown-253",
846 "unknown-254",
847 "unknown-255" };
848
849 struct hash_table universe_hash;
850 struct universe **universes;
851 int universe_count, universe_max;
852
853 /* Universe containing names of configuration options, which, rather than
854 writing "option universe-name.option-name ...;", can be set by writing
855 "option-name ...;". */
856
857 struct universe *config_universe;
858
859 void initialize_common_option_spaces()
860 {
861 int i;
862
863 universe_max = 10;
864 universes = ((struct universe **)
865 dmalloc (universe_max * sizeof (struct universe *), MDL));
866 if (!universes)
867 log_fatal ("Can't allocate option space table.");
868 memset (universes, 0, universe_max * sizeof (struct universe *));
869
870 /* Set up the DHCP option universe... */
871 dhcp_universe.name = "dhcp";
872 dhcp_universe.lookup_func = lookup_hashed_option;
873 dhcp_universe.option_state_dereference =
874 hashed_option_state_dereference;
875 dhcp_universe.get_func = hashed_option_get;
876 dhcp_universe.set_func = hashed_option_set;
877 dhcp_universe.save_func = save_hashed_option;
878 dhcp_universe.delete_func = delete_hashed_option;
879 dhcp_universe.encapsulate = hashed_option_space_encapsulate;
880 dhcp_universe.length_size = 1;
881 dhcp_universe.tag_size = 1;
882 dhcp_universe.store_tag = putUChar;
883 dhcp_universe.store_length = putUChar;
884 dhcp_universe.index = universe_count++;
885 universes [dhcp_universe.index] = &dhcp_universe;
886 dhcp_universe.hash = new_hash (0, 0);
887 if (!dhcp_universe.hash)
888 log_fatal ("Can't allocate dhcp option hash table.");
889 for (i = 0; i < 256; i++) {
890 dhcp_universe.options [i] = &dhcp_options [i];
891 add_hash (dhcp_universe.hash,
892 (const unsigned char *)dhcp_options [i].name, 0,
893 (unsigned char *)&dhcp_options [i]);
894 }
895
896 /* Set up the Novell option universe (for option 63)... */
897 nwip_universe.name = "nwip";
898 nwip_universe.lookup_func = lookup_hashed_option;
899 nwip_universe.option_state_dereference =
900 hashed_option_state_dereference;
901 nwip_universe.get_func = hashed_option_get;
902 nwip_universe.set_func = hashed_option_set;
903 nwip_universe.save_func = save_hashed_option;
904 nwip_universe.delete_func = delete_hashed_option;
905 nwip_universe.encapsulate = nwip_option_space_encapsulate;
906 nwip_universe.length_size = 1;
907 nwip_universe.tag_size = 1;
908 nwip_universe.store_tag = putUChar;
909 nwip_universe.store_length = putUChar;
910 nwip_universe.index = universe_count++;
911 universes [nwip_universe.index] = &nwip_universe;
912 nwip_universe.hash = new_hash (0, 0);
913 if (!nwip_universe.hash)
914 log_fatal ("Can't allocate dhcp option hash table.");
915 for (i = 0; i < 256; i++) {
916 nwip_universe.options [i] = &dhcp_options [i];
917 add_hash (nwip_universe.hash,
918 (const unsigned char *)dhcp_options [i].name, 0,
919 (unsigned char *)&dhcp_options [i]);
920 }
921
922 /* Set up the hash of universes. */
923 universe_hash.hash_count = DEFAULT_HASH_SIZE;
924 add_hash (&universe_hash,
925 (const unsigned char *)dhcp_universe.name, 0,
926 (unsigned char *)&dhcp_universe);
927 add_hash (&universe_hash,
928 (const unsigned char *)nwip_universe.name, 0,
929 (unsigned char *)&nwip_universe);
930 }