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