Upgrade isc-dhcp, e.g. dhclient.
[dragonfly.git] / contrib / isc-dhcp / common / tables.c
1 /* tables.c
2
3    Tables of information... */
4
5 /*
6  * Copyright (c) 1995-2002 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  * $Id: tables.c,v 1.51.2.7 2003/07/25 22:53:38 dhankins Exp $ Copyright (c) 1995-2002 The Internet Software Consortium.  All rights reserved.
44  * $FreeBSD: src/contrib/isc-dhcp/common/tables.c,v 1.10 2003/09/02 11:13:20 mbr Exp $
45  * $DragonFly: src/contrib/isc-dhcp/common/Attic/tables.c,v 1.2 2003/10/11 21:14:17 dillon Exp $
46  */
47
48 #include "dhcpd.h"
49
50 /* XXXDPN: Moved here from hash.c, when it moved to libomapi.  Not sure
51    where these really belong. */
52 HASH_FUNCTIONS (group, const char *, struct group_object, group_hash_t,
53                 group_reference, group_dereference)
54 HASH_FUNCTIONS (universe, const char *, struct universe, universe_hash_t, 0, 0)
55 HASH_FUNCTIONS (option, const char *, struct option, option_hash_t, 0, 0)
56
57 /* DHCP Option names, formats and codes, from RFC1533.
58
59    Format codes:
60
61    I - IP address
62    l - 32-bit signed integer
63    L - 32-bit unsigned integer
64    s - 16-bit signed integer
65    S - 16-bit unsigned integer
66    b - 8-bit signed integer
67    B - 8-bit unsigned integer
68    t - ASCII text
69    f - flag (true or false)
70    A - array of whatever precedes (e.g., IA means array of IP addresses)
71    a - array of the preceding character (e.g., IIa means two or more IP
72        addresses)
73    U - name of an option space (universe)
74    F - implicit flag - the presence of the option indicates that the
75        flag is true.
76    o - the preceding value is optional.
77    E - encapsulation, string or colon-seperated hex list (the latter
78        two for parsing).   E is followed by a text string containing
79        the name of the option space to encapsulate, followed by a '.'.
80        If the E is immediately followed by '.', the applicable vendor
81        option space is used if one is defined.
82    e - If an encapsulation directive is not the first thing in the string,
83        the option scanner requires an efficient way to find the encapsulation.
84        This is done by placing a 'e' at the beginning of the option.   The
85        'e' has no other purpose, and is not required if 'E' is the first
86        thing in the option.
87    X - either an ASCII string or binary data.   On output, the string is
88        scanned to see if it's printable ASCII and, if so, output as a
89        quoted string.   If not, it's output as colon-seperated hex.   On
90        input, the option can be specified either as a quoted string or as
91        a colon-seperated hex list.
92    N - enumeration.   N is followed by a text string containing
93        the name of the set of enumeration values to parse or emit,
94        followed by a '.'.   The width of the data is specified in the
95        named enumeration.   Named enumerations are tracked in parse.c.
96    d - Domain name (i.e., FOO or FOO.BAR).
97 */
98
99 struct universe dhcp_universe;
100 struct option dhcp_options [256] = {
101         { "pad", "",                                    &dhcp_universe, 0 },
102         { "subnet-mask", "I",                           &dhcp_universe, 1 },
103         { "time-offset", "l",                           &dhcp_universe, 2 },
104         { "routers", "IA",                              &dhcp_universe, 3 },
105         { "time-servers", "IA",                         &dhcp_universe, 4 },
106         { "ien116-name-servers", "IA",                  &dhcp_universe, 5 },
107         { "domain-name-servers", "IA",                  &dhcp_universe, 6 },
108         { "log-servers", "IA",                          &dhcp_universe, 7 },
109         { "cookie-servers", "IA",                       &dhcp_universe, 8 },
110         { "lpr-servers", "IA",                          &dhcp_universe, 9 },
111         { "impress-servers", "IA",                      &dhcp_universe, 10 },
112         { "resource-location-servers", "IA",            &dhcp_universe, 11 },
113         { "host-name", "X",                             &dhcp_universe, 12 },
114         { "boot-size", "S",                             &dhcp_universe, 13 },
115         { "merit-dump", "t",                            &dhcp_universe, 14 },
116         { "domain-name", "t",                           &dhcp_universe, 15 },
117         { "swap-server", "I",                           &dhcp_universe, 16 },
118         { "root-path", "t",                             &dhcp_universe, 17 },
119         { "extensions-path", "t",                       &dhcp_universe, 18 },
120         { "ip-forwarding", "f",                         &dhcp_universe, 19 },
121         { "non-local-source-routing", "f",              &dhcp_universe, 20 },
122         { "policy-filter", "IIA",                       &dhcp_universe, 21 },
123         { "max-dgram-reassembly", "S",                  &dhcp_universe, 22 },
124         { "default-ip-ttl", "B",                        &dhcp_universe, 23 },
125         { "path-mtu-aging-timeout", "L",                &dhcp_universe, 24 },
126         { "path-mtu-plateau-table", "SA",               &dhcp_universe, 25 },
127         { "interface-mtu", "S",                         &dhcp_universe, 26 },
128         { "all-subnets-local", "f",                     &dhcp_universe, 27 },
129         { "broadcast-address", "I",                     &dhcp_universe, 28 },
130         { "perform-mask-discovery", "f",                &dhcp_universe, 29 },
131         { "mask-supplier", "f",                         &dhcp_universe, 30 },
132         { "router-discovery", "f",                      &dhcp_universe, 31 },
133         { "router-solicitation-address", "I",           &dhcp_universe, 32 },
134         { "static-routes", "IIA",                       &dhcp_universe, 33 },
135         { "trailer-encapsulation", "f",                 &dhcp_universe, 34 },
136         { "arp-cache-timeout", "L",                     &dhcp_universe, 35 },
137         { "ieee802-3-encapsulation", "f",               &dhcp_universe, 36 },
138         { "default-tcp-ttl", "B",                       &dhcp_universe, 37 },
139         { "tcp-keepalive-interval", "L",                &dhcp_universe, 38 },
140         { "tcp-keepalive-garbage", "f",                 &dhcp_universe, 39 },
141         { "nis-domain", "t",                            &dhcp_universe, 40 },
142         { "nis-servers", "IA",                          &dhcp_universe, 41 },
143         { "ntp-servers", "IA",                          &dhcp_universe, 42 },
144         { "vendor-encapsulated-options", "E.",          &dhcp_universe, 43 },
145         { "netbios-name-servers", "IA",                 &dhcp_universe, 44 },
146         { "netbios-dd-server", "IA",                    &dhcp_universe, 45 },
147         { "netbios-node-type", "B",                     &dhcp_universe, 46 },
148         { "netbios-scope", "t",                         &dhcp_universe, 47 },
149         { "font-servers", "IA",                         &dhcp_universe, 48 },
150         { "x-display-manager", "IA",                    &dhcp_universe, 49 },
151         { "dhcp-requested-address", "I",                &dhcp_universe, 50 },
152         { "dhcp-lease-time", "L",                       &dhcp_universe, 51 },
153         { "dhcp-option-overload", "B",                  &dhcp_universe, 52 },
154         { "dhcp-message-type", "B",                     &dhcp_universe, 53 },
155         { "dhcp-server-identifier", "I",                &dhcp_universe, 54 },
156         { "dhcp-parameter-request-list", "BA",          &dhcp_universe, 55 },
157         { "dhcp-message", "t",                          &dhcp_universe, 56 },
158         { "dhcp-max-message-size", "S",                 &dhcp_universe, 57 },
159         { "dhcp-renewal-time", "L",                     &dhcp_universe, 58 },
160         { "dhcp-rebinding-time", "L",                   &dhcp_universe, 59 },
161         { "vendor-class-identifier", "X",               &dhcp_universe, 60 },
162         { "dhcp-client-identifier", "X",                &dhcp_universe, 61 },
163         { "nwip-domain", "X",                           &dhcp_universe, 62 },
164         { "nwip-suboptions", "Enwip.",                  &dhcp_universe, 63 },
165         { "nisplus-domain", "t",                        &dhcp_universe, 64 },
166         { "nisplus-servers", "IA",                      &dhcp_universe, 65 },
167         { "tftp-server-name", "t",                      &dhcp_universe, 66 },
168         { "bootfile-name", "t",                         &dhcp_universe, 67 },
169         { "mobile-ip-home-agent", "IA",                 &dhcp_universe, 68 },
170         { "smtp-server", "IA",                          &dhcp_universe, 69 },
171         { "pop-server", "IA",                           &dhcp_universe, 70 },
172         { "nntp-server", "IA",                          &dhcp_universe, 71 },
173         { "www-server", "IA",                           &dhcp_universe, 72 },
174         { "finger-server", "IA",                        &dhcp_universe, 73 },
175         { "irc-server", "IA",                           &dhcp_universe, 74 },
176         { "streettalk-server", "IA",                    &dhcp_universe, 75 },
177         { "streettalk-directory-assistance-server", "IA", &dhcp_universe, 76 },
178         { "user-class", "t",                            &dhcp_universe, 77 },
179         { "slp-directory-agent", "fIa",                 &dhcp_universe, 78 },
180         { "slp-service-scope", "fto",                   &dhcp_universe, 79 },
181         { "unknown-80", "X",                            &dhcp_universe, 80 },
182         { "fqdn", "Efqdn.",                             &dhcp_universe, 81 },
183         { "relay-agent-information", "Eagent.",         &dhcp_universe, 82 },
184         { "unknown-83", "X",                            &dhcp_universe, 83 },
185         { "unknown-84", "X",                            &dhcp_universe, 84 },
186         { "nds-servers", "IA",                          &dhcp_universe, 85 },
187         { "nds-tree-name", "X",                         &dhcp_universe, 86 },
188         { "nds-context", "X",                           &dhcp_universe, 87 },
189         { "unknown-88", "X",                            &dhcp_universe, 88 },
190         { "unknown-89", "X",                            &dhcp_universe, 89 },
191         { "unknown-90", "X",                            &dhcp_universe, 90 },
192         { "unknown-91", "X",                            &dhcp_universe, 91 },
193         { "unknown-92", "X",                            &dhcp_universe, 92 },
194         { "unknown-93", "X",                            &dhcp_universe, 93 },
195         { "unknown-94", "X",                            &dhcp_universe, 94 },
196         { "unknown-95", "X",                            &dhcp_universe, 95 },
197         { "unknown-96", "X",                            &dhcp_universe, 96 },
198         { "unknown-97", "X",                            &dhcp_universe, 97 },
199         { "uap-servers", "t",                           &dhcp_universe, 98 },
200         { "unknown-99", "X",                            &dhcp_universe, 99 },
201         { "unknown-100", "X",                           &dhcp_universe, 100 },
202         { "unknown-101", "X",                           &dhcp_universe, 101 },
203         { "unknown-102", "X",                           &dhcp_universe, 102 },
204         { "unknown-103", "X",                           &dhcp_universe, 103 },
205         { "unknown-104", "X",                           &dhcp_universe, 104 },
206         { "unknown-105", "X",                           &dhcp_universe, 105 },
207         { "unknown-106", "X",                           &dhcp_universe, 106 },
208         { "unknown-107", "X",                           &dhcp_universe, 107 },
209         { "unknown-108", "X",                           &dhcp_universe, 108 },
210         { "unknown-109", "X",                           &dhcp_universe, 109 },
211         { "unknown-110", "X",                                   &dhcp_universe, 110 },
212         { "unknown-111", "X",                           &dhcp_universe, 111 },
213         { "unknown-112", "X",                           &dhcp_universe, 112 },
214         { "unknown-113", "X",                           &dhcp_universe, 113 },
215         { "unknown-114", "X",                           &dhcp_universe, 114 },
216         { "unknown-115", "X",                           &dhcp_universe, 115 },
217         { "unknown-116", "X",                           &dhcp_universe, 116 },
218         { "unknown-117", "X",                           &dhcp_universe, 117 },
219         { "subnet-selection", "X",                      &dhcp_universe, 118 },
220         { "unknown-119", "X",                           &dhcp_universe, 119 },
221         { "unknown-120", "X",                           &dhcp_universe, 120 },
222         { "unknown-121", "X",                           &dhcp_universe, 121 },
223         { "unknown-122", "X",                           &dhcp_universe, 122 },
224         { "unknown-123", "X",                           &dhcp_universe, 123 },
225         { "unknown-124", "X",                           &dhcp_universe, 124 },
226         { "unknown-125", "X",                           &dhcp_universe, 125 },
227         { "unknown-126", "X",                           &dhcp_universe, 126 },
228         { "unknown-127", "X",                           &dhcp_universe, 127 },
229         { "unknown-128", "X",                           &dhcp_universe, 128 },
230         { "unknown-129", "X",                           &dhcp_universe, 129 },
231         { "unknown-130", "X",                           &dhcp_universe, 130 },
232         { "unknown-131", "X",                           &dhcp_universe, 131 },
233         { "unknown-132", "X",                           &dhcp_universe, 132 },
234         { "unknown-133", "X",                           &dhcp_universe, 133 },
235         { "unknown-134", "X",                           &dhcp_universe, 134 },
236         { "unknown-135", "X",                           &dhcp_universe, 135 },
237         { "unknown-136", "X",                           &dhcp_universe, 136 },
238         { "unknown-137", "X",                           &dhcp_universe, 137 },
239         { "unknown-138", "X",                           &dhcp_universe, 138 },
240         { "unknown-139", "X",                           &dhcp_universe, 139 },
241         { "unknown-140", "X",                           &dhcp_universe, 140 },
242         { "unknown-141", "X",                           &dhcp_universe, 141 },
243         { "unknown-142", "X",                           &dhcp_universe, 142 },
244         { "unknown-143", "X",                           &dhcp_universe, 143 },
245         { "unknown-144", "X",                           &dhcp_universe, 144 },
246         { "unknown-145", "X",                           &dhcp_universe, 145 },
247         { "unknown-146", "X",                           &dhcp_universe, 146 },
248         { "unknown-147", "X",                           &dhcp_universe, 147 },
249         { "unknown-148", "X",                           &dhcp_universe, 148 },
250         { "unknown-149", "X",                           &dhcp_universe, 149 },
251         { "unknown-150", "X",                           &dhcp_universe, 150 },
252         { "unknown-151", "X",                           &dhcp_universe, 151 },
253         { "unknown-152", "X",                           &dhcp_universe, 152 },
254         { "unknown-153", "X",                           &dhcp_universe, 153 },
255         { "unknown-154", "X",                           &dhcp_universe, 154 },
256         { "unknown-155", "X",                           &dhcp_universe, 155 },
257         { "unknown-156", "X",                           &dhcp_universe, 156 },
258         { "unknown-157", "X",                           &dhcp_universe, 157 },
259         { "unknown-158", "X",                           &dhcp_universe, 158 },
260         { "unknown-159", "X",                           &dhcp_universe, 159 },
261         { "unknown-160", "X",                           &dhcp_universe, 160 },
262         { "unknown-161", "X",                           &dhcp_universe, 161 },
263         { "unknown-162", "X",                           &dhcp_universe, 162 },
264         { "unknown-163", "X",                           &dhcp_universe, 163 },
265         { "unknown-164", "X",                           &dhcp_universe, 164 },
266         { "unknown-165", "X",                           &dhcp_universe, 165 },
267         { "unknown-166", "X",                           &dhcp_universe, 166 },
268         { "unknown-167", "X",                           &dhcp_universe, 167 },
269         { "unknown-168", "X",                           &dhcp_universe, 168 },
270         { "unknown-169", "X",                           &dhcp_universe, 169 },
271         { "unknown-170", "X",                           &dhcp_universe, 170 },
272         { "unknown-171", "X",                           &dhcp_universe, 171 },
273         { "unknown-172", "X",                           &dhcp_universe, 172 },
274         { "unknown-173", "X",                           &dhcp_universe, 173 },
275         { "unknown-174", "X",                           &dhcp_universe, 174 },
276         { "unknown-175", "X",                           &dhcp_universe, 175 },
277         { "unknown-176", "X",                           &dhcp_universe, 176 },
278         { "unknown-177", "X",                           &dhcp_universe, 177 },
279         { "unknown-178", "X",                           &dhcp_universe, 178 },
280         { "unknown-179", "X",                           &dhcp_universe, 179 },
281         { "unknown-180", "X",                           &dhcp_universe, 180 },
282         { "unknown-181", "X",                           &dhcp_universe, 181 },
283         { "unknown-182", "X",                           &dhcp_universe, 182 },
284         { "unknown-183", "X",                           &dhcp_universe, 183 },
285         { "unknown-184", "X",                           &dhcp_universe, 184 },
286         { "unknown-185", "X",                           &dhcp_universe, 185 },
287         { "unknown-186", "X",                           &dhcp_universe, 186 },
288         { "unknown-187", "X",                           &dhcp_universe, 187 },
289         { "unknown-188", "X",                           &dhcp_universe, 188 },
290         { "unknown-189", "X",                           &dhcp_universe, 189 },
291         { "unknown-190", "X",                           &dhcp_universe, 190 },
292         { "unknown-191", "X",                           &dhcp_universe, 191 },
293         { "unknown-192", "X",                           &dhcp_universe, 192 },
294         { "unknown-193", "X",                           &dhcp_universe, 193 },
295         { "unknown-194", "X",                           &dhcp_universe, 194 },
296         { "unknown-195", "X",                           &dhcp_universe, 195 },
297         { "unknown-196", "X",                           &dhcp_universe, 196 },
298         { "unknown-197", "X",                           &dhcp_universe, 197 },
299         { "unknown-198", "X",                           &dhcp_universe, 198 },
300         { "unknown-199", "X",                           &dhcp_universe, 199 },
301         { "unknown-200", "X",                           &dhcp_universe, 200 },
302         { "unknown-201", "X",                           &dhcp_universe, 201 },
303         { "unknown-202", "X",                           &dhcp_universe, 202 },
304         { "unknown-203", "X",                           &dhcp_universe, 203 },
305         { "unknown-204", "X",                           &dhcp_universe, 204 },
306         { "unknown-205", "X",                           &dhcp_universe, 205 },
307         { "unknown-206", "X",                           &dhcp_universe, 206 },
308         { "unknown-207", "X",                           &dhcp_universe, 207 },
309         { "unknown-208", "X",                           &dhcp_universe, 208 },
310         { "unknown-209", "X",                           &dhcp_universe, 209 },
311         { "authenticate", "X",                          &dhcp_universe, 210 },
312         { "unknown-211", "X",                           &dhcp_universe, 211 },
313         { "unknown-212", "X",                           &dhcp_universe, 212 },
314         { "unknown-213", "X",                           &dhcp_universe, 213 },
315         { "unknown-214", "X",                           &dhcp_universe, 214 },
316         { "unknown-215", "X",                           &dhcp_universe, 215 },
317         { "unknown-216", "X",                           &dhcp_universe, 216 },
318         { "unknown-217", "X",                           &dhcp_universe, 217 },
319         { "unknown-218", "X",                           &dhcp_universe, 218 },
320         { "unknown-219", "X",                           &dhcp_universe, 219 },
321         { "unknown-220", "X",                           &dhcp_universe, 220 },
322         { "unknown-221", "X",                           &dhcp_universe, 221 },
323         { "unknown-222", "X",                           &dhcp_universe, 222 },
324         { "unknown-223", "X",                           &dhcp_universe, 223 },
325         { "unknown-224", "X",                           &dhcp_universe, 224 },
326         { "unknown-225", "X",                           &dhcp_universe, 225 },
327         { "unknown-226", "X",                           &dhcp_universe, 226 },
328         { "unknown-227", "X",                           &dhcp_universe, 227 },
329         { "unknown-228", "X",                           &dhcp_universe, 228 },
330         { "unknown-229", "X",                           &dhcp_universe, 229 },
331         { "unknown-230", "X",                           &dhcp_universe, 230 },
332         { "unknown-231", "X",                           &dhcp_universe, 231 },
333         { "unknown-232", "X",                           &dhcp_universe, 232 },
334         { "unknown-233", "X",                           &dhcp_universe, 233 },
335         { "unknown-234", "X",                           &dhcp_universe, 234 },
336         { "unknown-235", "X",                           &dhcp_universe, 235 },
337         { "unknown-236", "X",                           &dhcp_universe, 236 },
338         { "unknown-237", "X",                           &dhcp_universe, 237 },
339         { "unknown-238", "X",                           &dhcp_universe, 238 },
340         { "unknown-239", "X",                           &dhcp_universe, 239 },
341         { "unknown-240", "X",                           &dhcp_universe, 240 },
342         { "unknown-241", "X",                           &dhcp_universe, 241 },
343         { "unknown-242", "X",                           &dhcp_universe, 242 },
344         { "unknown-243", "X",                           &dhcp_universe, 243 },
345         { "unknown-244", "X",                           &dhcp_universe, 244 },
346         { "unknown-245", "X",                           &dhcp_universe, 245 },
347         { "unknown-246", "X",                           &dhcp_universe, 246 },
348         { "unknown-247", "X",                           &dhcp_universe, 247 },
349         { "unknown-248", "X",                           &dhcp_universe, 248 },
350         { "unknown-249", "X",                           &dhcp_universe, 249 },
351         { "unknown-250", "X",                           &dhcp_universe, 250 },
352         { "unknown-251", "X",                           &dhcp_universe, 251 },
353         { "unknown-252", "X",                           &dhcp_universe, 252 },
354         { "unknown-253", "X",                           &dhcp_universe, 253 },
355         { "unknown-254", "X",                           &dhcp_universe, 254 },
356         { "option-end", "e",                            &dhcp_universe, 255 },
357 };
358
359 struct universe nwip_universe;
360 struct option nwip_options [256] = {
361         { "pad", "",                                    &nwip_universe, 0 },
362         { "illegal-1", "",                              &nwip_universe, 1 },
363         { "illegal-2", "",                              &nwip_universe, 2 },
364         { "illegal-3", "",                              &nwip_universe, 3 },
365         { "illegal-4", "",                              &nwip_universe, 4 },
366         { "nsq-broadcast", "f",                         &nwip_universe, 5 },
367         { "preferred-dss", "IA",                        &nwip_universe, 6 },
368         { "nearest-nwip-server", "IA",                  &nwip_universe, 7 },
369         { "autoretries", "B",                           &nwip_universe, 8 },
370         { "autoretry-secs", "B",                        &nwip_universe, 9 },
371         { "nwip-1-1", "f",                              &nwip_universe, 10 },
372         { "primary-dss", "I",                           &nwip_universe, 11 },
373         { "unknown-12", "X",                            &nwip_universe, 12 },
374         { "unknown-13", "X",                            &nwip_universe, 13 },
375         { "unknown-14", "X",                            &nwip_universe, 14 },
376         { "unknown-15", "X",                            &nwip_universe, 15 },
377         { "unknown-16", "X",                            &nwip_universe, 16 },
378         { "unknown-17", "X",                            &nwip_universe, 17 },
379         { "unknown-18", "X",                            &nwip_universe, 18 },
380         { "unknown-19", "X",                            &nwip_universe, 19 },
381         { "unknown-20", "X",                            &nwip_universe, 20 },
382         { "unknown-21", "X",                            &nwip_universe, 21 },
383         { "unknown-22", "X",                            &nwip_universe, 22 },
384         { "unknown-23", "X",                            &nwip_universe, 23 },
385         { "unknown-24", "X",                            &nwip_universe, 24 },
386         { "unknown-25", "X",                            &nwip_universe, 25 },
387         { "unknown-26", "X",                            &nwip_universe, 26 },
388         { "unknown-27", "X",                            &nwip_universe, 27 },
389         { "unknown-28", "X",                            &nwip_universe, 28 },
390         { "unknown-29", "X",                            &nwip_universe, 29 },
391         { "unknown-30", "X",                            &nwip_universe, 30 },
392         { "unknown-31", "X",                            &nwip_universe, 31 },
393         { "unknown-32", "X",                            &nwip_universe, 32 },
394         { "unknown-33", "X",                            &nwip_universe, 33 },
395         { "unknown-34", "X",                            &nwip_universe, 34 },
396         { "unknown-35", "X",                            &nwip_universe, 35 },
397         { "unknown-36", "X",                            &nwip_universe, 36 },
398         { "unknown-37", "X",                            &nwip_universe, 37 },
399         { "unknown-38", "X",                            &nwip_universe, 38 },
400         { "unknown-39", "X",                            &nwip_universe, 39 },
401         { "unknown-40", "X",                            &nwip_universe, 40 },
402         { "unknown-41", "X",                            &nwip_universe, 41 },
403         { "unknown-42", "X",                            &nwip_universe, 42 },
404         { "unknown-43", "X",                            &nwip_universe, 43 },
405         { "unknown-44", "X",                            &nwip_universe, 44 },
406         { "unknown-45", "X",                            &nwip_universe, 45 },
407         { "unknown-46", "X",                            &nwip_universe, 46 },
408         { "unknown-47", "X",                            &nwip_universe, 47 },
409         { "unknown-48", "X",                            &nwip_universe, 48 },
410         { "unknown-49", "X",                            &nwip_universe, 49 },
411         { "unknown-50", "X",                            &nwip_universe, 50 },
412         { "unknown-51", "X",                            &nwip_universe, 51 },
413         { "unknown-52", "X",                            &nwip_universe, 52 },
414         { "unknown-53", "X",                            &nwip_universe, 53 },
415         { "unknown-54", "X",                            &nwip_universe, 54 },
416         { "unknown-55", "X",                            &nwip_universe, 55 },
417         { "unknown-56", "X",                            &nwip_universe, 56 },
418         { "unknown-57", "X",                            &nwip_universe, 57 },
419         { "unknown-58", "X",                            &nwip_universe, 58 },
420         { "unknown-59", "X",                            &nwip_universe, 59 },
421         { "unknown-60", "X",                            &nwip_universe, 60 },
422         { "unknown-61", "X",                            &nwip_universe, 61 },
423         { "unknown-62", "X",                            &nwip_universe, 62 },
424         { "unknown-63", "X",                            &nwip_universe, 63 },
425         { "unknown-64", "X",                            &nwip_universe, 64 },
426         { "unknown-65", "X",                            &nwip_universe, 65 },
427         { "unknown-66", "X",                            &nwip_universe, 66 },
428         { "unknown-67", "X",                            &nwip_universe, 67 },
429         { "unknown-68", "X",                            &nwip_universe, 68 },
430         { "unknown-69", "X",                            &nwip_universe, 69 },
431         { "unknown-70", "X",                            &nwip_universe, 70 },
432         { "unknown-71", "X",                            &nwip_universe, 71 },
433         { "unknown-72", "X",                            &nwip_universe, 72 },
434         { "unknown-73", "X",                            &nwip_universe, 73 },
435         { "unknown-74", "X",                            &nwip_universe, 74 },
436         { "unknown-75", "X",                            &nwip_universe, 75 },
437         { "unknown-76", "X",                            &nwip_universe, 76 },
438         { "unknown-77", "X",                            &nwip_universe, 77 },
439         { "unknown-78", "X",                            &nwip_universe, 78 },
440         { "unknown-79", "X",                            &nwip_universe, 79 },
441         { "unknown-80", "X",                            &nwip_universe, 80 },
442         { "unknown-81", "X",                            &nwip_universe, 81 },
443         { "unknown-82", "X",                            &nwip_universe, 82 },
444         { "unknown-83", "X",                            &nwip_universe, 83 },
445         { "unknown-84", "X",                            &nwip_universe, 84 },
446         { "unknown-85", "X",                            &nwip_universe, 85 },
447         { "unknown-86", "X",                            &nwip_universe, 86 },
448         { "unknown-87", "X",                            &nwip_universe, 87 },
449         { "unknown-88", "X",                            &nwip_universe, 88 },
450         { "unknown-89", "X",                            &nwip_universe, 89 },
451         { "unknown-90", "X",                            &nwip_universe, 90 },
452         { "unknown-91", "X",                            &nwip_universe, 91 },
453         { "unknown-92", "X",                            &nwip_universe, 92 },
454         { "unknown-93", "X",                            &nwip_universe, 93 },
455         { "unknown-94", "X",                            &nwip_universe, 94 },
456         { "unknown-95", "X",                            &nwip_universe, 95 },
457         { "unknown-96", "X",                            &nwip_universe, 96 },
458         { "unknown-97", "X",                            &nwip_universe, 97 },
459         { "unknown-98", "X",                            &nwip_universe, 98 },
460         { "unknown-99", "X",                            &nwip_universe, 99 },
461         { "unknown-100", "X",                           &nwip_universe, 100 },
462         { "unknown-101", "X",                           &nwip_universe, 101 },
463         { "unknown-102", "X",                           &nwip_universe, 102 },
464         { "unknown-103", "X",                           &nwip_universe, 103 },
465         { "unknown-104", "X",                           &nwip_universe, 104 },
466         { "unknown-105", "X",                           &nwip_universe, 105 },
467         { "unknown-106", "X",                           &nwip_universe, 106 },
468         { "unknown-107", "X",                           &nwip_universe, 107 },
469         { "unknown-108", "X",                           &nwip_universe, 108 },
470         { "unknown-109", "X",                           &nwip_universe, 109 },
471         { "unknown-110", "X",                           &nwip_universe, 110 },
472         { "unknown-111", "X",                           &nwip_universe, 111 },
473         { "unknown-112", "X",                           &nwip_universe, 112 },
474         { "unknown-113", "X",                           &nwip_universe, 113 },
475         { "unknown-114", "X",                           &nwip_universe, 114 },
476         { "unknown-115", "X",                           &nwip_universe, 115 },
477         { "unknown-116", "X",                           &nwip_universe, 116 },
478         { "unknown-117", "X",                           &nwip_universe, 117 },
479         { "unknown-118", "X",                           &nwip_universe, 118 },
480         { "unknown-119", "X",                           &nwip_universe, 119 },
481         { "unknown-120", "X",                           &nwip_universe, 120 },
482         { "unknown-121", "X",                           &nwip_universe, 121 },
483         { "unknown-122", "X",                           &nwip_universe, 122 },
484         { "unknown-123", "X",                           &nwip_universe, 123 },
485         { "unknown-124", "X",                           &nwip_universe, 124 },
486         { "unknown-125", "X",                           &nwip_universe, 125 },
487         { "unknown-126", "X",                           &nwip_universe, 126 },
488         { "unknown-127", "X",                           &nwip_universe, 127 },
489         { "unknown-128", "X",                           &nwip_universe, 128 },
490         { "unknown-129", "X",                           &nwip_universe, 129 },
491         { "unknown-130", "X",                           &nwip_universe, 130 },
492         { "unknown-131", "X",                           &nwip_universe, 131 },
493         { "unknown-132", "X",                           &nwip_universe, 132 },
494         { "unknown-133", "X",                           &nwip_universe, 133 },
495         { "unknown-134", "X",                           &nwip_universe, 134 },
496         { "unknown-135", "X",                           &nwip_universe, 135 },
497         { "unknown-136", "X",                           &nwip_universe, 136 },
498         { "unknown-137", "X",                           &nwip_universe, 137 },
499         { "unknown-138", "X",                           &nwip_universe, 138 },
500         { "unknown-139", "X",                           &nwip_universe, 139 },
501         { "unknown-140", "X",                           &nwip_universe, 140 },
502         { "unknown-141", "X",                           &nwip_universe, 141 },
503         { "unknown-142", "X",                           &nwip_universe, 142 },
504         { "unknown-143", "X",                           &nwip_universe, 143 },
505         { "unknown-144", "X",                           &nwip_universe, 144 },
506         { "unknown-145", "X",                           &nwip_universe, 145 },
507         { "unknown-146", "X",                           &nwip_universe, 146 },
508         { "unknown-147", "X",                           &nwip_universe, 147 },
509         { "unknown-148", "X",                           &nwip_universe, 148 },
510         { "unknown-149", "X",                           &nwip_universe, 149 },
511         { "unknown-150", "X",                           &nwip_universe, 150 },
512         { "unknown-151", "X",                           &nwip_universe, 151 },
513         { "unknown-152", "X",                           &nwip_universe, 152 },
514         { "unknown-153", "X",                           &nwip_universe, 153 },
515         { "unknown-154", "X",                           &nwip_universe, 154 },
516         { "unknown-155", "X",                           &nwip_universe, 155 },
517         { "unknown-156", "X",                           &nwip_universe, 156 },
518         { "unknown-157", "X",                           &nwip_universe, 157 },
519         { "unknown-158", "X",                           &nwip_universe, 158 },
520         { "unknown-159", "X",                           &nwip_universe, 159 },
521         { "unknown-160", "X",                           &nwip_universe, 160 },
522         { "unknown-161", "X",                           &nwip_universe, 161 },
523         { "unknown-162", "X",                           &nwip_universe, 162 },
524         { "unknown-163", "X",                           &nwip_universe, 163 },
525         { "unknown-164", "X",                           &nwip_universe, 164 },
526         { "unknown-165", "X",                           &nwip_universe, 165 },
527         { "unknown-166", "X",                           &nwip_universe, 166 },
528         { "unknown-167", "X",                           &nwip_universe, 167 },
529         { "unknown-168", "X",                           &nwip_universe, 168 },
530         { "unknown-169", "X",                           &nwip_universe, 169 },
531         { "unknown-170", "X",                           &nwip_universe, 170 },
532         { "unknown-171", "X",                           &nwip_universe, 171 },
533         { "unknown-172", "X",                           &nwip_universe, 172 },
534         { "unknown-173", "X",                           &nwip_universe, 173 },
535         { "unknown-174", "X",                           &nwip_universe, 174 },
536         { "unknown-175", "X",                           &nwip_universe, 175 },
537         { "unknown-176", "X",                           &nwip_universe, 176 },
538         { "unknown-177", "X",                           &nwip_universe, 177 },
539         { "unknown-178", "X",                           &nwip_universe, 178 },
540         { "unknown-179", "X",                           &nwip_universe, 179 },
541         { "unknown-180", "X",                           &nwip_universe, 180 },
542         { "unknown-181", "X",                           &nwip_universe, 181 },
543         { "unknown-182", "X",                           &nwip_universe, 182 },
544         { "unknown-183", "X",                           &nwip_universe, 183 },
545         { "unknown-184", "X",                           &nwip_universe, 184 },
546         { "unknown-185", "X",                           &nwip_universe, 185 },
547         { "unknown-186", "X",                           &nwip_universe, 186 },
548         { "unknown-187", "X",                           &nwip_universe, 187 },
549         { "unknown-188", "X",                           &nwip_universe, 188 },
550         { "unknown-189", "X",                           &nwip_universe, 189 },
551         { "unknown-190", "X",                           &nwip_universe, 190 },
552         { "unknown-191", "X",                           &nwip_universe, 191 },
553         { "unknown-192", "X",                           &nwip_universe, 192 },
554         { "unknown-193", "X",                           &nwip_universe, 193 },
555         { "unknown-194", "X",                           &nwip_universe, 194 },
556         { "unknown-195", "X",                           &nwip_universe, 195 },
557         { "unknown-196", "X",                           &nwip_universe, 196 },
558         { "unknown-197", "X",                           &nwip_universe, 197 },
559         { "unknown-198", "X",                           &nwip_universe, 198 },
560         { "unknown-199", "X",                           &nwip_universe, 199 },
561         { "unknown-200", "X",                           &nwip_universe, 200 },
562         { "unknown-201", "X",                           &nwip_universe, 201 },
563         { "unknown-202", "X",                           &nwip_universe, 202 },
564         { "unknown-203", "X",                           &nwip_universe, 203 },
565         { "unknown-204", "X",                           &nwip_universe, 204 },
566         { "unknown-205", "X",                           &nwip_universe, 205 },
567         { "unknown-206", "X",                           &nwip_universe, 206 },
568         { "unknown-207", "X",                           &nwip_universe, 207 },
569         { "unknown-208", "X",                           &nwip_universe, 208 },
570         { "unknown-209", "X",                           &nwip_universe, 209 },
571         { "unknown-210", "X",                           &nwip_universe, 210 },
572         { "unknown-211", "X",                           &nwip_universe, 211 },
573         { "unknown-212", "X",                           &nwip_universe, 212 },
574         { "unknown-213", "X",                           &nwip_universe, 213 },
575         { "unknown-214", "X",                           &nwip_universe, 214 },
576         { "unknown-215", "X",                           &nwip_universe, 215 },
577         { "unknown-216", "X",                           &nwip_universe, 216 },
578         { "unknown-217", "X",                           &nwip_universe, 217 },
579         { "unknown-218", "X",                           &nwip_universe, 218 },
580         { "unknown-219", "X",                           &nwip_universe, 219 },
581         { "unknown-220", "X",                           &nwip_universe, 220 },
582         { "unknown-221", "X",                           &nwip_universe, 221 },
583         { "unknown-222", "X",                           &nwip_universe, 222 },
584         { "unknown-223", "X",                           &nwip_universe, 223 },
585         { "unknown-224", "X",                           &nwip_universe, 224 },
586         { "unknown-225", "X",                           &nwip_universe, 225 },
587         { "unknown-226", "X",                           &nwip_universe, 226 },
588         { "unknown-227", "X",                           &nwip_universe, 227 },
589         { "unknown-228", "X",                           &nwip_universe, 228 },
590         { "unknown-229", "X",                           &nwip_universe, 229 },
591         { "unknown-230", "X",                           &nwip_universe, 230 },
592         { "unknown-231", "X",                           &nwip_universe, 231 },
593         { "unknown-232", "X",                           &nwip_universe, 232 },
594         { "unknown-233", "X",                           &nwip_universe, 233 },
595         { "unknown-234", "X",                           &nwip_universe, 234 },
596         { "unknown-235", "X",                           &nwip_universe, 235 },
597         { "unknown-236", "X",                           &nwip_universe, 236 },
598         { "unknown-237", "X",                           &nwip_universe, 237 },
599         { "unknown-238", "X",                           &nwip_universe, 238 },
600         { "unknown-239", "X",                           &nwip_universe, 239 },
601         { "unknown-240", "X",                           &nwip_universe, 240 },
602         { "unknown-241", "X",                           &nwip_universe, 241 },
603         { "unknown-242", "X",                           &nwip_universe, 242 },
604         { "unknown-243", "X",                           &nwip_universe, 243 },
605         { "unknown-244", "X",                           &nwip_universe, 244 },
606         { "unknown-245", "X",                           &nwip_universe, 245 },
607         { "unknown-246", "X",                           &nwip_universe, 246 },
608         { "unknown-247", "X",                           &nwip_universe, 247 },
609         { "unknown-248", "X",                           &nwip_universe, 248 },
610         { "unknown-249", "X",                           &nwip_universe, 249 },
611         { "unknown-250", "X",                           &nwip_universe, 250 },
612         { "unknown-251", "X",                           &nwip_universe, 251 },
613         { "unknown-252", "X",                           &nwip_universe, 252 },
614         { "unknown-253", "X",                           &nwip_universe, 253 },
615         { "unknown-254", "X",                           &nwip_universe, 254 },
616         { "unknown-end", "e",                           &nwip_universe, 255 },
617 };
618
619 struct universe fqdn_universe;
620 struct option fqdn_options [256] = {
621         { "pad", "",                                    &fqdn_universe, 0 },
622         { "no-client-update", "f",                      &fqdn_universe, 1 },
623         { "server-update", "f",                         &fqdn_universe, 2 },
624         { "encoded", "f",                               &fqdn_universe, 3 },
625         { "rcode1", "B",                                &fqdn_universe, 4 },
626         { "rcode2", "B",                                &fqdn_universe, 5 },
627         { "hostname", "t",                              &fqdn_universe, 6 },
628         { "domainname", "t",                            &fqdn_universe, 7 },
629         { "fqdn", "t",                                  &fqdn_universe, 8 },
630         { "unknown-9", "X",                             &fqdn_universe, 9 },
631         { "unknown-10", "X",                            &fqdn_universe, 10 },
632         { "unknown-11", "X",                            &fqdn_universe, 11 },
633         { "unknown-12", "X",                            &fqdn_universe, 12 },
634         { "unknown-13", "X",                            &fqdn_universe, 13 },
635         { "unknown-14", "X",                            &fqdn_universe, 14 },
636         { "unknown-15", "X",                            &fqdn_universe, 15 },
637         { "unknown-16", "X",                            &fqdn_universe, 16 },
638         { "unknown-17", "X",                            &fqdn_universe, 17 },
639         { "unknown-18", "X",                            &fqdn_universe, 18 },
640         { "unknown-19", "X",                            &fqdn_universe, 19 },
641         { "unknown-20", "X",                            &fqdn_universe, 20 },
642         { "unknown-21", "X",                            &fqdn_universe, 21 },
643         { "unknown-22", "X",                            &fqdn_universe, 22 },
644         { "unknown-23", "X",                            &fqdn_universe, 23 },
645         { "unknown-24", "X",                            &fqdn_universe, 24 },
646         { "unknown-25", "X",                            &fqdn_universe, 25 },
647         { "unknown-26", "X",                            &fqdn_universe, 26 },
648         { "unknown-27", "X",                            &fqdn_universe, 27 },
649         { "unknown-28", "X",                            &fqdn_universe, 28 },
650         { "unknown-29", "X",                            &fqdn_universe, 29 },
651         { "unknown-30", "X",                            &fqdn_universe, 30 },
652         { "unknown-31", "X",                            &fqdn_universe, 31 },
653         { "unknown-32", "X",                            &fqdn_universe, 32 },
654         { "unknown-33", "X",                            &fqdn_universe, 33 },
655         { "unknown-34", "X",                            &fqdn_universe, 34 },
656         { "unknown-35", "X",                            &fqdn_universe, 35 },
657         { "unknown-36", "X",                            &fqdn_universe, 36 },
658         { "unknown-37", "X",                            &fqdn_universe, 37 },
659         { "unknown-38", "X",                            &fqdn_universe, 38 },
660         { "unknown-39", "X",                            &fqdn_universe, 39 },
661         { "unknown-40", "X",                            &fqdn_universe, 40 },
662         { "unknown-41", "X",                            &fqdn_universe, 41 },
663         { "unknown-42", "X",                            &fqdn_universe, 42 },
664         { "unknown-43", "X",                            &fqdn_universe, 43 },
665         { "unknown-44", "X",                            &fqdn_universe, 44 },
666         { "unknown-45", "X",                            &fqdn_universe, 45 },
667         { "unknown-46", "X",                            &fqdn_universe, 46 },
668         { "unknown-47", "X",                            &fqdn_universe, 47 },
669         { "unknown-48", "X",                            &fqdn_universe, 48 },
670         { "unknown-49", "X",                            &fqdn_universe, 49 },
671         { "unknown-50", "X",                            &fqdn_universe, 50 },
672         { "unknown-51", "X",                            &fqdn_universe, 51 },
673         { "unknown-52", "X",                            &fqdn_universe, 52 },
674         { "unknown-53", "X",                            &fqdn_universe, 53 },
675         { "unknown-54", "X",                            &fqdn_universe, 54 },
676         { "unknown-55", "X",                            &fqdn_universe, 55 },
677         { "unknown-56", "X",                            &fqdn_universe, 56 },
678         { "unknown-57", "X",                            &fqdn_universe, 57 },
679         { "unknown-58", "X",                            &fqdn_universe, 58 },
680         { "unknown-59", "X",                            &fqdn_universe, 59 },
681         { "unknown-60", "X",                            &fqdn_universe, 60 },
682         { "unknown-61", "X",                            &fqdn_universe, 61 },
683         { "unknown-62", "X",                            &fqdn_universe, 62 },
684         { "unknown-63", "X",                            &fqdn_universe, 63 },
685         { "unknown-64", "X",                            &fqdn_universe, 64 },
686         { "unknown-65", "X",                            &fqdn_universe, 65 },
687         { "unknown-66", "X",                            &fqdn_universe, 66 },
688         { "unknown-67", "X",                            &fqdn_universe, 67 },
689         { "unknown-68", "X",                            &fqdn_universe, 68 },
690         { "unknown-69", "X",                            &fqdn_universe, 69 },
691         { "unknown-70", "X",                            &fqdn_universe, 70 },
692         { "unknown-71", "X",                            &fqdn_universe, 71 },
693         { "unknown-72", "X",                            &fqdn_universe, 72 },
694         { "unknown-73", "X",                            &fqdn_universe, 73 },
695         { "unknown-74", "X",                            &fqdn_universe, 74 },
696         { "unknown-75", "X",                            &fqdn_universe, 75 },
697         { "unknown-76", "X",                            &fqdn_universe, 76 },
698         { "unknown-77", "X",                            &fqdn_universe, 77 },
699         { "unknown-78", "X",                            &fqdn_universe, 78 },
700         { "unknown-79", "X",                            &fqdn_universe, 79 },
701         { "unknown-80", "X",                            &fqdn_universe, 80 },
702         { "unknown-81", "X",                            &fqdn_universe, 81 },
703         { "unknown-82", "X",                            &fqdn_universe, 82 },
704         { "unknown-83", "X",                            &fqdn_universe, 83 },
705         { "unknown-84", "X",                            &fqdn_universe, 84 },
706         { "unknown-85", "X",                            &fqdn_universe, 85 },
707         { "unknown-86", "X",                            &fqdn_universe, 86 },
708         { "unknown-87", "X",                            &fqdn_universe, 87 },
709         { "unknown-88", "X",                            &fqdn_universe, 88 },
710         { "unknown-89", "X",                            &fqdn_universe, 89 },
711         { "unknown-90", "X",                            &fqdn_universe, 90 },
712         { "unknown-91", "X",                            &fqdn_universe, 91 },
713         { "unknown-92", "X",                            &fqdn_universe, 92 },
714         { "unknown-93", "X",                            &fqdn_universe, 93 },
715         { "unknown-94", "X",                            &fqdn_universe, 94 },
716         { "unknown-95", "X",                            &fqdn_universe, 95 },
717         { "unknown-96", "X",                            &fqdn_universe, 96 },
718         { "unknown-97", "X",                            &fqdn_universe, 97 },
719         { "unknown-98", "X",                            &fqdn_universe, 98 },
720         { "unknown-99", "X",                            &fqdn_universe, 99 },
721         { "unknown-100", "X",                           &fqdn_universe, 100 },
722         { "unknown-101", "X",                           &fqdn_universe, 101 },
723         { "unknown-102", "X",                           &fqdn_universe, 102 },
724         { "unknown-103", "X",                           &fqdn_universe, 103 },
725         { "unknown-104", "X",                           &fqdn_universe, 104 },
726         { "unknown-105", "X",                           &fqdn_universe, 105 },
727         { "unknown-106", "X",                           &fqdn_universe, 106 },
728         { "unknown-107", "X",                           &fqdn_universe, 107 },
729         { "unknown-108", "X",                           &fqdn_universe, 108 },
730         { "unknown-109", "X",                           &fqdn_universe, 109 },
731         { "unknown-110", "X",                           &fqdn_universe, 110 },
732         { "unknown-111", "X",                           &fqdn_universe, 111 },
733         { "unknown-112", "X",                           &fqdn_universe, 112 },
734         { "unknown-113", "X",                           &fqdn_universe, 113 },
735         { "unknown-114", "X",                           &fqdn_universe, 114 },
736         { "unknown-115", "X",                           &fqdn_universe, 115 },
737         { "unknown-116", "X",                           &fqdn_universe, 116 },
738         { "unknown-117", "X",                           &fqdn_universe, 117 },
739         { "unknown-118", "X",                           &fqdn_universe, 118 },
740         { "unknown-119", "X",                           &fqdn_universe, 119 },
741         { "unknown-120", "X",                           &fqdn_universe, 120 },
742         { "unknown-121", "X",                           &fqdn_universe, 121 },
743         { "unknown-122", "X",                           &fqdn_universe, 122 },
744         { "unknown-123", "X",                           &fqdn_universe, 123 },
745         { "unknown-124", "X",                           &fqdn_universe, 124 },
746         { "unknown-125", "X",                           &fqdn_universe, 125 },
747         { "unknown-126", "X",                           &fqdn_universe, 126 },
748         { "unknown-127", "X",                           &fqdn_universe, 127 },
749         { "unknown-128", "X",                           &fqdn_universe, 128 },
750         { "unknown-129", "X",                           &fqdn_universe, 129 },
751         { "unknown-130", "X",                           &fqdn_universe, 130 },
752         { "unknown-131", "X",                           &fqdn_universe, 131 },
753         { "unknown-132", "X",                           &fqdn_universe, 132 },
754         { "unknown-133", "X",                           &fqdn_universe, 133 },
755         { "unknown-134", "X",                           &fqdn_universe, 134 },
756         { "unknown-135", "X",                           &fqdn_universe, 135 },
757         { "unknown-136", "X",                           &fqdn_universe, 136 },
758         { "unknown-137", "X",                           &fqdn_universe, 137 },
759         { "unknown-138", "X",                           &fqdn_universe, 138 },
760         { "unknown-139", "X",                           &fqdn_universe, 139 },
761         { "unknown-140", "X",                           &fqdn_universe, 140 },
762         { "unknown-141", "X",                           &fqdn_universe, 141 },
763         { "unknown-142", "X",                           &fqdn_universe, 142 },
764         { "unknown-143", "X",                           &fqdn_universe, 143 },
765         { "unknown-144", "X",                           &fqdn_universe, 144 },
766         { "unknown-145", "X",                           &fqdn_universe, 145 },
767         { "unknown-146", "X",                           &fqdn_universe, 146 },
768         { "unknown-147", "X",                           &fqdn_universe, 147 },
769         { "unknown-148", "X",                           &fqdn_universe, 148 },
770         { "unknown-149", "X",                           &fqdn_universe, 149 },
771         { "unknown-150", "X",                           &fqdn_universe, 150 },
772         { "unknown-151", "X",                           &fqdn_universe, 151 },
773         { "unknown-152", "X",                           &fqdn_universe, 152 },
774         { "unknown-153", "X",                           &fqdn_universe, 153 },
775         { "unknown-154", "X",                           &fqdn_universe, 154 },
776         { "unknown-155", "X",                           &fqdn_universe, 155 },
777         { "unknown-156", "X",                           &fqdn_universe, 156 },
778         { "unknown-157", "X",                           &fqdn_universe, 157 },
779         { "unknown-158", "X",                           &fqdn_universe, 158 },
780         { "unknown-159", "X",                           &fqdn_universe, 159 },
781         { "unknown-160", "X",                           &fqdn_universe, 160 },
782         { "unknown-161", "X",                           &fqdn_universe, 161 },
783         { "unknown-162", "X",                           &fqdn_universe, 162 },
784         { "unknown-163", "X",                           &fqdn_universe, 163 },
785         { "unknown-164", "X",                           &fqdn_universe, 164 },
786         { "unknown-165", "X",                           &fqdn_universe, 165 },
787         { "unknown-166", "X",                           &fqdn_universe, 166 },
788         { "unknown-167", "X",                           &fqdn_universe, 167 },
789         { "unknown-168", "X",                           &fqdn_universe, 168 },
790         { "unknown-169", "X",                           &fqdn_universe, 169 },
791         { "unknown-170", "X",                           &fqdn_universe, 170 },
792         { "unknown-171", "X",                           &fqdn_universe, 171 },
793         { "unknown-172", "X",                           &fqdn_universe, 172 },
794         { "unknown-173", "X",                           &fqdn_universe, 173 },
795         { "unknown-174", "X",                           &fqdn_universe, 174 },
796         { "unknown-175", "X",                           &fqdn_universe, 175 },
797         { "unknown-176", "X",                           &fqdn_universe, 176 },
798         { "unknown-177", "X",                           &fqdn_universe, 177 },
799         { "unknown-178", "X",                           &fqdn_universe, 178 },
800         { "unknown-179", "X",                           &fqdn_universe, 179 },
801         { "unknown-180", "X",                           &fqdn_universe, 180 },
802         { "unknown-181", "X",                           &fqdn_universe, 181 },
803         { "unknown-182", "X",                           &fqdn_universe, 182 },
804         { "unknown-183", "X",                           &fqdn_universe, 183 },
805         { "unknown-184", "X",                           &fqdn_universe, 184 },
806         { "unknown-185", "X",                           &fqdn_universe, 185 },
807         { "unknown-186", "X",                           &fqdn_universe, 186 },
808         { "unknown-187", "X",                           &fqdn_universe, 187 },
809         { "unknown-188", "X",                           &fqdn_universe, 188 },
810         { "unknown-189", "X",                           &fqdn_universe, 189 },
811         { "unknown-190", "X",                           &fqdn_universe, 190 },
812         { "unknown-191", "X",                           &fqdn_universe, 191 },
813         { "unknown-192", "X",                           &fqdn_universe, 192 },
814         { "unknown-193", "X",                           &fqdn_universe, 193 },
815         { "unknown-194", "X",                           &fqdn_universe, 194 },
816         { "unknown-195", "X",                           &fqdn_universe, 195 },
817         { "unknown-196", "X",                           &fqdn_universe, 196 },
818         { "unknown-197", "X",                           &fqdn_universe, 197 },
819         { "unknown-198", "X",                           &fqdn_universe, 198 },
820         { "unknown-199", "X",                           &fqdn_universe, 199 },
821         { "unknown-200", "X",                           &fqdn_universe, 200 },
822         { "unknown-201", "X",                           &fqdn_universe, 201 },
823         { "unknown-202", "X",                           &fqdn_universe, 202 },
824         { "unknown-203", "X",                           &fqdn_universe, 203 },
825         { "unknown-204", "X",                           &fqdn_universe, 204 },
826         { "unknown-205", "X",                           &fqdn_universe, 205 },
827         { "unknown-206", "X",                           &fqdn_universe, 206 },
828         { "unknown-207", "X",                           &fqdn_universe, 207 },
829         { "unknown-208", "X",                           &fqdn_universe, 208 },
830         { "unknown-209", "X",                           &fqdn_universe, 209 },
831         { "unknown-210", "X",                           &fqdn_universe, 210 },
832         { "unknown-211", "X",                           &fqdn_universe, 211 },
833         { "unknown-212", "X",                           &fqdn_universe, 212 },
834         { "unknown-213", "X",                           &fqdn_universe, 213 },
835         { "unknown-214", "X",                           &fqdn_universe, 214 },
836         { "unknown-215", "X",                           &fqdn_universe, 215 },
837         { "unknown-216", "X",                           &fqdn_universe, 216 },
838         { "unknown-217", "X",                           &fqdn_universe, 217 },
839         { "unknown-218", "X",                           &fqdn_universe, 218 },
840         { "unknown-219", "X",                           &fqdn_universe, 219 },
841         { "unknown-220", "X",                           &fqdn_universe, 220 },
842         { "unknown-221", "X",                           &fqdn_universe, 221 },
843         { "unknown-222", "X",                           &fqdn_universe, 222 },
844         { "unknown-223", "X",                           &fqdn_universe, 223 },
845         { "unknown-224", "X",                           &fqdn_universe, 224 },
846         { "unknown-225", "X",                           &fqdn_universe, 225 },
847         { "unknown-226", "X",                           &fqdn_universe, 226 },
848         { "unknown-227", "X",                           &fqdn_universe, 227 },
849         { "unknown-228", "X",                           &fqdn_universe, 228 },
850         { "unknown-229", "X",                           &fqdn_universe, 229 },
851         { "unknown-230", "X",                           &fqdn_universe, 230 },
852         { "unknown-231", "X",                           &fqdn_universe, 231 },
853         { "unknown-232", "X",                           &fqdn_universe, 232 },
854         { "unknown-233", "X",                           &fqdn_universe, 233 },
855         { "unknown-234", "X",                           &fqdn_universe, 234 },
856         { "unknown-235", "X",                           &fqdn_universe, 235 },
857         { "unknown-236", "X",                           &fqdn_universe, 236 },
858         { "unknown-237", "X",                           &fqdn_universe, 237 },
859         { "unknown-238", "X",                           &fqdn_universe, 238 },
860         { "unknown-239", "X",                           &fqdn_universe, 239 },
861         { "unknown-240", "X",                           &fqdn_universe, 240 },
862         { "unknown-241", "X",                           &fqdn_universe, 241 },
863         { "unknown-242", "X",                           &fqdn_universe, 242 },
864         { "unknown-243", "X",                           &fqdn_universe, 243 },
865         { "unknown-244", "X",                           &fqdn_universe, 244 },
866         { "unknown-245", "X",                           &fqdn_universe, 245 },
867         { "unknown-246", "X",                           &fqdn_universe, 246 },
868         { "unknown-247", "X",                           &fqdn_universe, 247 },
869         { "unknown-248", "X",                           &fqdn_universe, 248 },
870         { "unknown-249", "X",                           &fqdn_universe, 249 },
871         { "unknown-250", "X",                           &fqdn_universe, 250 },
872         { "unknown-251", "X",                           &fqdn_universe, 251 },
873         { "unknown-252", "X",                           &fqdn_universe, 252 },
874         { "unknown-253", "X",                           &fqdn_universe, 253 },
875         { "unknown-254", "X",                           &fqdn_universe, 254 },
876         { "unknown-end", "e",                           &fqdn_universe, 255 },
877 };
878
879 const char *hardware_types [] = {
880         "unknown-0",
881         "ethernet",
882         "unknown-2",
883         "unknown-3",
884         "unknown-4",
885         "unknown-5",
886         "token-ring",
887         "unknown-7",
888         "fddi",
889         "unknown-9",
890         "unknown-10",
891         "unknown-11",
892         "unknown-12",
893         "unknown-13",
894         "unknown-14",
895         "unknown-15",
896         "unknown-16",
897         "unknown-17",
898         "unknown-18",
899         "unknown-19",
900         "unknown-20",
901         "unknown-21",
902         "unknown-22",
903         "unknown-23",
904         "unknown-24",
905         "unknown-25",
906         "unknown-26",
907         "unknown-27",
908         "unknown-28",
909         "unknown-29",
910         "unknown-30",
911         "unknown-31",
912         "unknown-32",
913         "unknown-33",
914         "unknown-34",
915         "unknown-35",
916         "unknown-36",
917         "unknown-37",
918         "unknown-38",
919         "unknown-39",
920         "unknown-40",
921         "unknown-41",
922         "unknown-42",
923         "unknown-43",
924         "unknown-44",
925         "unknown-45",
926         "unknown-46",
927         "unknown-47",
928         "unknown-48",
929         "unknown-49",
930         "unknown-50",
931         "unknown-51",
932         "unknown-52",
933         "unknown-53",
934         "unknown-54",
935         "unknown-55",
936         "unknown-56",
937         "unknown-57",
938         "unknown-58",
939         "unknown-59",
940         "unknown-60",
941         "unknown-61",
942         "unknown-62",
943         "unknown-63",
944         "unknown-64",
945         "unknown-65",
946         "unknown-66",
947         "unknown-67",
948         "unknown-68",
949         "unknown-69",
950         "unknown-70",
951         "unknown-71",
952         "unknown-72",
953         "unknown-73",
954         "unknown-74",
955         "unknown-75",
956         "unknown-76",
957         "unknown-77",
958         "unknown-78",
959         "unknown-79",
960         "unknown-80",
961         "unknown-81",
962         "unknown-82",
963         "unknown-83",
964         "unknown-84",
965         "unknown-85",
966         "unknown-86",
967         "unknown-87",
968         "unknown-88",
969         "unknown-89",
970         "unknown-90",
971         "unknown-91",
972         "unknown-92",
973         "unknown-93",
974         "unknown-94",
975         "unknown-95",
976         "unknown-96",
977         "unknown-97",
978         "unknown-98",
979         "unknown-99",
980         "unknown-100",
981         "unknown-101",
982         "unknown-102",
983         "unknown-103",
984         "unknown-104",
985         "unknown-105",
986         "unknown-106",
987         "unknown-107",
988         "unknown-108",
989         "unknown-109",
990         "unknown-110",
991         "unknown-111",
992         "unknown-112",
993         "unknown-113",
994         "unknown-114",
995         "unknown-115",
996         "unknown-116",
997         "unknown-117",
998         "unknown-118",
999         "unknown-119",
1000         "unknown-120",
1001         "unknown-121",
1002         "unknown-122",
1003         "unknown-123",
1004         "unknown-124",
1005         "unknown-125",
1006         "unknown-126",
1007         "unknown-127",
1008         "unknown-128",
1009         "unknown-129",
1010         "unknown-130",
1011         "unknown-131",
1012         "unknown-132",
1013         "unknown-133",
1014         "unknown-134",
1015         "unknown-135",
1016         "unknown-136",
1017         "unknown-137",
1018         "unknown-138",
1019         "unknown-139",
1020         "unknown-140",
1021         "unknown-141",
1022         "unknown-142",
1023         "unknown-143",
1024         "unknown-144",
1025         "unknown-145",
1026         "unknown-146",
1027         "unknown-147",
1028         "unknown-148",
1029         "unknown-149",
1030         "unknown-150",
1031         "unknown-151",
1032         "unknown-152",
1033         "unknown-153",
1034         "unknown-154",
1035         "unknown-155",
1036         "unknown-156",
1037         "unknown-157",
1038         "unknown-158",
1039         "unknown-159",
1040         "unknown-160",
1041         "unknown-161",
1042         "unknown-162",
1043         "unknown-163",
1044         "unknown-164",
1045         "unknown-165",
1046         "unknown-166",
1047         "unknown-167",
1048         "unknown-168",
1049         "unknown-169",
1050         "unknown-170",
1051         "unknown-171",
1052         "unknown-172",
1053         "unknown-173",
1054         "unknown-174",
1055         "unknown-175",
1056         "unknown-176",
1057         "unknown-177",
1058         "unknown-178",
1059         "unknown-179",
1060         "unknown-180",
1061         "unknown-181",
1062         "unknown-182",
1063         "unknown-183",
1064         "unknown-184",
1065         "unknown-185",
1066         "unknown-186",
1067         "unknown-187",
1068         "unknown-188",
1069         "unknown-189",
1070         "unknown-190",
1071         "unknown-191",
1072         "unknown-192",
1073         "unknown-193",
1074         "unknown-194",
1075         "unknown-195",
1076         "unknown-196",
1077         "unknown-197",
1078         "unknown-198",
1079         "unknown-199",
1080         "unknown-200",
1081         "unknown-201",
1082         "unknown-202",
1083         "unknown-203",
1084         "unknown-204",
1085         "unknown-205",
1086         "unknown-206",
1087         "unknown-207",
1088         "unknown-208",
1089         "unknown-209",
1090         "unknown-210",
1091         "unknown-211",
1092         "unknown-212",
1093         "unknown-213",
1094         "unknown-214",
1095         "unknown-215",
1096         "unknown-216",
1097         "unknown-217",
1098         "unknown-218",
1099         "unknown-219",
1100         "unknown-220",
1101         "unknown-221",
1102         "unknown-222",
1103         "unknown-223",
1104         "unknown-224",
1105         "unknown-225",
1106         "unknown-226",
1107         "unknown-227",
1108         "unknown-228",
1109         "unknown-229",
1110         "unknown-230",
1111         "unknown-231",
1112         "unknown-232",
1113         "unknown-233",
1114         "unknown-234",
1115         "unknown-235",
1116         "unknown-236",
1117         "unknown-237",
1118         "unknown-238",
1119         "unknown-239",
1120         "unknown-240",
1121         "unknown-241",
1122         "unknown-242",
1123         "unknown-243",
1124         "unknown-244",
1125         "unknown-245",
1126         "unknown-246",
1127         "unknown-247",
1128         "unknown-248",
1129         "unknown-249",
1130         "unknown-250",
1131         "unknown-251",
1132         "unknown-252",
1133         "unknown-253",
1134         "unknown-254",
1135         "unknown-255" };
1136
1137 universe_hash_t *universe_hash;
1138 struct universe **universes;
1139 int universe_count, universe_max;
1140
1141 /* Universe containing names of configuration options, which, rather than
1142    writing "option universe-name.option-name ...;", can be set by writing
1143    "option-name ...;". */
1144
1145 struct universe *config_universe;
1146
1147 void initialize_common_option_spaces()
1148 {
1149         int i;
1150
1151         universe_max = 10;
1152         universes = ((struct universe **)
1153                      dmalloc (universe_max * sizeof (struct universe *), MDL));
1154         if (!universes)
1155                 log_fatal ("Can't allocate option space table.");
1156         memset (universes, 0, universe_max * sizeof (struct universe *));
1157
1158         /* Set up the DHCP option universe... */
1159         dhcp_universe.name = "dhcp";
1160         dhcp_universe.lookup_func = lookup_hashed_option;
1161         dhcp_universe.option_state_dereference =
1162                 hashed_option_state_dereference;
1163         dhcp_universe.save_func = save_hashed_option;
1164         dhcp_universe.delete_func = delete_hashed_option;
1165         dhcp_universe.encapsulate = hashed_option_space_encapsulate;
1166         dhcp_universe.foreach = hashed_option_space_foreach;
1167         dhcp_universe.decode = parse_option_buffer;
1168         dhcp_universe.length_size = 1;
1169         dhcp_universe.tag_size = 1;
1170         dhcp_universe.store_tag = putUChar;
1171         dhcp_universe.store_length = putUChar;
1172         dhcp_universe.index = universe_count++;
1173         universes [dhcp_universe.index] = &dhcp_universe;
1174         if (!option_new_hash (&dhcp_universe.hash, 1, MDL))
1175                 log_fatal ("Can't allocate dhcp option hash table.");
1176         for (i = 0; i < 256; i++) {
1177                 dhcp_universe.options [i] = &dhcp_options [i];
1178                 option_hash_add (dhcp_universe.hash,
1179                                  dhcp_options [i].name, 0,
1180                                  &dhcp_options [i], MDL);
1181         }
1182
1183         /* Set up the Novell option universe (for option 63)... */
1184         nwip_universe.name = "nwip";
1185         nwip_universe.lookup_func = lookup_linked_option;
1186         nwip_universe.option_state_dereference =
1187                 linked_option_state_dereference;
1188         nwip_universe.save_func = save_linked_option;
1189         nwip_universe.delete_func = delete_linked_option;
1190         nwip_universe.encapsulate = nwip_option_space_encapsulate;
1191         nwip_universe.foreach = linked_option_space_foreach;
1192         nwip_universe.decode = parse_option_buffer;
1193         nwip_universe.length_size = 1;
1194         nwip_universe.tag_size = 1;
1195         nwip_universe.store_tag = putUChar;
1196         nwip_universe.store_length = putUChar;
1197         nwip_universe.enc_opt = &dhcp_options [DHO_NWIP_SUBOPTIONS];
1198         nwip_universe.index = universe_count++;
1199         universes [nwip_universe.index] = &nwip_universe;
1200         option_new_hash (&nwip_universe.hash, 1, MDL);
1201         if (!nwip_universe.hash)
1202                 log_fatal ("Can't allocate nwip option hash table.");
1203         for (i = 0; i < 256; i++) {
1204                 nwip_universe.options [i] = &nwip_options [i];
1205                 option_hash_add (nwip_universe.hash,
1206                                  nwip_options [i].name, 0,
1207                                  &nwip_options [i], MDL);
1208         }
1209
1210         /* Set up the FQDN option universe... */
1211         fqdn_universe.name = "fqdn";
1212         fqdn_universe.lookup_func = lookup_linked_option;
1213         fqdn_universe.option_state_dereference =
1214                 linked_option_state_dereference;
1215         fqdn_universe.save_func = save_linked_option;
1216         fqdn_universe.delete_func = delete_linked_option;
1217         fqdn_universe.encapsulate = fqdn_option_space_encapsulate;
1218         fqdn_universe.foreach = linked_option_space_foreach;
1219         fqdn_universe.decode = fqdn_universe_decode;
1220         fqdn_universe.length_size = 1;
1221         fqdn_universe.tag_size = 1;
1222         fqdn_universe.store_tag = putUChar;
1223         fqdn_universe.store_length = putUChar;
1224         fqdn_universe.index = universe_count++;
1225         fqdn_universe.enc_opt = &dhcp_options [DHO_FQDN];
1226         universes [fqdn_universe.index] = &fqdn_universe;
1227         option_new_hash (&fqdn_universe.hash, 1, MDL);
1228         if (!fqdn_universe.hash)
1229                 log_fatal ("Can't allocate fqdn option hash table.");
1230         for (i = 0; i < 256; i++) {
1231                 fqdn_universe.options [i] = &fqdn_options [i];
1232                 option_hash_add (fqdn_universe.hash,
1233                                  fqdn_options [i].name, 0,
1234                                  &fqdn_options [i], MDL);
1235         }
1236
1237         /* Set up the hash of universes. */
1238         universe_new_hash (&universe_hash, 1, MDL);
1239         universe_hash_add (universe_hash,
1240                            dhcp_universe.name, 0,
1241                            &dhcp_universe, MDL);
1242         universe_hash_add (universe_hash,
1243                            nwip_universe.name, 0,
1244                            &nwip_universe, MDL);
1245         universe_hash_add (universe_hash,
1246                            fqdn_universe.name, 0,
1247                            &fqdn_universe, MDL);
1248 }