Blame


1 87a52e04 2005-12-26 devnull #include <u.h>
2 87a52e04 2005-12-26 devnull #include <libc.h>
3 87a52e04 2005-12-26 devnull #include <ip.h>
4 87a52e04 2005-12-26 devnull #include "dat.h"
5 87a52e04 2005-12-26 devnull #include "protos.h"
6 87a52e04 2005-12-26 devnull
7 87a52e04 2005-12-26 devnull enum
8 87a52e04 2005-12-26 devnull {
9 87a52e04 2005-12-26 devnull Maxoptlen= 312-4,
10 87a52e04 2005-12-26 devnull
11 87a52e04 2005-12-26 devnull /* dhcp types */
12 87a52e04 2005-12-26 devnull Discover= 1,
13 87a52e04 2005-12-26 devnull Offer= 2,
14 87a52e04 2005-12-26 devnull Request= 3,
15 87a52e04 2005-12-26 devnull Decline= 4,
16 87a52e04 2005-12-26 devnull Ack= 5,
17 87a52e04 2005-12-26 devnull Nak= 6,
18 87a52e04 2005-12-26 devnull Release= 7,
19 87a52e04 2005-12-26 devnull Inform= 8,
20 87a52e04 2005-12-26 devnull
21 87a52e04 2005-12-26 devnull /* bootp option types */
22 87a52e04 2005-12-26 devnull OBend= 255,
23 87a52e04 2005-12-26 devnull OBpad= 0,
24 87a52e04 2005-12-26 devnull OBmask= 1,
25 87a52e04 2005-12-26 devnull OBtimeoff= 2,
26 87a52e04 2005-12-26 devnull OBrouter= 3,
27 87a52e04 2005-12-26 devnull OBtimeserver= 4,
28 87a52e04 2005-12-26 devnull OBnameserver= 5,
29 87a52e04 2005-12-26 devnull OBdnserver= 6,
30 87a52e04 2005-12-26 devnull OBlogserver= 7,
31 87a52e04 2005-12-26 devnull OBcookieserver= 8,
32 87a52e04 2005-12-26 devnull OBlprserver= 9,
33 87a52e04 2005-12-26 devnull OBimpressserver= 10,
34 87a52e04 2005-12-26 devnull OBrlserver= 11,
35 87a52e04 2005-12-26 devnull OBhostname= 12, /* 0xc0 */
36 87a52e04 2005-12-26 devnull OBbflen= 13,
37 87a52e04 2005-12-26 devnull OBdumpfile= 14,
38 87a52e04 2005-12-26 devnull OBdomainname= 15,
39 87a52e04 2005-12-26 devnull OBswapserver= 16, /* 0x10 */
40 87a52e04 2005-12-26 devnull OBrootpath= 17,
41 87a52e04 2005-12-26 devnull OBextpath= 18,
42 87a52e04 2005-12-26 devnull OBipforward= 19,
43 87a52e04 2005-12-26 devnull OBnonlocal= 20,
44 87a52e04 2005-12-26 devnull OBpolicyfilter= 21,
45 87a52e04 2005-12-26 devnull OBmaxdatagram= 22,
46 87a52e04 2005-12-26 devnull OBttl= 23,
47 87a52e04 2005-12-26 devnull OBpathtimeout= 24,
48 87a52e04 2005-12-26 devnull OBpathplateau= 25,
49 87a52e04 2005-12-26 devnull OBmtu= 26,
50 87a52e04 2005-12-26 devnull OBsubnetslocal= 27,
51 87a52e04 2005-12-26 devnull OBbaddr= 28,
52 87a52e04 2005-12-26 devnull OBdiscovermask= 29,
53 87a52e04 2005-12-26 devnull OBsupplymask= 30,
54 87a52e04 2005-12-26 devnull OBdiscoverrouter= 31,
55 87a52e04 2005-12-26 devnull OBrsserver= 32, /* 0x20 */
56 87a52e04 2005-12-26 devnull OBstaticroutes= 33,
57 87a52e04 2005-12-26 devnull OBtrailerencap= 34,
58 87a52e04 2005-12-26 devnull OBarptimeout= 35,
59 87a52e04 2005-12-26 devnull OBetherencap= 36,
60 87a52e04 2005-12-26 devnull OBtcpttl= 37,
61 87a52e04 2005-12-26 devnull OBtcpka= 38,
62 87a52e04 2005-12-26 devnull OBtcpkag= 39,
63 87a52e04 2005-12-26 devnull OBnisdomain= 40,
64 87a52e04 2005-12-26 devnull OBniserver= 41,
65 87a52e04 2005-12-26 devnull OBntpserver= 42,
66 87a52e04 2005-12-26 devnull OBvendorinfo= 43, /* 0x2b */
67 87a52e04 2005-12-26 devnull OBnetbiosns= 44,
68 87a52e04 2005-12-26 devnull OBnetbiosdds= 45,
69 87a52e04 2005-12-26 devnull OBnetbiostype= 46,
70 87a52e04 2005-12-26 devnull OBnetbiosscope= 47,
71 87a52e04 2005-12-26 devnull OBxfontserver= 48, /* 0x30 */
72 87a52e04 2005-12-26 devnull OBxdispmanager= 49,
73 87a52e04 2005-12-26 devnull OBnisplusdomain= 64, /* 0x40 */
74 87a52e04 2005-12-26 devnull OBnisplusserver= 65,
75 87a52e04 2005-12-26 devnull OBhomeagent= 68,
76 87a52e04 2005-12-26 devnull OBsmtpserver= 69,
77 87a52e04 2005-12-26 devnull OBpop3server= 70,
78 87a52e04 2005-12-26 devnull OBnntpserver= 71,
79 87a52e04 2005-12-26 devnull OBwwwserver= 72,
80 87a52e04 2005-12-26 devnull OBfingerserver= 73,
81 87a52e04 2005-12-26 devnull OBircserver= 74,
82 87a52e04 2005-12-26 devnull OBstserver= 75,
83 87a52e04 2005-12-26 devnull OBstdaserver= 76,
84 87a52e04 2005-12-26 devnull
85 87a52e04 2005-12-26 devnull /* dhcp options */
86 87a52e04 2005-12-26 devnull ODipaddr= 50, /* 0x32 */
87 87a52e04 2005-12-26 devnull ODlease= 51,
88 87a52e04 2005-12-26 devnull ODoverload= 52,
89 87a52e04 2005-12-26 devnull ODtype= 53, /* 0x35 */
90 87a52e04 2005-12-26 devnull ODserverid= 54, /* 0x36 */
91 87a52e04 2005-12-26 devnull ODparams= 55, /* 0x37 */
92 87a52e04 2005-12-26 devnull ODmessage= 56,
93 87a52e04 2005-12-26 devnull ODmaxmsg= 57,
94 87a52e04 2005-12-26 devnull ODrenewaltime= 58,
95 87a52e04 2005-12-26 devnull ODrebindingtime= 59,
96 87a52e04 2005-12-26 devnull ODvendorclass= 60,
97 87a52e04 2005-12-26 devnull ODclientid= 61, /* 0x3d */
98 87a52e04 2005-12-26 devnull ODtftpserver= 66,
99 87a52e04 2005-12-26 devnull ODbootfile= 67,
100 87a52e04 2005-12-26 devnull
101 87a52e04 2005-12-26 devnull /* plan9 vendor info options */
102 87a52e04 2005-12-26 devnull OP9fs= 128, // plan9 file servers
103 87a52e04 2005-12-26 devnull OP9auth= 129, // plan9 auth servers
104 87a52e04 2005-12-26 devnull };
105 87a52e04 2005-12-26 devnull
106 87a52e04 2005-12-26 devnull static void
107 87a52e04 2005-12-26 devnull p_compile(Filter *f)
108 87a52e04 2005-12-26 devnull {
109 a38a1836 2006-02-14 devnull sysfatal("unknown dhcp field: %s", f->s);
110 87a52e04 2005-12-26 devnull }
111 87a52e04 2005-12-26 devnull
112 87a52e04 2005-12-26 devnull /*
113 87a52e04 2005-12-26 devnull * convert a byte array to hex
114 87a52e04 2005-12-26 devnull */
115 87a52e04 2005-12-26 devnull static char
116 87a52e04 2005-12-26 devnull hex(int x)
117 87a52e04 2005-12-26 devnull {
118 87a52e04 2005-12-26 devnull if(x < 10)
119 87a52e04 2005-12-26 devnull return x + '0';
120 87a52e04 2005-12-26 devnull return x - 10 + 'a';
121 87a52e04 2005-12-26 devnull }
122 87a52e04 2005-12-26 devnull static char*
123 87a52e04 2005-12-26 devnull phex(char *p, char *e, char *tag, uchar *o, int n)
124 87a52e04 2005-12-26 devnull {
125 87a52e04 2005-12-26 devnull p = seprint(p, e, "%s=", tag);
126 87a52e04 2005-12-26 devnull
127 87a52e04 2005-12-26 devnull for(; p+2 < e && n > 0; n--){
128 87a52e04 2005-12-26 devnull *p++ = hex(*o>>4);
129 87a52e04 2005-12-26 devnull *p++ = hex(*o & 0xf);
130 87a52e04 2005-12-26 devnull o++;
131 87a52e04 2005-12-26 devnull }
132 87a52e04 2005-12-26 devnull return p;
133 87a52e04 2005-12-26 devnull }
134 87a52e04 2005-12-26 devnull
135 87a52e04 2005-12-26 devnull static char*
136 87a52e04 2005-12-26 devnull pstring(char *p, char *e, char *tag, uchar *o, int n)
137 87a52e04 2005-12-26 devnull {
138 87a52e04 2005-12-26 devnull char msg[256];
139 87a52e04 2005-12-26 devnull
140 87a52e04 2005-12-26 devnull if(n > sizeof msg - 1)
141 87a52e04 2005-12-26 devnull n = sizeof msg - 1;
142 87a52e04 2005-12-26 devnull memmove(msg, o, n);
143 87a52e04 2005-12-26 devnull msg[n] = 0;
144 87a52e04 2005-12-26 devnull return seprint(p, e, "%s=%s", tag, msg);
145 87a52e04 2005-12-26 devnull }
146 87a52e04 2005-12-26 devnull
147 87a52e04 2005-12-26 devnull static char*
148 87a52e04 2005-12-26 devnull pint(char *p, char *e, char *tag, uchar *o, int n)
149 87a52e04 2005-12-26 devnull {
150 87a52e04 2005-12-26 devnull int x;
151 87a52e04 2005-12-26 devnull
152 87a52e04 2005-12-26 devnull x = *(char*)o++;
153 87a52e04 2005-12-26 devnull for(; n > 1; n--)
154 87a52e04 2005-12-26 devnull x = (x<<8)|*o++;
155 87a52e04 2005-12-26 devnull return seprint(p, e, "%s=%d", tag, x);
156 87a52e04 2005-12-26 devnull }
157 87a52e04 2005-12-26 devnull
158 87a52e04 2005-12-26 devnull static char*
159 87a52e04 2005-12-26 devnull puint(char *p, char *e, char *tag, uchar *o, int n)
160 87a52e04 2005-12-26 devnull {
161 87a52e04 2005-12-26 devnull uint x;
162 87a52e04 2005-12-26 devnull
163 87a52e04 2005-12-26 devnull x = *o++;
164 87a52e04 2005-12-26 devnull for(; n > 1; n--)
165 87a52e04 2005-12-26 devnull x = (x<<8)|*o++;
166 87a52e04 2005-12-26 devnull return seprint(p, e, "%s=%ud", tag, x);
167 87a52e04 2005-12-26 devnull }
168 87a52e04 2005-12-26 devnull
169 87a52e04 2005-12-26 devnull static char*
170 87a52e04 2005-12-26 devnull pserver(char *p, char *e, char *tag, uchar *o, int n)
171 87a52e04 2005-12-26 devnull {
172 87a52e04 2005-12-26 devnull p = seprint(p, e, "%s=(", tag);
173 87a52e04 2005-12-26 devnull while(n >= 4){
174 87a52e04 2005-12-26 devnull p = seprint(p, e, " %V", o);
175 87a52e04 2005-12-26 devnull n -= 4;
176 87a52e04 2005-12-26 devnull o += 4;
177 87a52e04 2005-12-26 devnull }
178 87a52e04 2005-12-26 devnull p = seprint(p, e, ")");
179 87a52e04 2005-12-26 devnull return p;
180 87a52e04 2005-12-26 devnull }
181 87a52e04 2005-12-26 devnull
182 87a52e04 2005-12-26 devnull static char *dhcptype[256] =
183 87a52e04 2005-12-26 devnull {
184 87a52e04 2005-12-26 devnull [Discover] "Discover",
185 87a52e04 2005-12-26 devnull [Offer] "Offer",
186 87a52e04 2005-12-26 devnull [Request] "Request",
187 87a52e04 2005-12-26 devnull [Decline] "Decline",
188 87a52e04 2005-12-26 devnull [Ack] "Ack",
189 87a52e04 2005-12-26 devnull [Nak] "Nak",
190 87a52e04 2005-12-26 devnull [Release] "Release",
191 87a52e04 2005-12-26 devnull [Inform] "Inform",
192 87a52e04 2005-12-26 devnull };
193 87a52e04 2005-12-26 devnull
194 87a52e04 2005-12-26 devnull
195 87a52e04 2005-12-26 devnull static char*
196 87a52e04 2005-12-26 devnull ptype(char *p, char *e, uchar val)
197 87a52e04 2005-12-26 devnull {
198 87a52e04 2005-12-26 devnull char *x;
199 87a52e04 2005-12-26 devnull
200 87a52e04 2005-12-26 devnull x = dhcptype[val];
201 87a52e04 2005-12-26 devnull if(x != nil)
202 87a52e04 2005-12-26 devnull return seprint(p, e, "t=%s", x);
203 87a52e04 2005-12-26 devnull else
204 87a52e04 2005-12-26 devnull return seprint(p, e, "t=%d", val);
205 87a52e04 2005-12-26 devnull }
206 87a52e04 2005-12-26 devnull
207 87a52e04 2005-12-26 devnull static int
208 87a52e04 2005-12-26 devnull p_seprint(Msg *m)
209 87a52e04 2005-12-26 devnull {
210 87a52e04 2005-12-26 devnull int i, n, code;
211 87a52e04 2005-12-26 devnull uchar *o, *ps;
212 87a52e04 2005-12-26 devnull char *p, *e;
213 87a52e04 2005-12-26 devnull char msg[64];
214 87a52e04 2005-12-26 devnull
215 87a52e04 2005-12-26 devnull /* no next proto */
216 87a52e04 2005-12-26 devnull m->pr = nil;
217 87a52e04 2005-12-26 devnull
218 87a52e04 2005-12-26 devnull p = m->p;
219 87a52e04 2005-12-26 devnull e = m->e;
220 87a52e04 2005-12-26 devnull ps = m->ps;
221 87a52e04 2005-12-26 devnull
222 87a52e04 2005-12-26 devnull while(ps < m->pe){
223 87a52e04 2005-12-26 devnull code = *ps++;
224 87a52e04 2005-12-26 devnull if(code == 255)
225 87a52e04 2005-12-26 devnull break;
226 87a52e04 2005-12-26 devnull if(code == 0)
227 87a52e04 2005-12-26 devnull continue;
228 87a52e04 2005-12-26 devnull
229 87a52e04 2005-12-26 devnull /* ignore anything that's too long */
230 87a52e04 2005-12-26 devnull n = *ps++;
231 87a52e04 2005-12-26 devnull o = ps;
232 87a52e04 2005-12-26 devnull ps += n;
233 87a52e04 2005-12-26 devnull if(ps > m->pe)
234 87a52e04 2005-12-26 devnull break;
235 87a52e04 2005-12-26 devnull
236 87a52e04 2005-12-26 devnull switch(code){
237 87a52e04 2005-12-26 devnull case ODipaddr: /* requested ip address */
238 87a52e04 2005-12-26 devnull p = pserver(p, e, "ipaddr", o, n);
239 87a52e04 2005-12-26 devnull break;
240 87a52e04 2005-12-26 devnull case ODlease: /* requested lease time */
241 87a52e04 2005-12-26 devnull p = pint(p, e, "lease", o, n);
242 87a52e04 2005-12-26 devnull break;
243 87a52e04 2005-12-26 devnull case ODtype:
244 87a52e04 2005-12-26 devnull p = ptype(p, e, *o);
245 87a52e04 2005-12-26 devnull break;
246 87a52e04 2005-12-26 devnull case ODserverid:
247 87a52e04 2005-12-26 devnull p = pserver(p, e, "serverid", o, n);
248 87a52e04 2005-12-26 devnull break;
249 87a52e04 2005-12-26 devnull case ODmessage:
250 87a52e04 2005-12-26 devnull p = pstring(p, e, "message", o, n);
251 87a52e04 2005-12-26 devnull break;
252 87a52e04 2005-12-26 devnull case ODmaxmsg:
253 87a52e04 2005-12-26 devnull p = puint(p, e, "maxmsg", o, n);
254 87a52e04 2005-12-26 devnull break;
255 87a52e04 2005-12-26 devnull case ODclientid:
256 87a52e04 2005-12-26 devnull p = phex(p, e, "clientid", o, n);
257 87a52e04 2005-12-26 devnull break;
258 87a52e04 2005-12-26 devnull case ODparams:
259 87a52e04 2005-12-26 devnull p = seprint(p, e, " requested=(");
260 87a52e04 2005-12-26 devnull for(i = 0; i < n; i++){
261 87a52e04 2005-12-26 devnull if(i != 0)
262 87a52e04 2005-12-26 devnull p = seprint(p, e, " ");
263 87a52e04 2005-12-26 devnull p = seprint(p, e, "%ud", o[i]);
264 87a52e04 2005-12-26 devnull }
265 87a52e04 2005-12-26 devnull p = seprint(p, e, ")");
266 87a52e04 2005-12-26 devnull break;
267 87a52e04 2005-12-26 devnull case ODvendorclass:
268 87a52e04 2005-12-26 devnull p = pstring(p, e, "vendorclass", o, n);
269 87a52e04 2005-12-26 devnull break;
270 87a52e04 2005-12-26 devnull case OBmask:
271 87a52e04 2005-12-26 devnull p = pserver(p, e, "mask", o, n);
272 87a52e04 2005-12-26 devnull break;
273 87a52e04 2005-12-26 devnull case OBtimeoff:
274 87a52e04 2005-12-26 devnull p = pint(p, e, "timeoff", o, n);
275 87a52e04 2005-12-26 devnull break;
276 87a52e04 2005-12-26 devnull case OBrouter:
277 87a52e04 2005-12-26 devnull p = pserver(p, e, "router", o, n);
278 87a52e04 2005-12-26 devnull break;
279 87a52e04 2005-12-26 devnull case OBtimeserver:
280 87a52e04 2005-12-26 devnull p = pserver(p, e, "timesrv", o, n);
281 87a52e04 2005-12-26 devnull break;
282 87a52e04 2005-12-26 devnull case OBnameserver:
283 87a52e04 2005-12-26 devnull p = pserver(p, e, "namesrv", o, n);
284 87a52e04 2005-12-26 devnull break;
285 87a52e04 2005-12-26 devnull case OBdnserver:
286 87a52e04 2005-12-26 devnull p = pserver(p, e, "dnssrv", o, n);
287 87a52e04 2005-12-26 devnull break;
288 87a52e04 2005-12-26 devnull case OBlogserver:
289 87a52e04 2005-12-26 devnull p = pserver(p, e, "logsrv", o, n);
290 87a52e04 2005-12-26 devnull break;
291 87a52e04 2005-12-26 devnull case OBcookieserver:
292 87a52e04 2005-12-26 devnull p = pserver(p, e, "cookiesrv", o, n);
293 87a52e04 2005-12-26 devnull break;
294 87a52e04 2005-12-26 devnull case OBlprserver:
295 87a52e04 2005-12-26 devnull p = pserver(p, e, "lprsrv", o, n);
296 87a52e04 2005-12-26 devnull break;
297 87a52e04 2005-12-26 devnull case OBimpressserver:
298 87a52e04 2005-12-26 devnull p = pserver(p, e, "impresssrv", o, n);
299 87a52e04 2005-12-26 devnull break;
300 87a52e04 2005-12-26 devnull case OBrlserver:
301 87a52e04 2005-12-26 devnull p = pserver(p, e, "rlsrv", o, n);
302 87a52e04 2005-12-26 devnull break;
303 87a52e04 2005-12-26 devnull case OBhostname:
304 87a52e04 2005-12-26 devnull p = pstring(p, e, "hostname", o, n);
305 87a52e04 2005-12-26 devnull break;
306 87a52e04 2005-12-26 devnull case OBbflen:
307 87a52e04 2005-12-26 devnull break;
308 87a52e04 2005-12-26 devnull case OBdumpfile:
309 87a52e04 2005-12-26 devnull p = pstring(p, e, "dumpfile", o, n);
310 87a52e04 2005-12-26 devnull break;
311 87a52e04 2005-12-26 devnull case OBdomainname:
312 87a52e04 2005-12-26 devnull p = pstring(p, e, "domname", o, n);
313 87a52e04 2005-12-26 devnull break;
314 87a52e04 2005-12-26 devnull case OBswapserver:
315 87a52e04 2005-12-26 devnull p = pserver(p, e, "swapsrv", o, n);
316 87a52e04 2005-12-26 devnull break;
317 87a52e04 2005-12-26 devnull case OBrootpath:
318 87a52e04 2005-12-26 devnull p = pstring(p, e, "rootpath", o, n);
319 87a52e04 2005-12-26 devnull break;
320 87a52e04 2005-12-26 devnull case OBextpath:
321 87a52e04 2005-12-26 devnull p = pstring(p, e, "extpath", o, n);
322 87a52e04 2005-12-26 devnull break;
323 87a52e04 2005-12-26 devnull case OBipforward:
324 87a52e04 2005-12-26 devnull p = phex(p, e, "ipforward", o, n);
325 87a52e04 2005-12-26 devnull break;
326 87a52e04 2005-12-26 devnull case OBnonlocal:
327 87a52e04 2005-12-26 devnull p = phex(p, e, "nonlocal", o, n);
328 87a52e04 2005-12-26 devnull break;
329 87a52e04 2005-12-26 devnull case OBpolicyfilter:
330 87a52e04 2005-12-26 devnull p = phex(p, e, "policyfilter", o, n);
331 87a52e04 2005-12-26 devnull break;
332 87a52e04 2005-12-26 devnull case OBmaxdatagram:
333 87a52e04 2005-12-26 devnull p = phex(p, e, "maxdatagram", o, n);
334 87a52e04 2005-12-26 devnull break;
335 87a52e04 2005-12-26 devnull case OBttl:
336 87a52e04 2005-12-26 devnull p = puint(p, e, "ttl", o, n);
337 87a52e04 2005-12-26 devnull break;
338 87a52e04 2005-12-26 devnull case OBpathtimeout:
339 87a52e04 2005-12-26 devnull p = puint(p, e, "pathtimeout", o, n);
340 87a52e04 2005-12-26 devnull break;
341 87a52e04 2005-12-26 devnull case OBpathplateau:
342 87a52e04 2005-12-26 devnull p = phex(p, e, "pathplateau", o, n);
343 87a52e04 2005-12-26 devnull break;
344 87a52e04 2005-12-26 devnull case OBmtu:
345 87a52e04 2005-12-26 devnull p = puint(p, e, "mtu", o, n);
346 87a52e04 2005-12-26 devnull break;
347 87a52e04 2005-12-26 devnull case OBsubnetslocal:
348 87a52e04 2005-12-26 devnull p = pserver(p, e, "subnet", o, n);
349 87a52e04 2005-12-26 devnull break;
350 87a52e04 2005-12-26 devnull case OBbaddr:
351 87a52e04 2005-12-26 devnull p = pserver(p, e, "baddr", o, n);
352 87a52e04 2005-12-26 devnull break;
353 87a52e04 2005-12-26 devnull case OBdiscovermask:
354 87a52e04 2005-12-26 devnull p = pserver(p, e, "discovermsak", o, n);
355 87a52e04 2005-12-26 devnull break;
356 87a52e04 2005-12-26 devnull case OBsupplymask:
357 87a52e04 2005-12-26 devnull p = pserver(p, e, "rousupplymaskter", o, n);
358 87a52e04 2005-12-26 devnull break;
359 87a52e04 2005-12-26 devnull case OBdiscoverrouter:
360 87a52e04 2005-12-26 devnull p = pserver(p, e, "discoverrouter", o, n);
361 87a52e04 2005-12-26 devnull break;
362 87a52e04 2005-12-26 devnull case OBrsserver:
363 87a52e04 2005-12-26 devnull p = pserver(p, e, "rsrouter", o, n);
364 87a52e04 2005-12-26 devnull break;
365 87a52e04 2005-12-26 devnull case OBstaticroutes:
366 87a52e04 2005-12-26 devnull p = phex(p, e, "staticroutes", o, n);
367 87a52e04 2005-12-26 devnull break;
368 87a52e04 2005-12-26 devnull case OBtrailerencap:
369 87a52e04 2005-12-26 devnull p = phex(p, e, "trailerencap", o, n);
370 87a52e04 2005-12-26 devnull break;
371 87a52e04 2005-12-26 devnull case OBarptimeout:
372 87a52e04 2005-12-26 devnull p = puint(p, e, "arptimeout", o, n);
373 87a52e04 2005-12-26 devnull break;
374 87a52e04 2005-12-26 devnull case OBetherencap:
375 87a52e04 2005-12-26 devnull p = phex(p, e, "etherencap", o, n);
376 87a52e04 2005-12-26 devnull break;
377 87a52e04 2005-12-26 devnull case OBtcpttl:
378 87a52e04 2005-12-26 devnull p = puint(p, e, "tcpttl", o, n);
379 87a52e04 2005-12-26 devnull break;
380 87a52e04 2005-12-26 devnull case OBtcpka:
381 87a52e04 2005-12-26 devnull p = puint(p, e, "tcpka", o, n);
382 87a52e04 2005-12-26 devnull break;
383 87a52e04 2005-12-26 devnull case OBtcpkag:
384 87a52e04 2005-12-26 devnull p = phex(p, e, "tcpkag", o, n);
385 87a52e04 2005-12-26 devnull break;
386 87a52e04 2005-12-26 devnull case OBnisdomain:
387 87a52e04 2005-12-26 devnull p = pstring(p, e, "nisdomain", o, n);
388 87a52e04 2005-12-26 devnull break;
389 87a52e04 2005-12-26 devnull case OBniserver:
390 87a52e04 2005-12-26 devnull p = pserver(p, e, "nisrv", o, n);
391 87a52e04 2005-12-26 devnull break;
392 87a52e04 2005-12-26 devnull case OBntpserver:
393 87a52e04 2005-12-26 devnull p = pserver(p, e, "ntpsrv", o, n);
394 87a52e04 2005-12-26 devnull break;
395 87a52e04 2005-12-26 devnull case OBvendorinfo:
396 87a52e04 2005-12-26 devnull p = phex(p, e, "vendorinfo", o, n);
397 87a52e04 2005-12-26 devnull break;
398 87a52e04 2005-12-26 devnull case OBnetbiosns:
399 87a52e04 2005-12-26 devnull p = pserver(p, e, "biosns", o, n);
400 87a52e04 2005-12-26 devnull break;
401 87a52e04 2005-12-26 devnull case OBnetbiosdds:
402 87a52e04 2005-12-26 devnull p = phex(p, e, "biosdds", o, n);
403 87a52e04 2005-12-26 devnull break;
404 87a52e04 2005-12-26 devnull case OBnetbiostype:
405 87a52e04 2005-12-26 devnull p = phex(p, e, "biostype", o, n);
406 87a52e04 2005-12-26 devnull break;
407 87a52e04 2005-12-26 devnull case OBnetbiosscope:
408 87a52e04 2005-12-26 devnull p = phex(p, e, "biosscope", o, n);
409 87a52e04 2005-12-26 devnull break;
410 87a52e04 2005-12-26 devnull case OBxfontserver:
411 87a52e04 2005-12-26 devnull p = pserver(p, e, "fontsrv", o, n);
412 87a52e04 2005-12-26 devnull break;
413 87a52e04 2005-12-26 devnull case OBxdispmanager:
414 87a52e04 2005-12-26 devnull p = pserver(p, e, "xdispmgr", o, n);
415 87a52e04 2005-12-26 devnull break;
416 87a52e04 2005-12-26 devnull case OBnisplusdomain:
417 87a52e04 2005-12-26 devnull p = pstring(p, e, "nisplusdomain", o, n);
418 87a52e04 2005-12-26 devnull break;
419 87a52e04 2005-12-26 devnull case OBnisplusserver:
420 87a52e04 2005-12-26 devnull p = pserver(p, e, "nisplussrv", o, n);
421 87a52e04 2005-12-26 devnull break;
422 87a52e04 2005-12-26 devnull case OBhomeagent:
423 87a52e04 2005-12-26 devnull p = pserver(p, e, "homeagent", o, n);
424 87a52e04 2005-12-26 devnull break;
425 87a52e04 2005-12-26 devnull case OBsmtpserver:
426 87a52e04 2005-12-26 devnull p = pserver(p, e, "smtpsrv", o, n);
427 87a52e04 2005-12-26 devnull break;
428 87a52e04 2005-12-26 devnull case OBpop3server:
429 87a52e04 2005-12-26 devnull p = pserver(p, e, "pop3srv", o, n);
430 87a52e04 2005-12-26 devnull break;
431 87a52e04 2005-12-26 devnull case OBnntpserver:
432 87a52e04 2005-12-26 devnull p = pserver(p, e, "ntpsrv", o, n);
433 87a52e04 2005-12-26 devnull break;
434 87a52e04 2005-12-26 devnull case OBwwwserver:
435 87a52e04 2005-12-26 devnull p = pserver(p, e, "wwwsrv", o, n);
436 87a52e04 2005-12-26 devnull break;
437 87a52e04 2005-12-26 devnull case OBfingerserver:
438 87a52e04 2005-12-26 devnull p = pserver(p, e, "fingersrv", o, n);
439 87a52e04 2005-12-26 devnull break;
440 87a52e04 2005-12-26 devnull case OBircserver:
441 87a52e04 2005-12-26 devnull p = pserver(p, e, "ircsrv", o, n);
442 87a52e04 2005-12-26 devnull break;
443 87a52e04 2005-12-26 devnull case OBstserver:
444 87a52e04 2005-12-26 devnull p = pserver(p, e, "stsrv", o, n);
445 87a52e04 2005-12-26 devnull break;
446 87a52e04 2005-12-26 devnull case OBstdaserver:
447 87a52e04 2005-12-26 devnull p = pserver(p, e, "stdasrv", o, n);
448 87a52e04 2005-12-26 devnull break;
449 87a52e04 2005-12-26 devnull case OBend:
450 87a52e04 2005-12-26 devnull goto out;
451 87a52e04 2005-12-26 devnull default:
452 87a52e04 2005-12-26 devnull snprint(msg, sizeof msg, " T%ud", code);
453 87a52e04 2005-12-26 devnull p = phex(p, e, msg, o, n);
454 87a52e04 2005-12-26 devnull break;
455 87a52e04 2005-12-26 devnull }
456 87a52e04 2005-12-26 devnull if(*ps != OBend)
457 87a52e04 2005-12-26 devnull p = seprint(p, e, " ");
458 87a52e04 2005-12-26 devnull }
459 87a52e04 2005-12-26 devnull out:
460 87a52e04 2005-12-26 devnull m->p = p;
461 87a52e04 2005-12-26 devnull m->ps = ps;
462 87a52e04 2005-12-26 devnull return 0;
463 87a52e04 2005-12-26 devnull }
464 87a52e04 2005-12-26 devnull
465 87a52e04 2005-12-26 devnull Proto dhcp =
466 87a52e04 2005-12-26 devnull {
467 87a52e04 2005-12-26 devnull "dhcp",
468 87a52e04 2005-12-26 devnull p_compile,
469 a38a1836 2006-02-14 devnull nil,
470 87a52e04 2005-12-26 devnull p_seprint,
471 87a52e04 2005-12-26 devnull nil,
472 87a52e04 2005-12-26 devnull nil,
473 a38a1836 2006-02-14 devnull nil,
474 87a52e04 2005-12-26 devnull defaultframer,
475 87a52e04 2005-12-26 devnull };
476 87a52e04 2005-12-26 devnull