3 Tables of information... */
6 * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
7 * Copyright (c) 1995-2003 by Internet Software Consortium
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.
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.
21 * Internet Systems Consortium, Inc.
23 * Redwood City, CA 94063
27 * This software has been written for Internet Systems Consortium
28 * by Ted Lemon in cooperation with Vixie Enterprises and Nominum, Inc.
29 * To learn more about Internet Systems Consortium, see
30 * ``http://www.isc.org/''. To learn more about Vixie Enterprises,
31 * see ``http://www.vix.com''. To learn more about Nominum, Inc., see
32 * ``http://www.nominum.com''.
36 static char copyright
[] =
37 "$Id$ Copyright (c) 2004 Internet Systems Consortium. All rights reserved.\n";
42 /* XXXDPN: Moved here from hash.c, when it moved to libomapi. Not sure
43 where these really belong. */
44 HASH_FUNCTIONS (group
, const char *, struct group_object
, group_hash_t
,
45 group_reference
, group_dereference
)
46 HASH_FUNCTIONS (universe
, const char *, struct universe
, universe_hash_t
, 0, 0)
47 HASH_FUNCTIONS (option
, const char *, struct option
, option_hash_t
, 0, 0)
49 /* DHCP Option names, formats and codes, from RFC1533.
54 l - 32-bit signed integer
55 L - 32-bit unsigned integer
56 s - 16-bit signed integer
57 S - 16-bit unsigned integer
58 b - 8-bit signed integer
59 B - 8-bit unsigned integer
61 f - flag (true or false)
62 A - array of whatever precedes (e.g., IA means array of IP addresses)
63 a - array of the preceding character (e.g., IIa means two or more IP
65 U - name of an option space (universe)
66 F - implicit flag - the presence of the option indicates that the
68 o - the preceding value is optional.
69 E - encapsulation, string or colon-seperated hex list (the latter
70 two for parsing). E is followed by a text string containing
71 the name of the option space to encapsulate, followed by a '.'.
72 If the E is immediately followed by '.', the applicable vendor
73 option space is used if one is defined.
74 e - If an encapsulation directive is not the first thing in the string,
75 the option scanner requires an efficient way to find the encapsulation.
76 This is done by placing a 'e' at the beginning of the option. The
77 'e' has no other purpose, and is not required if 'E' is the first
79 X - either an ASCII string or binary data. On output, the string is
80 scanned to see if it's printable ASCII and, if so, output as a
81 quoted string. If not, it's output as colon-seperated hex. On
82 input, the option can be specified either as a quoted string or as
83 a colon-seperated hex list.
84 N - enumeration. N is followed by a text string containing
85 the name of the set of enumeration values to parse or emit,
86 followed by a '.'. The width of the data is specified in the
87 named enumeration. Named enumerations are tracked in parse.c.
88 d - Domain name (i.e., FOO or FOO.BAR).
91 struct universe dhcp_universe
;
92 struct option dhcp_options
[256] = {
93 { "pad", "", &dhcp_universe
, 0 },
94 { "subnet-mask", "I", &dhcp_universe
, 1 },
95 { "time-offset", "l", &dhcp_universe
, 2 },
96 { "routers", "IA", &dhcp_universe
, 3 },
97 { "time-servers", "IA", &dhcp_universe
, 4 },
98 { "ien116-name-servers", "IA", &dhcp_universe
, 5 },
99 { "domain-name-servers", "IA", &dhcp_universe
, 6 },
100 { "log-servers", "IA", &dhcp_universe
, 7 },
101 { "cookie-servers", "IA", &dhcp_universe
, 8 },
102 { "lpr-servers", "IA", &dhcp_universe
, 9 },
103 { "impress-servers", "IA", &dhcp_universe
, 10 },
104 { "resource-location-servers", "IA", &dhcp_universe
, 11 },
105 { "host-name", "X", &dhcp_universe
, 12 },
106 { "boot-size", "S", &dhcp_universe
, 13 },
107 { "merit-dump", "t", &dhcp_universe
, 14 },
108 { "domain-name", "t", &dhcp_universe
, 15 },
109 { "swap-server", "I", &dhcp_universe
, 16 },
110 { "root-path", "t", &dhcp_universe
, 17 },
111 { "extensions-path", "t", &dhcp_universe
, 18 },
112 { "ip-forwarding", "f", &dhcp_universe
, 19 },
113 { "non-local-source-routing", "f", &dhcp_universe
, 20 },
114 { "policy-filter", "IIA", &dhcp_universe
, 21 },
115 { "max-dgram-reassembly", "S", &dhcp_universe
, 22 },
116 { "default-ip-ttl", "B", &dhcp_universe
, 23 },
117 { "path-mtu-aging-timeout", "L", &dhcp_universe
, 24 },
118 { "path-mtu-plateau-table", "SA", &dhcp_universe
, 25 },
119 { "interface-mtu", "S", &dhcp_universe
, 26 },
120 { "all-subnets-local", "f", &dhcp_universe
, 27 },
121 { "broadcast-address", "I", &dhcp_universe
, 28 },
122 { "perform-mask-discovery", "f", &dhcp_universe
, 29 },
123 { "mask-supplier", "f", &dhcp_universe
, 30 },
124 { "router-discovery", "f", &dhcp_universe
, 31 },
125 { "router-solicitation-address", "I", &dhcp_universe
, 32 },
126 { "static-routes", "IIA", &dhcp_universe
, 33 },
127 { "trailer-encapsulation", "f", &dhcp_universe
, 34 },
128 { "arp-cache-timeout", "L", &dhcp_universe
, 35 },
129 { "ieee802-3-encapsulation", "f", &dhcp_universe
, 36 },
130 { "default-tcp-ttl", "B", &dhcp_universe
, 37 },
131 { "tcp-keepalive-interval", "L", &dhcp_universe
, 38 },
132 { "tcp-keepalive-garbage", "f", &dhcp_universe
, 39 },
133 { "nis-domain", "t", &dhcp_universe
, 40 },
134 { "nis-servers", "IA", &dhcp_universe
, 41 },
135 { "ntp-servers", "IA", &dhcp_universe
, 42 },
136 { "vendor-encapsulated-options", "E.", &dhcp_universe
, 43 },
137 { "netbios-name-servers", "IA", &dhcp_universe
, 44 },
138 { "netbios-dd-server", "IA", &dhcp_universe
, 45 },
139 { "netbios-node-type", "B", &dhcp_universe
, 46 },
140 { "netbios-scope", "t", &dhcp_universe
, 47 },
141 { "font-servers", "IA", &dhcp_universe
, 48 },
142 { "x-display-manager", "IA", &dhcp_universe
, 49 },
143 { "dhcp-requested-address", "I", &dhcp_universe
, 50 },
144 { "dhcp-lease-time", "L", &dhcp_universe
, 51 },
145 { "dhcp-option-overload", "B", &dhcp_universe
, 52 },
146 { "dhcp-message-type", "B", &dhcp_universe
, 53 },
147 { "dhcp-server-identifier", "I", &dhcp_universe
, 54 },
148 { "dhcp-parameter-request-list", "BA", &dhcp_universe
, 55 },
149 { "dhcp-message", "t", &dhcp_universe
, 56 },
150 { "dhcp-max-message-size", "S", &dhcp_universe
, 57 },
151 { "dhcp-renewal-time", "L", &dhcp_universe
, 58 },
152 { "dhcp-rebinding-time", "L", &dhcp_universe
, 59 },
153 { "vendor-class-identifier", "X", &dhcp_universe
, 60 },
154 { "dhcp-client-identifier", "X", &dhcp_universe
, 61 },
155 { "nwip-domain", "X", &dhcp_universe
, 62 },
156 { "nwip-suboptions", "Enwip.", &dhcp_universe
, 63 },
157 { "nisplus-domain", "t", &dhcp_universe
, 64 },
158 { "nisplus-servers", "IA", &dhcp_universe
, 65 },
159 { "tftp-server-name", "t", &dhcp_universe
, 66 },
160 { "bootfile-name", "t", &dhcp_universe
, 67 },
161 { "mobile-ip-home-agent", "IA", &dhcp_universe
, 68 },
162 { "smtp-server", "IA", &dhcp_universe
, 69 },
163 { "pop-server", "IA", &dhcp_universe
, 70 },
164 { "nntp-server", "IA", &dhcp_universe
, 71 },
165 { "www-server", "IA", &dhcp_universe
, 72 },
166 { "finger-server", "IA", &dhcp_universe
, 73 },
167 { "irc-server", "IA", &dhcp_universe
, 74 },
168 { "streettalk-server", "IA", &dhcp_universe
, 75 },
169 { "streettalk-directory-assistance-server", "IA", &dhcp_universe
, 76 },
170 { "user-class", "t", &dhcp_universe
, 77 },
171 { "slp-directory-agent", "fIa", &dhcp_universe
, 78 },
172 { "slp-service-scope", "fto", &dhcp_universe
, 79 },
173 { "unknown-80", "X", &dhcp_universe
, 80 },
174 { "fqdn", "Efqdn.", &dhcp_universe
, 81 },
175 { "relay-agent-information", "Eagent.", &dhcp_universe
, 82 },
176 { "unknown-83", "X", &dhcp_universe
, 83 },
177 { "unknown-84", "X", &dhcp_universe
, 84 },
178 { "nds-servers", "IA", &dhcp_universe
, 85 },
179 { "nds-tree-name", "X", &dhcp_universe
, 86 },
180 { "nds-context", "X", &dhcp_universe
, 87 },
181 { "unknown-88", "X", &dhcp_universe
, 88 },
182 { "unknown-89", "X", &dhcp_universe
, 89 },
183 { "unknown-90", "X", &dhcp_universe
, 90 },
184 { "unknown-91", "X", &dhcp_universe
, 91 },
185 { "unknown-92", "X", &dhcp_universe
, 92 },
186 { "unknown-93", "X", &dhcp_universe
, 93 },
187 { "unknown-94", "X", &dhcp_universe
, 94 },
188 { "unknown-95", "X", &dhcp_universe
, 95 },
189 { "unknown-96", "X", &dhcp_universe
, 96 },
190 { "unknown-97", "X", &dhcp_universe
, 97 },
191 { "uap-servers", "t", &dhcp_universe
, 98 },
192 { "unknown-99", "X", &dhcp_universe
, 99 },
193 { "unknown-100", "X", &dhcp_universe
, 100 },
194 { "unknown-101", "X", &dhcp_universe
, 101 },
195 { "unknown-102", "X", &dhcp_universe
, 102 },
196 { "unknown-103", "X", &dhcp_universe
, 103 },
197 { "unknown-104", "X", &dhcp_universe
, 104 },
198 { "unknown-105", "X", &dhcp_universe
, 105 },
199 { "unknown-106", "X", &dhcp_universe
, 106 },
200 { "unknown-107", "X", &dhcp_universe
, 107 },
201 { "unknown-108", "X", &dhcp_universe
, 108 },
202 { "unknown-109", "X", &dhcp_universe
, 109 },
203 { "unknown-110", "X", &dhcp_universe
, 110 },
204 { "unknown-111", "X", &dhcp_universe
, 111 },
205 { "unknown-112", "X", &dhcp_universe
, 112 },
206 { "unknown-113", "X", &dhcp_universe
, 113 },
207 { "unknown-114", "X", &dhcp_universe
, 114 },
208 { "unknown-115", "X", &dhcp_universe
, 115 },
209 { "unknown-116", "X", &dhcp_universe
, 116 },
210 { "unknown-117", "X", &dhcp_universe
, 117 },
211 { "subnet-selection", "X", &dhcp_universe
, 118 },
212 { "unknown-119", "X", &dhcp_universe
, 119 },
213 { "unknown-120", "X", &dhcp_universe
, 120 },
214 { "unknown-121", "X", &dhcp_universe
, 121 },
215 { "unknown-122", "X", &dhcp_universe
, 122 },
216 { "unknown-123", "X", &dhcp_universe
, 123 },
217 { "unknown-124", "X", &dhcp_universe
, 124 },
218 { "unknown-125", "X", &dhcp_universe
, 125 },
219 { "unknown-126", "X", &dhcp_universe
, 126 },
220 { "unknown-127", "X", &dhcp_universe
, 127 },
221 { "unknown-128", "X", &dhcp_universe
, 128 },
222 { "unknown-129", "X", &dhcp_universe
, 129 },
223 { "unknown-130", "X", &dhcp_universe
, 130 },
224 { "unknown-131", "X", &dhcp_universe
, 131 },
225 { "unknown-132", "X", &dhcp_universe
, 132 },
226 { "unknown-133", "X", &dhcp_universe
, 133 },
227 { "unknown-134", "X", &dhcp_universe
, 134 },
228 { "unknown-135", "X", &dhcp_universe
, 135 },
229 { "unknown-136", "X", &dhcp_universe
, 136 },
230 { "unknown-137", "X", &dhcp_universe
, 137 },
231 { "unknown-138", "X", &dhcp_universe
, 138 },
232 { "unknown-139", "X", &dhcp_universe
, 139 },
233 { "unknown-140", "X", &dhcp_universe
, 140 },
234 { "unknown-141", "X", &dhcp_universe
, 141 },
235 { "unknown-142", "X", &dhcp_universe
, 142 },
236 { "unknown-143", "X", &dhcp_universe
, 143 },
237 { "unknown-144", "X", &dhcp_universe
, 144 },
238 { "unknown-145", "X", &dhcp_universe
, 145 },
239 { "unknown-146", "X", &dhcp_universe
, 146 },
240 { "unknown-147", "X", &dhcp_universe
, 147 },
241 { "unknown-148", "X", &dhcp_universe
, 148 },
242 { "unknown-149", "X", &dhcp_universe
, 149 },
243 { "unknown-150", "X", &dhcp_universe
, 150 },
244 { "unknown-151", "X", &dhcp_universe
, 151 },
245 { "unknown-152", "X", &dhcp_universe
, 152 },
246 { "unknown-153", "X", &dhcp_universe
, 153 },
247 { "unknown-154", "X", &dhcp_universe
, 154 },
248 { "unknown-155", "X", &dhcp_universe
, 155 },
249 { "unknown-156", "X", &dhcp_universe
, 156 },
250 { "unknown-157", "X", &dhcp_universe
, 157 },
251 { "unknown-158", "X", &dhcp_universe
, 158 },
252 { "unknown-159", "X", &dhcp_universe
, 159 },
253 { "unknown-160", "X", &dhcp_universe
, 160 },
254 { "unknown-161", "X", &dhcp_universe
, 161 },
255 { "unknown-162", "X", &dhcp_universe
, 162 },
256 { "unknown-163", "X", &dhcp_universe
, 163 },
257 { "unknown-164", "X", &dhcp_universe
, 164 },
258 { "unknown-165", "X", &dhcp_universe
, 165 },
259 { "unknown-166", "X", &dhcp_universe
, 166 },
260 { "unknown-167", "X", &dhcp_universe
, 167 },
261 { "unknown-168", "X", &dhcp_universe
, 168 },
262 { "unknown-169", "X", &dhcp_universe
, 169 },
263 { "unknown-170", "X", &dhcp_universe
, 170 },
264 { "unknown-171", "X", &dhcp_universe
, 171 },
265 { "unknown-172", "X", &dhcp_universe
, 172 },
266 { "unknown-173", "X", &dhcp_universe
, 173 },
267 { "unknown-174", "X", &dhcp_universe
, 174 },
268 { "unknown-175", "X", &dhcp_universe
, 175 },
269 { "unknown-176", "X", &dhcp_universe
, 176 },
270 { "unknown-177", "X", &dhcp_universe
, 177 },
271 { "unknown-178", "X", &dhcp_universe
, 178 },
272 { "unknown-179", "X", &dhcp_universe
, 179 },
273 { "unknown-180", "X", &dhcp_universe
, 180 },
274 { "unknown-181", "X", &dhcp_universe
, 181 },
275 { "unknown-182", "X", &dhcp_universe
, 182 },
276 { "unknown-183", "X", &dhcp_universe
, 183 },
277 { "unknown-184", "X", &dhcp_universe
, 184 },
278 { "unknown-185", "X", &dhcp_universe
, 185 },
279 { "unknown-186", "X", &dhcp_universe
, 186 },
280 { "unknown-187", "X", &dhcp_universe
, 187 },
281 { "unknown-188", "X", &dhcp_universe
, 188 },
282 { "unknown-189", "X", &dhcp_universe
, 189 },
283 { "unknown-190", "X", &dhcp_universe
, 190 },
284 { "unknown-191", "X", &dhcp_universe
, 191 },
285 { "unknown-192", "X", &dhcp_universe
, 192 },
286 { "unknown-193", "X", &dhcp_universe
, 193 },
287 { "unknown-194", "X", &dhcp_universe
, 194 },
288 { "unknown-195", "X", &dhcp_universe
, 195 },
289 { "unknown-196", "X", &dhcp_universe
, 196 },
290 { "unknown-197", "X", &dhcp_universe
, 197 },
291 { "unknown-198", "X", &dhcp_universe
, 198 },
292 { "unknown-199", "X", &dhcp_universe
, 199 },
293 { "unknown-200", "X", &dhcp_universe
, 200 },
294 { "unknown-201", "X", &dhcp_universe
, 201 },
295 { "unknown-202", "X", &dhcp_universe
, 202 },
296 { "unknown-203", "X", &dhcp_universe
, 203 },
297 { "unknown-204", "X", &dhcp_universe
, 204 },
298 { "unknown-205", "X", &dhcp_universe
, 205 },
299 { "unknown-206", "X", &dhcp_universe
, 206 },
300 { "unknown-207", "X", &dhcp_universe
, 207 },
301 { "unknown-208", "X", &dhcp_universe
, 208 },
302 { "unknown-209", "X", &dhcp_universe
, 209 },
303 { "authenticate", "X", &dhcp_universe
, 210 },
304 { "unknown-211", "X", &dhcp_universe
, 211 },
305 { "unknown-212", "X", &dhcp_universe
, 212 },
306 { "unknown-213", "X", &dhcp_universe
, 213 },
307 { "unknown-214", "X", &dhcp_universe
, 214 },
308 { "unknown-215", "X", &dhcp_universe
, 215 },
309 { "unknown-216", "X", &dhcp_universe
, 216 },
310 { "unknown-217", "X", &dhcp_universe
, 217 },
311 { "unknown-218", "X", &dhcp_universe
, 218 },
312 { "unknown-219", "X", &dhcp_universe
, 219 },
313 { "unknown-220", "X", &dhcp_universe
, 220 },
314 { "unknown-221", "X", &dhcp_universe
, 221 },
315 { "unknown-222", "X", &dhcp_universe
, 222 },
316 { "unknown-223", "X", &dhcp_universe
, 223 },
317 { "unknown-224", "X", &dhcp_universe
, 224 },
318 { "unknown-225", "X", &dhcp_universe
, 225 },
319 { "unknown-226", "X", &dhcp_universe
, 226 },
320 { "unknown-227", "X", &dhcp_universe
, 227 },
321 { "unknown-228", "X", &dhcp_universe
, 228 },
322 { "unknown-229", "X", &dhcp_universe
, 229 },
323 { "unknown-230", "X", &dhcp_universe
, 230 },
324 { "unknown-231", "X", &dhcp_universe
, 231 },
325 { "unknown-232", "X", &dhcp_universe
, 232 },
326 { "unknown-233", "X", &dhcp_universe
, 233 },
327 { "unknown-234", "X", &dhcp_universe
, 234 },
328 { "unknown-235", "X", &dhcp_universe
, 235 },
329 { "unknown-236", "X", &dhcp_universe
, 236 },
330 { "unknown-237", "X", &dhcp_universe
, 237 },
331 { "unknown-238", "X", &dhcp_universe
, 238 },
332 { "unknown-239", "X", &dhcp_universe
, 239 },
333 { "unknown-240", "X", &dhcp_universe
, 240 },
334 { "unknown-241", "X", &dhcp_universe
, 241 },
335 { "unknown-242", "X", &dhcp_universe
, 242 },
336 { "unknown-243", "X", &dhcp_universe
, 243 },
337 { "unknown-244", "X", &dhcp_universe
, 244 },
338 { "unknown-245", "X", &dhcp_universe
, 245 },
339 { "unknown-246", "X", &dhcp_universe
, 246 },
340 { "unknown-247", "X", &dhcp_universe
, 247 },
341 { "unknown-248", "X", &dhcp_universe
, 248 },
342 { "unknown-249", "X", &dhcp_universe
, 249 },
343 { "unknown-250", "X", &dhcp_universe
, 250 },
344 { "unknown-251", "X", &dhcp_universe
, 251 },
345 { "unknown-252", "X", &dhcp_universe
, 252 },
346 { "unknown-253", "X", &dhcp_universe
, 253 },
347 { "unknown-254", "X", &dhcp_universe
, 254 },
348 { "option-end", "e", &dhcp_universe
, 255 },
351 struct universe nwip_universe
;
352 struct option nwip_options
[256] = {
353 { "pad", "", &nwip_universe
, 0 },
354 { "illegal-1", "", &nwip_universe
, 1 },
355 { "illegal-2", "", &nwip_universe
, 2 },
356 { "illegal-3", "", &nwip_universe
, 3 },
357 { "illegal-4", "", &nwip_universe
, 4 },
358 { "nsq-broadcast", "f", &nwip_universe
, 5 },
359 { "preferred-dss", "IA", &nwip_universe
, 6 },
360 { "nearest-nwip-server", "IA", &nwip_universe
, 7 },
361 { "autoretries", "B", &nwip_universe
, 8 },
362 { "autoretry-secs", "B", &nwip_universe
, 9 },
363 { "nwip-1-1", "f", &nwip_universe
, 10 },
364 { "primary-dss", "I", &nwip_universe
, 11 },
365 { "unknown-12", "X", &nwip_universe
, 12 },
366 { "unknown-13", "X", &nwip_universe
, 13 },
367 { "unknown-14", "X", &nwip_universe
, 14 },
368 { "unknown-15", "X", &nwip_universe
, 15 },
369 { "unknown-16", "X", &nwip_universe
, 16 },
370 { "unknown-17", "X", &nwip_universe
, 17 },
371 { "unknown-18", "X", &nwip_universe
, 18 },
372 { "unknown-19", "X", &nwip_universe
, 19 },
373 { "unknown-20", "X", &nwip_universe
, 20 },
374 { "unknown-21", "X", &nwip_universe
, 21 },
375 { "unknown-22", "X", &nwip_universe
, 22 },
376 { "unknown-23", "X", &nwip_universe
, 23 },
377 { "unknown-24", "X", &nwip_universe
, 24 },
378 { "unknown-25", "X", &nwip_universe
, 25 },
379 { "unknown-26", "X", &nwip_universe
, 26 },
380 { "unknown-27", "X", &nwip_universe
, 27 },
381 { "unknown-28", "X", &nwip_universe
, 28 },
382 { "unknown-29", "X", &nwip_universe
, 29 },
383 { "unknown-30", "X", &nwip_universe
, 30 },
384 { "unknown-31", "X", &nwip_universe
, 31 },
385 { "unknown-32", "X", &nwip_universe
, 32 },
386 { "unknown-33", "X", &nwip_universe
, 33 },
387 { "unknown-34", "X", &nwip_universe
, 34 },
388 { "unknown-35", "X", &nwip_universe
, 35 },
389 { "unknown-36", "X", &nwip_universe
, 36 },
390 { "unknown-37", "X", &nwip_universe
, 37 },
391 { "unknown-38", "X", &nwip_universe
, 38 },
392 { "unknown-39", "X", &nwip_universe
, 39 },
393 { "unknown-40", "X", &nwip_universe
, 40 },
394 { "unknown-41", "X", &nwip_universe
, 41 },
395 { "unknown-42", "X", &nwip_universe
, 42 },
396 { "unknown-43", "X", &nwip_universe
, 43 },
397 { "unknown-44", "X", &nwip_universe
, 44 },
398 { "unknown-45", "X", &nwip_universe
, 45 },
399 { "unknown-46", "X", &nwip_universe
, 46 },
400 { "unknown-47", "X", &nwip_universe
, 47 },
401 { "unknown-48", "X", &nwip_universe
, 48 },
402 { "unknown-49", "X", &nwip_universe
, 49 },
403 { "unknown-50", "X", &nwip_universe
, 50 },
404 { "unknown-51", "X", &nwip_universe
, 51 },
405 { "unknown-52", "X", &nwip_universe
, 52 },
406 { "unknown-53", "X", &nwip_universe
, 53 },
407 { "unknown-54", "X", &nwip_universe
, 54 },
408 { "unknown-55", "X", &nwip_universe
, 55 },
409 { "unknown-56", "X", &nwip_universe
, 56 },
410 { "unknown-57", "X", &nwip_universe
, 57 },
411 { "unknown-58", "X", &nwip_universe
, 58 },
412 { "unknown-59", "X", &nwip_universe
, 59 },
413 { "unknown-60", "X", &nwip_universe
, 60 },
414 { "unknown-61", "X", &nwip_universe
, 61 },
415 { "unknown-62", "X", &nwip_universe
, 62 },
416 { "unknown-63", "X", &nwip_universe
, 63 },
417 { "unknown-64", "X", &nwip_universe
, 64 },
418 { "unknown-65", "X", &nwip_universe
, 65 },
419 { "unknown-66", "X", &nwip_universe
, 66 },
420 { "unknown-67", "X", &nwip_universe
, 67 },
421 { "unknown-68", "X", &nwip_universe
, 68 },
422 { "unknown-69", "X", &nwip_universe
, 69 },
423 { "unknown-70", "X", &nwip_universe
, 70 },
424 { "unknown-71", "X", &nwip_universe
, 71 },
425 { "unknown-72", "X", &nwip_universe
, 72 },
426 { "unknown-73", "X", &nwip_universe
, 73 },
427 { "unknown-74", "X", &nwip_universe
, 74 },
428 { "unknown-75", "X", &nwip_universe
, 75 },
429 { "unknown-76", "X", &nwip_universe
, 76 },
430 { "unknown-77", "X", &nwip_universe
, 77 },
431 { "unknown-78", "X", &nwip_universe
, 78 },
432 { "unknown-79", "X", &nwip_universe
, 79 },
433 { "unknown-80", "X", &nwip_universe
, 80 },
434 { "unknown-81", "X", &nwip_universe
, 81 },
435 { "unknown-82", "X", &nwip_universe
, 82 },
436 { "unknown-83", "X", &nwip_universe
, 83 },
437 { "unknown-84", "X", &nwip_universe
, 84 },
438 { "unknown-85", "X", &nwip_universe
, 85 },
439 { "unknown-86", "X", &nwip_universe
, 86 },
440 { "unknown-87", "X", &nwip_universe
, 87 },
441 { "unknown-88", "X", &nwip_universe
, 88 },
442 { "unknown-89", "X", &nwip_universe
, 89 },
443 { "unknown-90", "X", &nwip_universe
, 90 },
444 { "unknown-91", "X", &nwip_universe
, 91 },
445 { "unknown-92", "X", &nwip_universe
, 92 },
446 { "unknown-93", "X", &nwip_universe
, 93 },
447 { "unknown-94", "X", &nwip_universe
, 94 },
448 { "unknown-95", "X", &nwip_universe
, 95 },
449 { "unknown-96", "X", &nwip_universe
, 96 },
450 { "unknown-97", "X", &nwip_universe
, 97 },
451 { "unknown-98", "X", &nwip_universe
, 98 },
452 { "unknown-99", "X", &nwip_universe
, 99 },
453 { "unknown-100", "X", &nwip_universe
, 100 },
454 { "unknown-101", "X", &nwip_universe
, 101 },
455 { "unknown-102", "X", &nwip_universe
, 102 },
456 { "unknown-103", "X", &nwip_universe
, 103 },
457 { "unknown-104", "X", &nwip_universe
, 104 },
458 { "unknown-105", "X", &nwip_universe
, 105 },
459 { "unknown-106", "X", &nwip_universe
, 106 },
460 { "unknown-107", "X", &nwip_universe
, 107 },
461 { "unknown-108", "X", &nwip_universe
, 108 },
462 { "unknown-109", "X", &nwip_universe
, 109 },
463 { "unknown-110", "X", &nwip_universe
, 110 },
464 { "unknown-111", "X", &nwip_universe
, 111 },
465 { "unknown-112", "X", &nwip_universe
, 112 },
466 { "unknown-113", "X", &nwip_universe
, 113 },
467 { "unknown-114", "X", &nwip_universe
, 114 },
468 { "unknown-115", "X", &nwip_universe
, 115 },
469 { "unknown-116", "X", &nwip_universe
, 116 },
470 { "unknown-117", "X", &nwip_universe
, 117 },
471 { "unknown-118", "X", &nwip_universe
, 118 },
472 { "unknown-119", "X", &nwip_universe
, 119 },
473 { "unknown-120", "X", &nwip_universe
, 120 },
474 { "unknown-121", "X", &nwip_universe
, 121 },
475 { "unknown-122", "X", &nwip_universe
, 122 },
476 { "unknown-123", "X", &nwip_universe
, 123 },
477 { "unknown-124", "X", &nwip_universe
, 124 },
478 { "unknown-125", "X", &nwip_universe
, 125 },
479 { "unknown-126", "X", &nwip_universe
, 126 },
480 { "unknown-127", "X", &nwip_universe
, 127 },
481 { "unknown-128", "X", &nwip_universe
, 128 },
482 { "unknown-129", "X", &nwip_universe
, 129 },
483 { "unknown-130", "X", &nwip_universe
, 130 },
484 { "unknown-131", "X", &nwip_universe
, 131 },
485 { "unknown-132", "X", &nwip_universe
, 132 },
486 { "unknown-133", "X", &nwip_universe
, 133 },
487 { "unknown-134", "X", &nwip_universe
, 134 },
488 { "unknown-135", "X", &nwip_universe
, 135 },
489 { "unknown-136", "X", &nwip_universe
, 136 },
490 { "unknown-137", "X", &nwip_universe
, 137 },
491 { "unknown-138", "X", &nwip_universe
, 138 },
492 { "unknown-139", "X", &nwip_universe
, 139 },
493 { "unknown-140", "X", &nwip_universe
, 140 },
494 { "unknown-141", "X", &nwip_universe
, 141 },
495 { "unknown-142", "X", &nwip_universe
, 142 },
496 { "unknown-143", "X", &nwip_universe
, 143 },
497 { "unknown-144", "X", &nwip_universe
, 144 },
498 { "unknown-145", "X", &nwip_universe
, 145 },
499 { "unknown-146", "X", &nwip_universe
, 146 },
500 { "unknown-147", "X", &nwip_universe
, 147 },
501 { "unknown-148", "X", &nwip_universe
, 148 },
502 { "unknown-149", "X", &nwip_universe
, 149 },
503 { "unknown-150", "X", &nwip_universe
, 150 },
504 { "unknown-151", "X", &nwip_universe
, 151 },
505 { "unknown-152", "X", &nwip_universe
, 152 },
506 { "unknown-153", "X", &nwip_universe
, 153 },
507 { "unknown-154", "X", &nwip_universe
, 154 },
508 { "unknown-155", "X", &nwip_universe
, 155 },
509 { "unknown-156", "X", &nwip_universe
, 156 },
510 { "unknown-157", "X", &nwip_universe
, 157 },
511 { "unknown-158", "X", &nwip_universe
, 158 },
512 { "unknown-159", "X", &nwip_universe
, 159 },
513 { "unknown-160", "X", &nwip_universe
, 160 },
514 { "unknown-161", "X", &nwip_universe
, 161 },
515 { "unknown-162", "X", &nwip_universe
, 162 },
516 { "unknown-163", "X", &nwip_universe
, 163 },
517 { "unknown-164", "X", &nwip_universe
, 164 },
518 { "unknown-165", "X", &nwip_universe
, 165 },
519 { "unknown-166", "X", &nwip_universe
, 166 },
520 { "unknown-167", "X", &nwip_universe
, 167 },
521 { "unknown-168", "X", &nwip_universe
, 168 },
522 { "unknown-169", "X", &nwip_universe
, 169 },
523 { "unknown-170", "X", &nwip_universe
, 170 },
524 { "unknown-171", "X", &nwip_universe
, 171 },
525 { "unknown-172", "X", &nwip_universe
, 172 },
526 { "unknown-173", "X", &nwip_universe
, 173 },
527 { "unknown-174", "X", &nwip_universe
, 174 },
528 { "unknown-175", "X", &nwip_universe
, 175 },
529 { "unknown-176", "X", &nwip_universe
, 176 },
530 { "unknown-177", "X", &nwip_universe
, 177 },
531 { "unknown-178", "X", &nwip_universe
, 178 },
532 { "unknown-179", "X", &nwip_universe
, 179 },
533 { "unknown-180", "X", &nwip_universe
, 180 },
534 { "unknown-181", "X", &nwip_universe
, 181 },
535 { "unknown-182", "X", &nwip_universe
, 182 },
536 { "unknown-183", "X", &nwip_universe
, 183 },
537 { "unknown-184", "X", &nwip_universe
, 184 },
538 { "unknown-185", "X", &nwip_universe
, 185 },
539 { "unknown-186", "X", &nwip_universe
, 186 },
540 { "unknown-187", "X", &nwip_universe
, 187 },
541 { "unknown-188", "X", &nwip_universe
, 188 },
542 { "unknown-189", "X", &nwip_universe
, 189 },
543 { "unknown-190", "X", &nwip_universe
, 190 },
544 { "unknown-191", "X", &nwip_universe
, 191 },
545 { "unknown-192", "X", &nwip_universe
, 192 },
546 { "unknown-193", "X", &nwip_universe
, 193 },
547 { "unknown-194", "X", &nwip_universe
, 194 },
548 { "unknown-195", "X", &nwip_universe
, 195 },
549 { "unknown-196", "X", &nwip_universe
, 196 },
550 { "unknown-197", "X", &nwip_universe
, 197 },
551 { "unknown-198", "X", &nwip_universe
, 198 },
552 { "unknown-199", "X", &nwip_universe
, 199 },
553 { "unknown-200", "X", &nwip_universe
, 200 },
554 { "unknown-201", "X", &nwip_universe
, 201 },
555 { "unknown-202", "X", &nwip_universe
, 202 },
556 { "unknown-203", "X", &nwip_universe
, 203 },
557 { "unknown-204", "X", &nwip_universe
, 204 },
558 { "unknown-205", "X", &nwip_universe
, 205 },
559 { "unknown-206", "X", &nwip_universe
, 206 },
560 { "unknown-207", "X", &nwip_universe
, 207 },
561 { "unknown-208", "X", &nwip_universe
, 208 },
562 { "unknown-209", "X", &nwip_universe
, 209 },
563 { "unknown-210", "X", &nwip_universe
, 210 },
564 { "unknown-211", "X", &nwip_universe
, 211 },
565 { "unknown-212", "X", &nwip_universe
, 212 },
566 { "unknown-213", "X", &nwip_universe
, 213 },
567 { "unknown-214", "X", &nwip_universe
, 214 },
568 { "unknown-215", "X", &nwip_universe
, 215 },
569 { "unknown-216", "X", &nwip_universe
, 216 },
570 { "unknown-217", "X", &nwip_universe
, 217 },
571 { "unknown-218", "X", &nwip_universe
, 218 },
572 { "unknown-219", "X", &nwip_universe
, 219 },
573 { "unknown-220", "X", &nwip_universe
, 220 },
574 { "unknown-221", "X", &nwip_universe
, 221 },
575 { "unknown-222", "X", &nwip_universe
, 222 },
576 { "unknown-223", "X", &nwip_universe
, 223 },
577 { "unknown-224", "X", &nwip_universe
, 224 },
578 { "unknown-225", "X", &nwip_universe
, 225 },
579 { "unknown-226", "X", &nwip_universe
, 226 },
580 { "unknown-227", "X", &nwip_universe
, 227 },
581 { "unknown-228", "X", &nwip_universe
, 228 },
582 { "unknown-229", "X", &nwip_universe
, 229 },
583 { "unknown-230", "X", &nwip_universe
, 230 },
584 { "unknown-231", "X", &nwip_universe
, 231 },
585 { "unknown-232", "X", &nwip_universe
, 232 },
586 { "unknown-233", "X", &nwip_universe
, 233 },
587 { "unknown-234", "X", &nwip_universe
, 234 },
588 { "unknown-235", "X", &nwip_universe
, 235 },
589 { "unknown-236", "X", &nwip_universe
, 236 },
590 { "unknown-237", "X", &nwip_universe
, 237 },
591 { "unknown-238", "X", &nwip_universe
, 238 },
592 { "unknown-239", "X", &nwip_universe
, 239 },
593 { "unknown-240", "X", &nwip_universe
, 240 },
594 { "unknown-241", "X", &nwip_universe
, 241 },
595 { "unknown-242", "X", &nwip_universe
, 242 },
596 { "unknown-243", "X", &nwip_universe
, 243 },
597 { "unknown-244", "X", &nwip_universe
, 244 },
598 { "unknown-245", "X", &nwip_universe
, 245 },
599 { "unknown-246", "X", &nwip_universe
, 246 },
600 { "unknown-247", "X", &nwip_universe
, 247 },
601 { "unknown-248", "X", &nwip_universe
, 248 },
602 { "unknown-249", "X", &nwip_universe
, 249 },
603 { "unknown-250", "X", &nwip_universe
, 250 },
604 { "unknown-251", "X", &nwip_universe
, 251 },
605 { "unknown-252", "X", &nwip_universe
, 252 },
606 { "unknown-253", "X", &nwip_universe
, 253 },
607 { "unknown-254", "X", &nwip_universe
, 254 },
608 { "unknown-end", "e", &nwip_universe
, 255 },
611 struct universe fqdn_universe
;
612 struct option fqdn_options
[256] = {
613 { "pad", "", &fqdn_universe
, 0 },
614 { "no-client-update", "f", &fqdn_universe
, 1 },
615 { "server-update", "f", &fqdn_universe
, 2 },
616 { "encoded", "f", &fqdn_universe
, 3 },
617 { "rcode1", "B", &fqdn_universe
, 4 },
618 { "rcode2", "B", &fqdn_universe
, 5 },
619 { "hostname", "t", &fqdn_universe
, 6 },
620 { "domainname", "t", &fqdn_universe
, 7 },
621 { "fqdn", "t", &fqdn_universe
, 8 },
622 { "unknown-9", "X", &fqdn_universe
, 9 },
623 { "unknown-10", "X", &fqdn_universe
, 10 },
624 { "unknown-11", "X", &fqdn_universe
, 11 },
625 { "unknown-12", "X", &fqdn_universe
, 12 },
626 { "unknown-13", "X", &fqdn_universe
, 13 },
627 { "unknown-14", "X", &fqdn_universe
, 14 },
628 { "unknown-15", "X", &fqdn_universe
, 15 },
629 { "unknown-16", "X", &fqdn_universe
, 16 },
630 { "unknown-17", "X", &fqdn_universe
, 17 },
631 { "unknown-18", "X", &fqdn_universe
, 18 },
632 { "unknown-19", "X", &fqdn_universe
, 19 },
633 { "unknown-20", "X", &fqdn_universe
, 20 },
634 { "unknown-21", "X", &fqdn_universe
, 21 },
635 { "unknown-22", "X", &fqdn_universe
, 22 },
636 { "unknown-23", "X", &fqdn_universe
, 23 },
637 { "unknown-24", "X", &fqdn_universe
, 24 },
638 { "unknown-25", "X", &fqdn_universe
, 25 },
639 { "unknown-26", "X", &fqdn_universe
, 26 },
640 { "unknown-27", "X", &fqdn_universe
, 27 },
641 { "unknown-28", "X", &fqdn_universe
, 28 },
642 { "unknown-29", "X", &fqdn_universe
, 29 },
643 { "unknown-30", "X", &fqdn_universe
, 30 },
644 { "unknown-31", "X", &fqdn_universe
, 31 },
645 { "unknown-32", "X", &fqdn_universe
, 32 },
646 { "unknown-33", "X", &fqdn_universe
, 33 },
647 { "unknown-34", "X", &fqdn_universe
, 34 },
648 { "unknown-35", "X", &fqdn_universe
, 35 },
649 { "unknown-36", "X", &fqdn_universe
, 36 },
650 { "unknown-37", "X", &fqdn_universe
, 37 },
651 { "unknown-38", "X", &fqdn_universe
, 38 },
652 { "unknown-39", "X", &fqdn_universe
, 39 },
653 { "unknown-40", "X", &fqdn_universe
, 40 },
654 { "unknown-41", "X", &fqdn_universe
, 41 },
655 { "unknown-42", "X", &fqdn_universe
, 42 },
656 { "unknown-43", "X", &fqdn_universe
, 43 },
657 { "unknown-44", "X", &fqdn_universe
, 44 },
658 { "unknown-45", "X", &fqdn_universe
, 45 },
659 { "unknown-46", "X", &fqdn_universe
, 46 },
660 { "unknown-47", "X", &fqdn_universe
, 47 },
661 { "unknown-48", "X", &fqdn_universe
, 48 },
662 { "unknown-49", "X", &fqdn_universe
, 49 },
663 { "unknown-50", "X", &fqdn_universe
, 50 },
664 { "unknown-51", "X", &fqdn_universe
, 51 },
665 { "unknown-52", "X", &fqdn_universe
, 52 },
666 { "unknown-53", "X", &fqdn_universe
, 53 },
667 { "unknown-54", "X", &fqdn_universe
, 54 },
668 { "unknown-55", "X", &fqdn_universe
, 55 },
669 { "unknown-56", "X", &fqdn_universe
, 56 },
670 { "unknown-57", "X", &fqdn_universe
, 57 },
671 { "unknown-58", "X", &fqdn_universe
, 58 },
672 { "unknown-59", "X", &fqdn_universe
, 59 },
673 { "unknown-60", "X", &fqdn_universe
, 60 },
674 { "unknown-61", "X", &fqdn_universe
, 61 },
675 { "unknown-62", "X", &fqdn_universe
, 62 },
676 { "unknown-63", "X", &fqdn_universe
, 63 },
677 { "unknown-64", "X", &fqdn_universe
, 64 },
678 { "unknown-65", "X", &fqdn_universe
, 65 },
679 { "unknown-66", "X", &fqdn_universe
, 66 },
680 { "unknown-67", "X", &fqdn_universe
, 67 },
681 { "unknown-68", "X", &fqdn_universe
, 68 },
682 { "unknown-69", "X", &fqdn_universe
, 69 },
683 { "unknown-70", "X", &fqdn_universe
, 70 },
684 { "unknown-71", "X", &fqdn_universe
, 71 },
685 { "unknown-72", "X", &fqdn_universe
, 72 },
686 { "unknown-73", "X", &fqdn_universe
, 73 },
687 { "unknown-74", "X", &fqdn_universe
, 74 },
688 { "unknown-75", "X", &fqdn_universe
, 75 },
689 { "unknown-76", "X", &fqdn_universe
, 76 },
690 { "unknown-77", "X", &fqdn_universe
, 77 },
691 { "unknown-78", "X", &fqdn_universe
, 78 },
692 { "unknown-79", "X", &fqdn_universe
, 79 },
693 { "unknown-80", "X", &fqdn_universe
, 80 },
694 { "unknown-81", "X", &fqdn_universe
, 81 },
695 { "unknown-82", "X", &fqdn_universe
, 82 },
696 { "unknown-83", "X", &fqdn_universe
, 83 },
697 { "unknown-84", "X", &fqdn_universe
, 84 },
698 { "unknown-85", "X", &fqdn_universe
, 85 },
699 { "unknown-86", "X", &fqdn_universe
, 86 },
700 { "unknown-87", "X", &fqdn_universe
, 87 },
701 { "unknown-88", "X", &fqdn_universe
, 88 },
702 { "unknown-89", "X", &fqdn_universe
, 89 },
703 { "unknown-90", "X", &fqdn_universe
, 90 },
704 { "unknown-91", "X", &fqdn_universe
, 91 },
705 { "unknown-92", "X", &fqdn_universe
, 92 },
706 { "unknown-93", "X", &fqdn_universe
, 93 },
707 { "unknown-94", "X", &fqdn_universe
, 94 },
708 { "unknown-95", "X", &fqdn_universe
, 95 },
709 { "unknown-96", "X", &fqdn_universe
, 96 },
710 { "unknown-97", "X", &fqdn_universe
, 97 },
711 { "unknown-98", "X", &fqdn_universe
, 98 },
712 { "unknown-99", "X", &fqdn_universe
, 99 },
713 { "unknown-100", "X", &fqdn_universe
, 100 },
714 { "unknown-101", "X", &fqdn_universe
, 101 },
715 { "unknown-102", "X", &fqdn_universe
, 102 },
716 { "unknown-103", "X", &fqdn_universe
, 103 },
717 { "unknown-104", "X", &fqdn_universe
, 104 },
718 { "unknown-105", "X", &fqdn_universe
, 105 },
719 { "unknown-106", "X", &fqdn_universe
, 106 },
720 { "unknown-107", "X", &fqdn_universe
, 107 },
721 { "unknown-108", "X", &fqdn_universe
, 108 },
722 { "unknown-109", "X", &fqdn_universe
, 109 },
723 { "unknown-110", "X", &fqdn_universe
, 110 },
724 { "unknown-111", "X", &fqdn_universe
, 111 },
725 { "unknown-112", "X", &fqdn_universe
, 112 },
726 { "unknown-113", "X", &fqdn_universe
, 113 },
727 { "unknown-114", "X", &fqdn_universe
, 114 },
728 { "unknown-115", "X", &fqdn_universe
, 115 },
729 { "unknown-116", "X", &fqdn_universe
, 116 },
730 { "unknown-117", "X", &fqdn_universe
, 117 },
731 { "unknown-118", "X", &fqdn_universe
, 118 },
732 { "unknown-119", "X", &fqdn_universe
, 119 },
733 { "unknown-120", "X", &fqdn_universe
, 120 },
734 { "unknown-121", "X", &fqdn_universe
, 121 },
735 { "unknown-122", "X", &fqdn_universe
, 122 },
736 { "unknown-123", "X", &fqdn_universe
, 123 },
737 { "unknown-124", "X", &fqdn_universe
, 124 },
738 { "unknown-125", "X", &fqdn_universe
, 125 },
739 { "unknown-126", "X", &fqdn_universe
, 126 },
740 { "unknown-127", "X", &fqdn_universe
, 127 },
741 { "unknown-128", "X", &fqdn_universe
, 128 },
742 { "unknown-129", "X", &fqdn_universe
, 129 },
743 { "unknown-130", "X", &fqdn_universe
, 130 },
744 { "unknown-131", "X", &fqdn_universe
, 131 },
745 { "unknown-132", "X", &fqdn_universe
, 132 },
746 { "unknown-133", "X", &fqdn_universe
, 133 },
747 { "unknown-134", "X", &fqdn_universe
, 134 },
748 { "unknown-135", "X", &fqdn_universe
, 135 },
749 { "unknown-136", "X", &fqdn_universe
, 136 },
750 { "unknown-137", "X", &fqdn_universe
, 137 },
751 { "unknown-138", "X", &fqdn_universe
, 138 },
752 { "unknown-139", "X", &fqdn_universe
, 139 },
753 { "unknown-140", "X", &fqdn_universe
, 140 },
754 { "unknown-141", "X", &fqdn_universe
, 141 },
755 { "unknown-142", "X", &fqdn_universe
, 142 },
756 { "unknown-143", "X", &fqdn_universe
, 143 },
757 { "unknown-144", "X", &fqdn_universe
, 144 },
758 { "unknown-145", "X", &fqdn_universe
, 145 },
759 { "unknown-146", "X", &fqdn_universe
, 146 },
760 { "unknown-147", "X", &fqdn_universe
, 147 },
761 { "unknown-148", "X", &fqdn_universe
, 148 },
762 { "unknown-149", "X", &fqdn_universe
, 149 },
763 { "unknown-150", "X", &fqdn_universe
, 150 },
764 { "unknown-151", "X", &fqdn_universe
, 151 },
765 { "unknown-152", "X", &fqdn_universe
, 152 },
766 { "unknown-153", "X", &fqdn_universe
, 153 },
767 { "unknown-154", "X", &fqdn_universe
, 154 },
768 { "unknown-155", "X", &fqdn_universe
, 155 },
769 { "unknown-156", "X", &fqdn_universe
, 156 },
770 { "unknown-157", "X", &fqdn_universe
, 157 },
771 { "unknown-158", "X", &fqdn_universe
, 158 },
772 { "unknown-159", "X", &fqdn_universe
, 159 },
773 { "unknown-160", "X", &fqdn_universe
, 160 },
774 { "unknown-161", "X", &fqdn_universe
, 161 },
775 { "unknown-162", "X", &fqdn_universe
, 162 },
776 { "unknown-163", "X", &fqdn_universe
, 163 },
777 { "unknown-164", "X", &fqdn_universe
, 164 },
778 { "unknown-165", "X", &fqdn_universe
, 165 },
779 { "unknown-166", "X", &fqdn_universe
, 166 },
780 { "unknown-167", "X", &fqdn_universe
, 167 },
781 { "unknown-168", "X", &fqdn_universe
, 168 },
782 { "unknown-169", "X", &fqdn_universe
, 169 },
783 { "unknown-170", "X", &fqdn_universe
, 170 },
784 { "unknown-171", "X", &fqdn_universe
, 171 },
785 { "unknown-172", "X", &fqdn_universe
, 172 },
786 { "unknown-173", "X", &fqdn_universe
, 173 },
787 { "unknown-174", "X", &fqdn_universe
, 174 },
788 { "unknown-175", "X", &fqdn_universe
, 175 },
789 { "unknown-176", "X", &fqdn_universe
, 176 },
790 { "unknown-177", "X", &fqdn_universe
, 177 },
791 { "unknown-178", "X", &fqdn_universe
, 178 },
792 { "unknown-179", "X", &fqdn_universe
, 179 },
793 { "unknown-180", "X", &fqdn_universe
, 180 },
794 { "unknown-181", "X", &fqdn_universe
, 181 },
795 { "unknown-182", "X", &fqdn_universe
, 182 },
796 { "unknown-183", "X", &fqdn_universe
, 183 },
797 { "unknown-184", "X", &fqdn_universe
, 184 },
798 { "unknown-185", "X", &fqdn_universe
, 185 },
799 { "unknown-186", "X", &fqdn_universe
, 186 },
800 { "unknown-187", "X", &fqdn_universe
, 187 },
801 { "unknown-188", "X", &fqdn_universe
, 188 },
802 { "unknown-189", "X", &fqdn_universe
, 189 },
803 { "unknown-190", "X", &fqdn_universe
, 190 },
804 { "unknown-191", "X", &fqdn_universe
, 191 },
805 { "unknown-192", "X", &fqdn_universe
, 192 },
806 { "unknown-193", "X", &fqdn_universe
, 193 },
807 { "unknown-194", "X", &fqdn_universe
, 194 },
808 { "unknown-195", "X", &fqdn_universe
, 195 },
809 { "unknown-196", "X", &fqdn_universe
, 196 },
810 { "unknown-197", "X", &fqdn_universe
, 197 },
811 { "unknown-198", "X", &fqdn_universe
, 198 },
812 { "unknown-199", "X", &fqdn_universe
, 199 },
813 { "unknown-200", "X", &fqdn_universe
, 200 },
814 { "unknown-201", "X", &fqdn_universe
, 201 },
815 { "unknown-202", "X", &fqdn_universe
, 202 },
816 { "unknown-203", "X", &fqdn_universe
, 203 },
817 { "unknown-204", "X", &fqdn_universe
, 204 },
818 { "unknown-205", "X", &fqdn_universe
, 205 },
819 { "unknown-206", "X", &fqdn_universe
, 206 },
820 { "unknown-207", "X", &fqdn_universe
, 207 },
821 { "unknown-208", "X", &fqdn_universe
, 208 },
822 { "unknown-209", "X", &fqdn_universe
, 209 },
823 { "unknown-210", "X", &fqdn_universe
, 210 },
824 { "unknown-211", "X", &fqdn_universe
, 211 },
825 { "unknown-212", "X", &fqdn_universe
, 212 },
826 { "unknown-213", "X", &fqdn_universe
, 213 },
827 { "unknown-214", "X", &fqdn_universe
, 214 },
828 { "unknown-215", "X", &fqdn_universe
, 215 },
829 { "unknown-216", "X", &fqdn_universe
, 216 },
830 { "unknown-217", "X", &fqdn_universe
, 217 },
831 { "unknown-218", "X", &fqdn_universe
, 218 },
832 { "unknown-219", "X", &fqdn_universe
, 219 },
833 { "unknown-220", "X", &fqdn_universe
, 220 },
834 { "unknown-221", "X", &fqdn_universe
, 221 },
835 { "unknown-222", "X", &fqdn_universe
, 222 },
836 { "unknown-223", "X", &fqdn_universe
, 223 },
837 { "unknown-224", "X", &fqdn_universe
, 224 },
838 { "unknown-225", "X", &fqdn_universe
, 225 },
839 { "unknown-226", "X", &fqdn_universe
, 226 },
840 { "unknown-227", "X", &fqdn_universe
, 227 },
841 { "unknown-228", "X", &fqdn_universe
, 228 },
842 { "unknown-229", "X", &fqdn_universe
, 229 },
843 { "unknown-230", "X", &fqdn_universe
, 230 },
844 { "unknown-231", "X", &fqdn_universe
, 231 },
845 { "unknown-232", "X", &fqdn_universe
, 232 },
846 { "unknown-233", "X", &fqdn_universe
, 233 },
847 { "unknown-234", "X", &fqdn_universe
, 234 },
848 { "unknown-235", "X", &fqdn_universe
, 235 },
849 { "unknown-236", "X", &fqdn_universe
, 236 },
850 { "unknown-237", "X", &fqdn_universe
, 237 },
851 { "unknown-238", "X", &fqdn_universe
, 238 },
852 { "unknown-239", "X", &fqdn_universe
, 239 },
853 { "unknown-240", "X", &fqdn_universe
, 240 },
854 { "unknown-241", "X", &fqdn_universe
, 241 },
855 { "unknown-242", "X", &fqdn_universe
, 242 },
856 { "unknown-243", "X", &fqdn_universe
, 243 },
857 { "unknown-244", "X", &fqdn_universe
, 244 },
858 { "unknown-245", "X", &fqdn_universe
, 245 },
859 { "unknown-246", "X", &fqdn_universe
, 246 },
860 { "unknown-247", "X", &fqdn_universe
, 247 },
861 { "unknown-248", "X", &fqdn_universe
, 248 },
862 { "unknown-249", "X", &fqdn_universe
, 249 },
863 { "unknown-250", "X", &fqdn_universe
, 250 },
864 { "unknown-251", "X", &fqdn_universe
, 251 },
865 { "unknown-252", "X", &fqdn_universe
, 252 },
866 { "unknown-253", "X", &fqdn_universe
, 253 },
867 { "unknown-254", "X", &fqdn_universe
, 254 },
868 { "unknown-end", "e", &fqdn_universe
, 255 },
871 const char *hardware_types
[] = {
1129 universe_hash_t
*universe_hash
;
1130 struct universe
**universes
;
1131 int universe_count
, universe_max
;
1133 /* Universe containing names of configuration options, which, rather than
1134 writing "option universe-name.option-name ...;", can be set by writing
1135 "option-name ...;". */
1137 struct universe
*config_universe
;
1139 void initialize_common_option_spaces()
1144 universes
= ((struct universe
**)
1145 dmalloc (universe_max
* sizeof (struct universe
*), MDL
));
1147 log_fatal ("Can't allocate option space table.");
1148 memset (universes
, 0, universe_max
* sizeof (struct universe
*));
1150 /* Set up the DHCP option universe... */
1151 dhcp_universe
.name
= "dhcp";
1152 dhcp_universe
.lookup_func
= lookup_hashed_option
;
1153 dhcp_universe
.option_state_dereference
=
1154 hashed_option_state_dereference
;
1155 dhcp_universe
.save_func
= save_hashed_option
;
1156 dhcp_universe
.delete_func
= delete_hashed_option
;
1157 dhcp_universe
.encapsulate
= hashed_option_space_encapsulate
;
1158 dhcp_universe
.foreach
= hashed_option_space_foreach
;
1159 dhcp_universe
.decode
= parse_option_buffer
;
1160 dhcp_universe
.length_size
= 1;
1161 dhcp_universe
.tag_size
= 1;
1162 dhcp_universe
.store_tag
= putUChar
;
1163 dhcp_universe
.store_length
= putUChar
;
1164 dhcp_universe
.index
= universe_count
++;
1165 universes
[dhcp_universe
.index
] = &dhcp_universe
;
1166 if (!option_new_hash (&dhcp_universe
.hash
, 1, MDL
))
1167 log_fatal ("Can't allocate dhcp option hash table.");
1168 for (i
= 0; i
< 256; i
++) {
1169 dhcp_universe
.options
[i
] = &dhcp_options
[i
];
1170 option_hash_add (dhcp_universe
.hash
,
1171 dhcp_options
[i
].name
, 0,
1172 &dhcp_options
[i
], MDL
);
1175 /* Set up the Novell option universe (for option 63)... */
1176 nwip_universe
.name
= "nwip";
1177 nwip_universe
.lookup_func
= lookup_linked_option
;
1178 nwip_universe
.option_state_dereference
=
1179 linked_option_state_dereference
;
1180 nwip_universe
.save_func
= save_linked_option
;
1181 nwip_universe
.delete_func
= delete_linked_option
;
1182 nwip_universe
.encapsulate
= nwip_option_space_encapsulate
;
1183 nwip_universe
.foreach
= linked_option_space_foreach
;
1184 nwip_universe
.decode
= parse_option_buffer
;
1185 nwip_universe
.length_size
= 1;
1186 nwip_universe
.tag_size
= 1;
1187 nwip_universe
.store_tag
= putUChar
;
1188 nwip_universe
.store_length
= putUChar
;
1189 nwip_universe
.enc_opt
= &dhcp_options
[DHO_NWIP_SUBOPTIONS
];
1190 nwip_universe
.index
= universe_count
++;
1191 universes
[nwip_universe
.index
] = &nwip_universe
;
1192 option_new_hash (&nwip_universe
.hash
, 1, MDL
);
1193 if (!nwip_universe
.hash
)
1194 log_fatal ("Can't allocate nwip option hash table.");
1195 for (i
= 0; i
< 256; i
++) {
1196 nwip_universe
.options
[i
] = &nwip_options
[i
];
1197 option_hash_add (nwip_universe
.hash
,
1198 nwip_options
[i
].name
, 0,
1199 &nwip_options
[i
], MDL
);
1202 /* Set up the FQDN option universe... */
1203 fqdn_universe
.name
= "fqdn";
1204 fqdn_universe
.lookup_func
= lookup_linked_option
;
1205 fqdn_universe
.option_state_dereference
=
1206 linked_option_state_dereference
;
1207 fqdn_universe
.save_func
= save_linked_option
;
1208 fqdn_universe
.delete_func
= delete_linked_option
;
1209 fqdn_universe
.encapsulate
= fqdn_option_space_encapsulate
;
1210 fqdn_universe
.foreach
= linked_option_space_foreach
;
1211 fqdn_universe
.decode
= fqdn_universe_decode
;
1212 fqdn_universe
.length_size
= 1;
1213 fqdn_universe
.tag_size
= 1;
1214 fqdn_universe
.store_tag
= putUChar
;
1215 fqdn_universe
.store_length
= putUChar
;
1216 fqdn_universe
.index
= universe_count
++;
1217 fqdn_universe
.enc_opt
= &dhcp_options
[DHO_FQDN
];
1218 universes
[fqdn_universe
.index
] = &fqdn_universe
;
1219 option_new_hash (&fqdn_universe
.hash
, 1, MDL
);
1220 if (!fqdn_universe
.hash
)
1221 log_fatal ("Can't allocate fqdn option hash table.");
1222 for (i
= 0; i
< 256; i
++) {
1223 fqdn_universe
.options
[i
] = &fqdn_options
[i
];
1224 option_hash_add (fqdn_universe
.hash
,
1225 fqdn_options
[i
].name
, 0,
1226 &fqdn_options
[i
], MDL
);
1229 /* Set up the hash of universes. */
1230 universe_new_hash (&universe_hash
, 1, MDL
);
1231 universe_hash_add (universe_hash
,
1232 dhcp_universe
.name
, 0,
1233 &dhcp_universe
, MDL
);
1234 universe_hash_add (universe_hash
,
1235 nwip_universe
.name
, 0,
1236 &nwip_universe
, MDL
);
1237 universe_hash_add (universe_hash
,
1238 fqdn_universe
.name
, 0,
1239 &fqdn_universe
, MDL
);