1 
2 # line 2 "../ipf_y.y"
3 /*
4  * Copyright (C) 2003 by Darren Reed.
5  *
6  * See the IPFILTER.LICENCE file for details on licencing.
7  *
8  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
9  * Use is subject to license terms.
10  */
11 
12 #include "ipf.h"
13 #include <sys/ioctl.h>
14 #include <syslog.h>
15 #ifdef IPFILTER_BPF
16 # include "pcap-bpf.h"
17 # define _NET_BPF_H_
18 # include <pcap.h>
19 #endif
20 #include "netinet/ip_pool.h"
21 #include "netinet/ip_htable.h"
22 #include "netinet/ipl.h"
23 #include "ipf_l.h"
24 
25 #define	YYDEBUG	1
26 #define	DOALL(x)	for (fr = frc; fr != NULL; fr = fr->fr_next) { x }
27 #define	DOREM(x)	for (; fr != NULL; fr = fr->fr_next) { x }
28 
29 #define OPTION_LOG              0x1
30 #define OPTION_QUICK            0x2
31 #define OPTION_DUP              0x4
32 #define OPTION_PROUTE           0x8
33 #define OPTION_ON               0x10
34 #define OPTION_REPLYTO          0x20
35 #define OPTION_FROUTE           0x40
36 
37 extern	void	ipf_yyerror __P((char *));
38 extern	int	ipf_yyparse __P((void));
39 extern	int	ipf_yylex __P((void));
40 extern	int	ipf_yydebug;
41 extern	FILE	*ipf_yyin;
42 extern	int	ipf_yylineNum;
43 
44 static	void	newrule __P((void));
45 static	void	setipftype __P((void));
46 static	u_32_t	lookuphost __P((char *, i6addr_t *));
47 static	void	dobpf __P((int, char *));
48 static	void	resetaddr __P((void));
49 static	struct	alist_s	*newalist __P((struct alist_s *));
50 static	u_int	makehash __P((struct alist_s *));
51 static	int	makepool __P((struct alist_s *));
52 static	frentry_t *addrule __P((void));
53 static	void	setsyslog __P((void));
54 static	void	unsetsyslog __P((void));
55 static	void	fillgroup __P((frentry_t *));
56 
57 frentry_t	*fr = NULL, *frc = NULL, *frtop = NULL, *frold = NULL;
58 
59 static	int		ifpflag = 0;
60 static	int		nowith = 0;
61 static	int		dynamic = -1;
62 static	int		pooled = 0;
63 static	int		hashed = 0;
64 static	int		nrules = 0;
65 static	int		newlist = 0;
66 static	int		added = 0;
67 static	int		ipffd = -1;
68 static  int             ruleopts = 0;
69 static	int		*ipf_yycont = 0;
70 static	ioctlfunc_t	ipfioctl[IPL_LOGSIZE];
71 static	addfunc_t	ipfaddfunc = NULL;
72 static	struct	wordtab ipfwords[96];
73 static	struct	wordtab	addrwords[4];
74 static	struct	wordtab	maskwords[5];
75 static	struct	wordtab icmpcodewords[17];
76 static	struct	wordtab icmptypewords[16];
77 static	struct	wordtab ipv4optwords[25];
78 static	struct	wordtab ipv4secwords[9];
79 static	struct	wordtab ipv6optwords[8];
80 static	struct	wordtab logwords[33];
81 static  int             set_ipv6_addr = 0;
82 
83 
84 # line 83 "../ipf_y.y"
85 typedef union
86 #ifdef __cplusplus
87 	YYSTYPE
88 #endif
89 	{
90 	char	*str;
91 	u_32_t	num;
92 	struct	in_addr	ipa;
93 	frentry_t	fr;
94 	frtuc_t	*frt;
95 	struct	alist_s	*alist;
96 	u_short	port;
97 	struct	{
98 		u_short	p1;
99 		u_short	p2;
100 		int	pc;
101 	} pc;
102 	struct	{
103 		union	i6addr	a;
104 		union	i6addr	m;
105 	} ipp;
106 	union	i6addr	ip6;
107 } YYSTYPE;
108 # define YY_NUMBER 257
109 # define YY_HEX 258
110 # define YY_STR 259
111 # define YY_COMMENT 260
112 # define YY_CMP_EQ 261
113 # define YY_CMP_NE 262
114 # define YY_CMP_LE 263
115 # define YY_CMP_GE 264
116 # define YY_CMP_LT 265
117 # define YY_CMP_GT 266
118 # define YY_RANGE_OUT 267
119 # define YY_RANGE_IN 268
120 # define YY_IPV6 269
121 # define IPFY_PASS 270
122 # define IPFY_BLOCK 271
123 # define IPFY_COUNT 272
124 # define IPFY_CALL 273
125 # define IPFY_RETICMP 274
126 # define IPFY_RETRST 275
127 # define IPFY_RETICMPASDST 276
128 # define IPFY_IN 277
129 # define IPFY_OUT 278
130 # define IPFY_QUICK 279
131 # define IPFY_ON 280
132 # define IPFY_OUTVIA 281
133 # define IPFY_INVIA 282
134 # define IPFY_DUPTO 283
135 # define IPFY_TO 284
136 # define IPFY_FROUTE 285
137 # define IPFY_REPLY_TO 286
138 # define IPFY_ROUTETO 287
139 # define IPFY_TOS 288
140 # define IPFY_TTL 289
141 # define IPFY_PROTO 290
142 # define IPFY_HEAD 291
143 # define IPFY_GROUP 292
144 # define IPFY_AUTH 293
145 # define IPFY_PREAUTH 294
146 # define IPFY_LOG 295
147 # define IPFY_BODY 296
148 # define IPFY_FIRST 297
149 # define IPFY_LEVEL 298
150 # define IPFY_ORBLOCK 299
151 # define IPFY_LOGTAG 300
152 # define IPFY_MATCHTAG 301
153 # define IPFY_SETTAG 302
154 # define IPFY_SKIP 303
155 # define IPFY_FROM 304
156 # define IPFY_ALL 305
157 # define IPFY_ANY 306
158 # define IPFY_BPFV4 307
159 # define IPFY_BPFV6 308
160 # define IPFY_POOL 309
161 # define IPFY_HASH 310
162 # define IPFY_PPS 311
163 # define IPFY_ESP 312
164 # define IPFY_AH 313
165 # define IPFY_WITH 314
166 # define IPFY_AND 315
167 # define IPFY_NOT 316
168 # define IPFY_NO 317
169 # define IPFY_OPT 318
170 # define IPFY_TCPUDP 319
171 # define IPFY_TCP 320
172 # define IPFY_UDP 321
173 # define IPFY_FLAGS 322
174 # define IPFY_MULTICAST 323
175 # define IPFY_MASK 324
176 # define IPFY_BROADCAST 325
177 # define IPFY_NETWORK 326
178 # define IPFY_NETMASKED 327
179 # define IPFY_PEER 328
180 # define IPFY_PORT 329
181 # define IPFY_NOW 330
182 # define IPFY_ICMP 331
183 # define IPFY_ICMPTYPE 332
184 # define IPFY_ICMPCODE 333
185 # define IPFY_IPOPTS 334
186 # define IPFY_SHORT 335
187 # define IPFY_NAT 336
188 # define IPFY_BADSRC 337
189 # define IPFY_LOWTTL 338
190 # define IPFY_FRAG 339
191 # define IPFY_MBCAST 340
192 # define IPFY_BAD 341
193 # define IPFY_BADNAT 342
194 # define IPFY_OOW 343
195 # define IPFY_NEWISN 344
196 # define IPFY_NOICMPERR 345
197 # define IPFY_KEEP 346
198 # define IPFY_STATE 347
199 # define IPFY_FRAGS 348
200 # define IPFY_LIMIT 349
201 # define IPFY_STRICT 350
202 # define IPFY_AGE 351
203 # define IPFY_SYNC 352
204 # define IPFY_FRAGBODY 353
205 # define IPFY_IPOPT_NOP 354
206 # define IPFY_IPOPT_RR 355
207 # define IPFY_IPOPT_ZSU 356
208 # define IPFY_IPOPT_MTUP 357
209 # define IPFY_IPOPT_MTUR 358
210 # define IPFY_IPOPT_ENCODE 359
211 # define IPFY_IPOPT_TS 360
212 # define IPFY_IPOPT_TR 361
213 # define IPFY_IPOPT_SEC 362
214 # define IPFY_IPOPT_LSRR 363
215 # define IPFY_IPOPT_ESEC 364
216 # define IPFY_IPOPT_CIPSO 365
217 # define IPFY_IPOPT_SATID 366
218 # define IPFY_IPOPT_SSRR 367
219 # define IPFY_IPOPT_ADDEXT 368
220 # define IPFY_IPOPT_VISA 369
221 # define IPFY_IPOPT_IMITD 370
222 # define IPFY_IPOPT_EIP 371
223 # define IPFY_IPOPT_FINN 372
224 # define IPFY_IPOPT_DPS 373
225 # define IPFY_IPOPT_SDB 374
226 # define IPFY_IPOPT_NSAPA 375
227 # define IPFY_IPOPT_RTRALRT 376
228 # define IPFY_IPOPT_UMP 377
229 # define IPFY_SECCLASS 378
230 # define IPFY_SEC_UNC 379
231 # define IPFY_SEC_CONF 380
232 # define IPFY_SEC_RSV1 381
233 # define IPFY_SEC_RSV2 382
234 # define IPFY_SEC_RSV4 383
235 # define IPFY_SEC_SEC 384
236 # define IPFY_SEC_TS 385
237 # define IPFY_SEC_RSV3 386
238 # define IPF6_V6HDRS 387
239 # define IPFY_IPV6OPT 388
240 # define IPFY_IPV6OPT_DSTOPTS 389
241 # define IPFY_IPV6OPT_HOPOPTS 390
242 # define IPFY_IPV6OPT_IPV6 391
243 # define IPFY_IPV6OPT_NONE 392
244 # define IPFY_IPV6OPT_ROUTING 393
245 # define IPFY_ICMPT_UNR 394
246 # define IPFY_ICMPT_ECHO 395
247 # define IPFY_ICMPT_ECHOR 396
248 # define IPFY_ICMPT_SQUENCH 397
249 # define IPFY_ICMPT_REDIR 398
250 # define IPFY_ICMPT_TIMEX 399
251 # define IPFY_ICMPT_PARAMP 400
252 # define IPFY_ICMPT_TIMEST 401
253 # define IPFY_ICMPT_TIMESTREP 402
254 # define IPFY_ICMPT_INFOREQ 403
255 # define IPFY_ICMPT_INFOREP 404
256 # define IPFY_ICMPT_MASKREQ 405
257 # define IPFY_ICMPT_MASKREP 406
258 # define IPFY_ICMPT_ROUTERAD 407
259 # define IPFY_ICMPT_ROUTERSOL 408
260 # define IPFY_ICMPC_NETUNR 409
261 # define IPFY_ICMPC_HSTUNR 410
262 # define IPFY_ICMPC_PROUNR 411
263 # define IPFY_ICMPC_PORUNR 412
264 # define IPFY_ICMPC_NEEDF 413
265 # define IPFY_ICMPC_SRCFAIL 414
266 # define IPFY_ICMPC_NETUNK 415
267 # define IPFY_ICMPC_HSTUNK 416
268 # define IPFY_ICMPC_ISOLATE 417
269 # define IPFY_ICMPC_NETPRO 418
270 # define IPFY_ICMPC_HSTPRO 419
271 # define IPFY_ICMPC_NETTOS 420
272 # define IPFY_ICMPC_HSTTOS 421
273 # define IPFY_ICMPC_FLTPRO 422
274 # define IPFY_ICMPC_HSTPRE 423
275 # define IPFY_ICMPC_CUTPRE 424
276 # define IPFY_FAC_KERN 425
277 # define IPFY_FAC_USER 426
278 # define IPFY_FAC_MAIL 427
279 # define IPFY_FAC_DAEMON 428
280 # define IPFY_FAC_AUTH 429
281 # define IPFY_FAC_SYSLOG 430
282 # define IPFY_FAC_LPR 431
283 # define IPFY_FAC_NEWS 432
284 # define IPFY_FAC_UUCP 433
285 # define IPFY_FAC_CRON 434
286 # define IPFY_FAC_LOCAL0 435
287 # define IPFY_FAC_LOCAL1 436
288 # define IPFY_FAC_LOCAL2 437
289 # define IPFY_FAC_LOCAL3 438
290 # define IPFY_FAC_LOCAL4 439
291 # define IPFY_FAC_LOCAL5 440
292 # define IPFY_FAC_LOCAL6 441
293 # define IPFY_FAC_LOCAL7 442
294 # define IPFY_FAC_SECURITY 443
295 # define IPFY_FAC_FTP 444
296 # define IPFY_FAC_AUTHPRIV 445
297 # define IPFY_FAC_AUDIT 446
298 # define IPFY_FAC_LFMT 447
299 # define IPFY_FAC_CONSOLE 448
300 # define IPFY_PRI_EMERG 449
301 # define IPFY_PRI_ALERT 450
302 # define IPFY_PRI_CRIT 451
303 # define IPFY_PRI_ERR 452
304 # define IPFY_PRI_WARN 453
305 # define IPFY_PRI_NOTICE 454
306 # define IPFY_PRI_INFO 455
307 # define IPFY_PRI_DEBUG 456
308 # define IPFY_SET_LOOPBACK 457
309 # define IPFY_SET 458
310 
311 #include <inttypes.h>
312 
313 #ifdef __STDC__
314 #include <stdlib.h>
315 #include <string.h>
316 #define	YYCONST	const
317 #else
318 #include <malloc.h>
319 #include <memory.h>
320 #define	YYCONST
321 #endif
322 
323 #include <values.h>
324 
325 #if defined(__cplusplus) || defined(__STDC__)
326 
327 #if defined(__cplusplus) && defined(__EXTERN_C__)
328 extern "C" {
329 #endif
330 #ifndef ipf_yyerror
331 #if defined(__cplusplus)
332 	void ipf_yyerror(YYCONST char *);
333 #endif
334 #endif
335 #ifndef ipf_yylex
336 	int ipf_yylex(void);
337 #endif
338 	int ipf_yyparse(void);
339 #if defined(__cplusplus) && defined(__EXTERN_C__)
340 }
341 #endif
342 
343 #endif
344 
345 #define ipf_yyclearin ipf_yychar = -1
346 #define ipf_yyerrok ipf_yyerrflag = 0
347 extern int ipf_yychar;
348 extern int ipf_yyerrflag;
349 YYSTYPE ipf_yylval;
350 YYSTYPE ipf_yyval;
351 typedef int ipf_yytabelem;
352 #ifndef YYMAXDEPTH
353 #define YYMAXDEPTH 150
354 #endif
355 #if YYMAXDEPTH > 0
356 int ipf_yy_ipf_yys[YYMAXDEPTH], *ipf_yys = ipf_yy_ipf_yys;
357 YYSTYPE ipf_yy_ipf_yyv[YYMAXDEPTH], *ipf_yyv = ipf_yy_ipf_yyv;
358 #else	/* user does initial allocation */
359 int *ipf_yys;
360 YYSTYPE *ipf_yyv;
361 #endif
362 static int ipf_yymaxdepth = YYMAXDEPTH;
363 # define YYERRCODE 256
364 
365 # line 1549 "../ipf_y.y"
366 
367 
368 
369 static	struct	wordtab ipfwords[96] = {
370 	{ "age",			IPFY_AGE },
371 	{ "ah",				IPFY_AH },
372 	{ "all",			IPFY_ALL },
373 	{ "and",			IPFY_AND },
374 	{ "auth",			IPFY_AUTH },
375 	{ "bad",			IPFY_BAD },
376 	{ "bad-nat",			IPFY_BADNAT },
377 	{ "bad-src",			IPFY_BADSRC },
378 	{ "bcast",			IPFY_BROADCAST },
379 	{ "block",			IPFY_BLOCK },
380 	{ "body",			IPFY_BODY },
381 	{ "bpf-v4",			IPFY_BPFV4 },
382 #ifdef USE_INET6
383 	{ "bpf-v6",			IPFY_BPFV6 },
384 #endif
385 	{ "call",			IPFY_CALL },
386 	{ "code",			IPFY_ICMPCODE },
387 	{ "count",			IPFY_COUNT },
388 	{ "dup-to",			IPFY_DUPTO },
389 	{ "eq",				YY_CMP_EQ },
390 	{ "esp",			IPFY_ESP },
391 	{ "fastroute",			IPFY_FROUTE },
392 	{ "first",			IPFY_FIRST },
393 	{ "flags",			IPFY_FLAGS },
394 	{ "frag",			IPFY_FRAG },
395 	{ "frag-body",			IPFY_FRAGBODY },
396 	{ "frags",			IPFY_FRAGS },
397 	{ "from",			IPFY_FROM },
398 	{ "ge",				YY_CMP_GE },
399 	{ "group",			IPFY_GROUP },
400 	{ "gt",				YY_CMP_GT },
401 	{ "head",			IPFY_HEAD },
402 	{ "icmp",			IPFY_ICMP },
403 	{ "icmp-type",			IPFY_ICMPTYPE },
404 	{ "in",				IPFY_IN },
405 	{ "in-via",			IPFY_INVIA },
406 	{ "intercept_loopback",		IPFY_SET_LOOPBACK },
407 	{ "ipopt",			IPFY_IPOPTS },
408 	{ "ipopts",			IPFY_IPOPTS },
409 	{ "keep",			IPFY_KEEP },
410 	{ "le",				YY_CMP_LE },
411 	{ "level",			IPFY_LEVEL },
412 	{ "limit",			IPFY_LIMIT },
413 	{ "log",			IPFY_LOG },
414 	{ "lowttl",			IPFY_LOWTTL },
415 	{ "lt",				YY_CMP_LT },
416 	{ "mask",			IPFY_MASK },
417 	{ "match-tag",			IPFY_MATCHTAG },
418 	{ "mbcast",			IPFY_MBCAST },
419 	{ "mcast",			IPFY_MULTICAST },
420 	{ "multicast",			IPFY_MULTICAST },
421 	{ "nat",			IPFY_NAT },
422 	{ "ne",				YY_CMP_NE },
423 	{ "net",			IPFY_NETWORK },
424 	{ "newisn",			IPFY_NEWISN },
425 	{ "no",				IPFY_NO },
426 	{ "no-icmp-err",		IPFY_NOICMPERR },
427 	{ "now",			IPFY_NOW },
428 	{ "not",			IPFY_NOT },
429 	{ "oow",			IPFY_OOW },
430 	{ "on",				IPFY_ON },
431 	{ "opt",			IPFY_OPT },
432 	{ "or-block",			IPFY_ORBLOCK },
433 	{ "out",			IPFY_OUT },
434 	{ "out-via",			IPFY_OUTVIA },
435 	{ "pass",			IPFY_PASS },
436 	{ "port",			IPFY_PORT },
437 	{ "pps",			IPFY_PPS },
438 	{ "preauth",			IPFY_PREAUTH },
439 	{ "proto",			IPFY_PROTO },
440 	{ "quick",			IPFY_QUICK },
441 	{ "reply-to",			IPFY_REPLY_TO },
442 	{ "return-icmp",		IPFY_RETICMP },
443 	{ "return-icmp-as-dest",	IPFY_RETICMPASDST },
444 	{ "return-rst",			IPFY_RETRST },
445 	{ "route-to",			IPFY_ROUTETO },
446 	{ "sec-class",			IPFY_SECCLASS },
447 	{ "set-tag",			IPFY_SETTAG },
448 	{ "set",			IPFY_SET },
449 	{ "skip",			IPFY_SKIP },
450 	{ "short",			IPFY_SHORT },
451 	{ "state",			IPFY_STATE },
452 	{ "state-age",			IPFY_AGE },
453 	{ "strict",			IPFY_STRICT },
454 	{ "sync",			IPFY_SYNC },
455 	{ "tcp",			IPFY_TCP },
456 	{ "tcp-udp",			IPFY_TCPUDP },
457 	{ "tos",			IPFY_TOS },
458 	{ "to",				IPFY_TO },
459 	{ "ttl",			IPFY_TTL },
460 	{ "udp",			IPFY_UDP },
461 	{ "v6hdrs",			IPF6_V6HDRS },
462 	{ "with",			IPFY_WITH },
463 	{ NULL,				0 }
464 };
465 
466 static	struct	wordtab	addrwords[4] = {
467 	{ "any",			IPFY_ANY },
468 	{ "hash",			IPFY_HASH },
469 	{ "pool",			IPFY_POOL },
470 	{ NULL,				0 }
471 };
472 
473 static	struct	wordtab	maskwords[5] = {
474 	{ "broadcast",			IPFY_BROADCAST },
475 	{ "netmasked",			IPFY_NETMASKED },
476 	{ "network",			IPFY_NETWORK },
477 	{ "peer",			IPFY_PEER },
478 	{ NULL,				0 }
479 };
480 
481 static	struct	wordtab icmptypewords[16] = {
482 	{ "echo",			IPFY_ICMPT_ECHO },
483 	{ "echorep",			IPFY_ICMPT_ECHOR },
484 	{ "inforeq",			IPFY_ICMPT_INFOREQ },
485 	{ "inforep",			IPFY_ICMPT_INFOREP },
486 	{ "maskrep",			IPFY_ICMPT_MASKREP },
487 	{ "maskreq",			IPFY_ICMPT_MASKREQ },
488 	{ "paramprob",			IPFY_ICMPT_PARAMP },
489 	{ "redir",			IPFY_ICMPT_REDIR },
490 	{ "unreach",			IPFY_ICMPT_UNR },
491 	{ "routerad",			IPFY_ICMPT_ROUTERAD },
492 	{ "routersol",			IPFY_ICMPT_ROUTERSOL },
493 	{ "squench",			IPFY_ICMPT_SQUENCH },
494 	{ "timest",			IPFY_ICMPT_TIMEST },
495 	{ "timestrep",			IPFY_ICMPT_TIMESTREP },
496 	{ "timex",			IPFY_ICMPT_TIMEX },
497 	{ NULL,				0 },
498 };
499 
500 static	struct	wordtab icmpcodewords[17] = {
501 	{ "cutoff-preced",		IPFY_ICMPC_CUTPRE },
502 	{ "filter-prohib",		IPFY_ICMPC_FLTPRO },
503 	{ "isolate",			IPFY_ICMPC_ISOLATE },
504 	{ "needfrag",			IPFY_ICMPC_NEEDF },
505 	{ "net-prohib",			IPFY_ICMPC_NETPRO },
506 	{ "net-tos",			IPFY_ICMPC_NETTOS },
507 	{ "host-preced",		IPFY_ICMPC_HSTPRE },
508 	{ "host-prohib",		IPFY_ICMPC_HSTPRO },
509 	{ "host-tos",			IPFY_ICMPC_HSTTOS },
510 	{ "host-unk",			IPFY_ICMPC_HSTUNK },
511 	{ "host-unr",			IPFY_ICMPC_HSTUNR },
512 	{ "net-unk",			IPFY_ICMPC_NETUNK },
513 	{ "net-unr",			IPFY_ICMPC_NETUNR },
514 	{ "port-unr",			IPFY_ICMPC_PORUNR },
515 	{ "proto-unr",			IPFY_ICMPC_PROUNR },
516 	{ "srcfail",			IPFY_ICMPC_SRCFAIL },
517 	{ NULL,				0 },
518 };
519 
520 static	struct	wordtab ipv4optwords[25] = {
521 	{ "addext",			IPFY_IPOPT_ADDEXT },
522 	{ "cipso",			IPFY_IPOPT_CIPSO },
523 	{ "dps",			IPFY_IPOPT_DPS },
524 	{ "e-sec",			IPFY_IPOPT_ESEC },
525 	{ "eip",			IPFY_IPOPT_EIP },
526 	{ "encode",			IPFY_IPOPT_ENCODE },
527 	{ "finn",			IPFY_IPOPT_FINN },
528 	{ "imitd",			IPFY_IPOPT_IMITD },
529 	{ "lsrr",			IPFY_IPOPT_LSRR },
530 	{ "mtup",			IPFY_IPOPT_MTUP },
531 	{ "mtur",			IPFY_IPOPT_MTUR },
532 	{ "nop",			IPFY_IPOPT_NOP },
533 	{ "nsapa",			IPFY_IPOPT_NSAPA },
534 	{ "rr",				IPFY_IPOPT_RR },
535 	{ "rtralrt",			IPFY_IPOPT_RTRALRT },
536 	{ "satid",			IPFY_IPOPT_SATID },
537 	{ "sdb",			IPFY_IPOPT_SDB },
538 	{ "sec",			IPFY_IPOPT_SEC },
539 	{ "ssrr",			IPFY_IPOPT_SSRR },
540 	{ "tr",				IPFY_IPOPT_TR },
541 	{ "ts",				IPFY_IPOPT_TS },
542 	{ "ump",			IPFY_IPOPT_UMP },
543 	{ "visa",			IPFY_IPOPT_VISA },
544 	{ "zsu",			IPFY_IPOPT_ZSU },
545 	{ NULL,				0 },
546 };
547 
548 static	struct	wordtab ipv4secwords[9] = {
549 	{ "confid",			IPFY_SEC_CONF },
550 	{ "reserv-1",			IPFY_SEC_RSV1 },
551 	{ "reserv-2",			IPFY_SEC_RSV2 },
552 	{ "reserv-3",			IPFY_SEC_RSV3 },
553 	{ "reserv-4",			IPFY_SEC_RSV4 },
554 	{ "secret",			IPFY_SEC_SEC },
555 	{ "topsecret",			IPFY_SEC_TS },
556 	{ "unclass",			IPFY_SEC_UNC },
557 	{ NULL,				0 },
558 };
559 
560 static	struct	wordtab ipv6optwords[8] = {
561 	{ "dstopts",			IPFY_IPV6OPT_DSTOPTS },
562 	{ "esp",			IPFY_ESP },
563 	{ "frag",			IPFY_FRAG },
564 	{ "hopopts",			IPFY_IPV6OPT_HOPOPTS },
565 	{ "ipv6",			IPFY_IPV6OPT_IPV6 },
566 	{ "none",			IPFY_IPV6OPT_NONE },
567 	{ "routing",			IPFY_IPV6OPT_ROUTING },
568 	{ NULL,				0 },
569 };
570 
571 static	struct	wordtab logwords[33] = {
572 	{ "kern",			IPFY_FAC_KERN },
573 	{ "user",			IPFY_FAC_USER },
574 	{ "mail",			IPFY_FAC_MAIL },
575 	{ "daemon",			IPFY_FAC_DAEMON },
576 	{ "auth",			IPFY_FAC_AUTH },
577 	{ "syslog",			IPFY_FAC_SYSLOG },
578 	{ "lpr",			IPFY_FAC_LPR },
579 	{ "news",			IPFY_FAC_NEWS },
580 	{ "uucp",			IPFY_FAC_UUCP },
581 	{ "cron",			IPFY_FAC_CRON },
582 	{ "ftp",			IPFY_FAC_FTP },
583 	{ "authpriv",			IPFY_FAC_AUTHPRIV },
584 	{ "audit",			IPFY_FAC_AUDIT },
585 	{ "logalert",			IPFY_FAC_LFMT },
586 	{ "console",			IPFY_FAC_CONSOLE },
587 	{ "security",			IPFY_FAC_SECURITY },
588 	{ "local0",			IPFY_FAC_LOCAL0 },
589 	{ "local1",			IPFY_FAC_LOCAL1 },
590 	{ "local2",			IPFY_FAC_LOCAL2 },
591 	{ "local3",			IPFY_FAC_LOCAL3 },
592 	{ "local4",			IPFY_FAC_LOCAL4 },
593 	{ "local5",			IPFY_FAC_LOCAL5 },
594 	{ "local6",			IPFY_FAC_LOCAL6 },
595 	{ "local7",			IPFY_FAC_LOCAL7 },
596 	{ "emerg",			IPFY_PRI_EMERG },
597 	{ "alert",			IPFY_PRI_ALERT },
598 	{ "crit",			IPFY_PRI_CRIT },
599 	{ "err",			IPFY_PRI_ERR },
600 	{ "warn",			IPFY_PRI_WARN },
601 	{ "notice",			IPFY_PRI_NOTICE },
602 	{ "info",			IPFY_PRI_INFO },
603 	{ "debug",			IPFY_PRI_DEBUG },
604 	{ NULL,				0 },
605 };
606 
607 
608 
609 
610 int ipf_parsefile(fd, addfunc, iocfuncs, filename)
611 int fd;
612 addfunc_t addfunc;
613 ioctlfunc_t *iocfuncs;
614 char *filename;
615 {
616 	FILE *fp = NULL;
617 	char *s;
618 
619 	ipf_yylineNum = 1;
620 	ipf_yysettab(ipfwords);
621 
622 	s = getenv("YYDEBUG");
623 	if (s != NULL)
624 		ipf_yydebug = atoi(s);
625 	else
626 		ipf_yydebug = 0;
627 
628 	if (strcmp(filename, "-")) {
629 		fp = fopen(filename, "r");
630 		if (fp == NULL) {
631 			fprintf(stderr, "fopen(%s) failed: %s\n", filename,
632 				STRERROR(errno));
633 			return -1;
634 		}
635 	} else
636 		fp = stdin;
637 
638 	while (ipf_parsesome(fd, addfunc, iocfuncs, fp) == 1)
639 		;
640 	if (fp != NULL)
641 		fclose(fp);
642 	return 0;
643 }
644 
645 
646 int ipf_parsesome(fd, addfunc, iocfuncs, fp)
647 int fd;
648 addfunc_t addfunc;
649 ioctlfunc_t *iocfuncs;
650 FILE *fp;
651 {
652 	char *s;
653 	int i;
654 
655 	ipffd = fd;
656 	for (i = 0; i <= IPL_LOGMAX; i++)
657 		ipfioctl[i] = iocfuncs[i];
658 	ipfaddfunc = addfunc;
659 
660 	if (feof(fp))
661 		return 0;
662 	i = fgetc(fp);
663 	if (i == EOF)
664 		return 0;
665 	if (ungetc(i, fp) == 0)
666 		return 0;
667 	if (feof(fp))
668 		return 0;
669 	s = getenv("YYDEBUG");
670 	if (s != NULL)
671 		ipf_yydebug = atoi(s);
672 	else
673 		ipf_yydebug = 0;
674 
675 	ipf_yyin = fp;
676 	ipf_yyparse();
677 	return 1;
678 }
679 
680 
681 static void newrule()
682 {
683 	frentry_t *frn;
684 
685 	frn = (frentry_t *)calloc(1, sizeof(frentry_t));
686 	if (frn == NULL)
687 		ipf_yyerror("sorry, out of memory");
688 	for (fr = frtop; fr != NULL && fr->fr_next != NULL; fr = fr->fr_next)
689 		;
690 	if (fr != NULL)
691 		fr->fr_next = frn;
692 	if (frtop == NULL)
693 		frtop = frn;
694 	fr = frn;
695 	frc = frn;
696 	fr->fr_loglevel = 0xffff;
697 	fr->fr_isc = (void *)-1;
698 	fr->fr_logtag = FR_NOLOGTAG;
699 	fr->fr_type = FR_T_NONE;
700 	if (use_inet6 != 0)
701 		fr->fr_v = 6;
702 	else
703 		fr->fr_v = 4;
704 
705 	nrules = 1;
706 }
707 
708 
709 static void setipftype()
710 {
711 	for (fr = frc; fr != NULL; fr = fr->fr_next) {
712 		if (fr->fr_type == FR_T_NONE) {
713 			fr->fr_type = FR_T_IPF;
714 			fr->fr_data = (void *)calloc(sizeof(fripf_t), 1);
715 			if (fr->fr_data == NULL)
716 				ipf_yyerror("sorry, out of memory");
717 			fr->fr_dsize = sizeof(fripf_t);
718 			fr->fr_ip.fi_v = frc->fr_v;
719 			fr->fr_mip.fi_v = 0xf;
720 			fr->fr_ipf->fri_sifpidx = -1;
721 			fr->fr_ipf->fri_difpidx = -1;
722 		}
723 		if (fr->fr_type != FR_T_IPF) {
724 			fprintf(stderr, "IPF Type not set\n");
725 		}
726 	}
727 }
728 
729 
730 static frentry_t *addrule()
731 {
732 	frentry_t *f, *f1, *f2;
733 	int count;
734 
735 	for (f2 = frc; f2->fr_next != NULL; f2 = f2->fr_next)
736 		;
737 
738 	count = nrules;
739 	if (count == 0) {
740 		f = (frentry_t *)calloc(sizeof(*f), 1);
741 		if (f == NULL)
742 			ipf_yyerror("sorry, out of memory");
743 		added++;
744 		f2->fr_next = f;
745 		bcopy(f2, f, sizeof(*f));
746 		if (f2->fr_caddr != NULL) {
747 			f->fr_caddr = malloc(f->fr_dsize);
748 			if (f->fr_caddr == NULL)
749 				ipf_yyerror("sorry, out of memory");
750 			bcopy(f2->fr_caddr, f->fr_caddr, f->fr_dsize);
751 		}
752 		f->fr_next = NULL;
753 		return f;
754 	}
755 	f = f2;
756 	for (f1 = frc; count > 0; count--, f1 = f1->fr_next) {
757 		f->fr_next = (frentry_t *)calloc(sizeof(*f), 1);
758 		if (f->fr_next == NULL)
759 			ipf_yyerror("sorry, out of memory");
760 		added++;
761 		f = f->fr_next;
762 		bcopy(f1, f, sizeof(*f));
763 		f->fr_next = NULL;
764 		if (f->fr_caddr != NULL) {
765 			f->fr_caddr = malloc(f->fr_dsize);
766 			if (f->fr_caddr == NULL)
767 				ipf_yyerror("sorry, out of memory");
768 			bcopy(f1->fr_caddr, f->fr_caddr, f->fr_dsize);
769 		}
770 	}
771 
772 	return f2->fr_next;
773 }
774 
775 
776 static u_32_t lookuphost(name, addr)
777 char *name;
778 i6addr_t *addr;
779 {
780 	int i;
781 
782 	hashed = 0;
783 	pooled = 0;
784 	dynamic = -1;
785 
786 	for (i = 0; i < 4; i++) {
787 		if (strncmp(name, frc->fr_ifnames[i],
788 			    sizeof(frc->fr_ifnames[i])) == 0) {
789 			ifpflag = FRI_DYNAMIC;
790 			dynamic = i;
791 			return 0;
792 		}
793 	}
794 
795 	if (gethost(name, addr, use_inet6) == -1) {
796 		fprintf(stderr, "unknown name \"%s\"\n", name);
797 		return 0;
798 	}
799 	return 1;
800 }
801 
802 
803 static void dobpf(v, phrase)
804 int v;
805 char *phrase;
806 {
807 #ifdef IPFILTER_BPF
808 	struct bpf_program bpf;
809 	struct pcap *p;
810 #endif
811 	fakebpf_t *fb;
812 	u_32_t l;
813 	char *s;
814 	int i;
815 
816 	for (fr = frc; fr != NULL; fr = fr->fr_next) {
817 		if (fr->fr_type != FR_T_NONE) {
818 			fprintf(stderr, "cannot mix IPF and BPF matching\n");
819 			return;
820 		}
821 		fr->fr_v = v;
822 		fr->fr_type = FR_T_BPFOPC;
823 
824 		if (!strncmp(phrase, "\"0x", 2)) {
825 			phrase++;
826 			fb = malloc(sizeof(fakebpf_t));
827 			if (fb == NULL)
828 				ipf_yyerror("sorry, out of memory");
829 
830 			for (i = 0, s = strtok(phrase, " \r\n\t"); s != NULL;
831 			     s = strtok(NULL, " \r\n\t"), i++) {
832 				fb = realloc(fb, (i / 4 + 1) * sizeof(*fb));
833 				if (fb == NULL)
834 					ipf_yyerror("sorry, out of memory");
835 				l = (u_32_t)strtol(s, NULL, 0);
836 				switch (i & 3)
837 				{
838 				case 0 :
839 					fb[i / 4].fb_c = l & 0xffff;
840 					break;
841 				case 1 :
842 					fb[i / 4].fb_t = l & 0xff;
843 					break;
844 				case 2 :
845 					fb[i / 4].fb_f = l & 0xff;
846 					break;
847 				case 3 :
848 					fb[i / 4].fb_k = l;
849 					break;
850 				}
851 			}
852 			if ((i & 3) != 0) {
853 				fprintf(stderr,
854 					"Odd number of bytes in BPF code\n");
855 				exit(1);
856 			}
857 			i--;
858 			fr->fr_dsize = (i / 4 + 1) * sizeof(*fb);
859 			fr->fr_data = fb;
860 			return;
861 		}
862 
863 #ifdef IPFILTER_BPF
864 		bzero((char *)&bpf, sizeof(bpf));
865 		p = pcap_open_dead(DLT_RAW, 1);
866 		if (!p) {
867 			fprintf(stderr, "pcap_open_dead failed\n");
868 			return;
869 		}
870 
871 		if (pcap_compile(p, &bpf, phrase, 1, 0xffffffff)) {
872 			pcap_perror(p, "ipf");
873 			pcap_close(p);
874 			fprintf(stderr, "pcap parsing failed (%s)\n", phrase);
875 			return;
876 		}
877 		pcap_close(p);
878 
879 		fr->fr_dsize = bpf.bf_len * sizeof(struct bpf_insn);
880 		fr->fr_data = malloc(fr->fr_dsize);
881 		if (fr->fr_data == NULL)
882 			ipf_yyerror("sorry, out of memory");
883 		bcopy((char *)bpf.bf_insns, fr->fr_data, fr->fr_dsize);
884 		if (!bpf_validate(fr->fr_data, bpf.bf_len)) {
885 			fprintf(stderr, "BPF validation failed\n");
886 			return;
887 		}
888 #endif
889 	}
890 
891 #ifdef IPFILTER_BPF
892 	if (opts & OPT_DEBUG)
893 		bpf_dump(&bpf, 0);
894 #else
895 	fprintf(stderr, "BPF filter expressions not supported\n");
896 	exit(1);
897 #endif
898 }
899 
900 
901 static void resetaddr()
902 {
903 	hashed = 0;
904 	pooled = 0;
905 	dynamic = -1;
906 }
907 
908 
909 static alist_t *newalist(ptr)
910 alist_t *ptr;
911 {
912 	alist_t *al;
913 
914 	al = malloc(sizeof(*al));
915 	if (al == NULL)
916 		return NULL;
917 	al->al_not = 0;
918 	al->al_next = ptr;
919 	return al;
920 }
921 
922 
923 static int makepool(list)
924 alist_t *list;
925 {
926 	ip_pool_node_t *n, *top;
927 	ip_pool_t pool;
928 	alist_t *a;
929 	int num;
930 
931 	if (list == NULL)
932 		return 0;
933 	top = calloc(1, sizeof(*top));
934 	if (top == NULL)
935 		return 0;
936 
937 	for (n = top, a = list; (n != NULL) && (a != NULL); a = a->al_next) {
938 		n->ipn_addr.adf_family = a->al_family;
939 		n->ipn_mask.adf_family = a->al_family;
940 		(void *)bcopy((void *)&a->al_i6addr,
941 			      (void *)&n->ipn_addr.adf_addr,
942 			      sizeof(n->ipn_addr.adf_addr));
943 		(void *)bcopy((void *)&a->al_i6mask,
944 			      (void *)&n->ipn_mask.adf_addr,
945 			      sizeof(n->ipn_mask.adf_addr));
946 		n->ipn_info = a->al_not;
947 		if (a->al_next != NULL) {
948 			n->ipn_next = calloc(1, sizeof(*n));
949 			if (n->ipn_next == NULL)
950 				ipf_yyerror("sorry, out of memory");
951 			n = n->ipn_next;
952 		}
953 	}
954 
955 	bzero((char *)&pool, sizeof(pool));
956 	pool.ipo_unit = IPL_LOGIPF;
957 	pool.ipo_list = top;
958 	num = load_pool(&pool, ipfioctl[IPL_LOGLOOKUP]);
959 
960 	while ((n = top) != NULL) {
961 		top = n->ipn_next;
962 		free(n);
963 	}
964 	return num;
965 }
966 
967 
968 static u_int makehash(list)
969 alist_t *list;
970 {
971 	iphtent_t *n, *top;
972 	iphtable_t iph;
973 	alist_t *a;
974 	int num;
975 
976 	if (list == NULL)
977 		return 0;
978 	top = calloc(1, sizeof(*top));
979 	if (top == NULL)
980 		return 0;
981 
982 	for (n = top, a = list; (n != NULL) && (a != NULL); a = a->al_next) {
983 		n->ipe_family = a->al_family;
984 		(void *)bcopy((void *)&a->al_i6addr,
985 			      (void *)&n->ipe_addr,
986 			      sizeof(n->ipe_addr));
987 		(void *)bcopy((void *)&a->al_i6mask,
988 			      (void *)&n->ipe_mask,
989 			      sizeof(n->ipe_mask));
990 		n->ipe_value = 0;
991 		if (a->al_next != NULL) {
992 			n->ipe_next = calloc(1, sizeof(*n));
993 			if (n->ipe_next == NULL)
994 				ipf_yyerror("sorry, out of memory");
995 			n = n->ipe_next;
996 		}
997 	}
998 
999 	bzero((char *)&iph, sizeof(iph));
1000 	iph.iph_unit = IPL_LOGIPF;
1001 	iph.iph_type = IPHASH_LOOKUP;
1002 	*iph.iph_name = '\0';
1003 
1004 	if (load_hash(&iph, top, ipfioctl[IPL_LOGLOOKUP]) == 0)
1005 		sscanf(iph.iph_name, "%u", &num);
1006 	else
1007 		num = 0;
1008 
1009 	while ((n = top) != NULL) {
1010 		top = n->ipe_next;
1011 		free(n);
1012 	}
1013 	return num;
1014 }
1015 
1016 
1017 void ipf_addrule(fd, ioctlfunc, ptr)
1018 int fd;
1019 ioctlfunc_t ioctlfunc;
1020 void *ptr;
1021 {
1022 	ioctlcmd_t add, del;
1023 	frentry_t *fr;
1024 	ipfobj_t obj;
1025 
1026 	fr = ptr;
1027 	add = 0;
1028 	del = 0;
1029 
1030 	bzero((char *)&obj, sizeof(obj));
1031 	obj.ipfo_rev = IPFILTER_VERSION;
1032 	obj.ipfo_size = sizeof(*fr);
1033 	obj.ipfo_type = IPFOBJ_FRENTRY;
1034 	obj.ipfo_ptr = ptr;
1035 
1036 	if ((opts & OPT_DONOTHING) != 0)
1037 		fd = -1;
1038 
1039 	if (opts & OPT_ZERORULEST) {
1040 		add = SIOCZRLST;
1041 	} else if (opts & OPT_INACTIVE) {
1042 		add = (u_int)fr->fr_hits ? SIOCINIFR :
1043 					   SIOCADIFR;
1044 		del = SIOCRMIFR;
1045 	} else {
1046 		add = (u_int)fr->fr_hits ? SIOCINAFR :
1047 					   SIOCADAFR;
1048 		del = SIOCRMAFR;
1049 	}
1050 
1051 	if (fr && (opts & OPT_OUTQUE))
1052 		fr->fr_flags |= FR_OUTQUE;
1053 	if (fr->fr_hits)
1054 		fr->fr_hits--;
1055 	if (fr && (opts & OPT_VERBOSE))
1056 		printfr(fr, ioctlfunc);
1057 
1058 	if (opts & OPT_DEBUG) {
1059 		binprint(fr, sizeof(*fr));
1060 		if (fr->fr_data != NULL)
1061 			binprint(fr->fr_data, fr->fr_dsize);
1062 	}
1063 
1064 	if ((opts & OPT_ZERORULEST) != 0) {
1065 		if ((*ioctlfunc)(fd, add, (void *)&obj) == -1) {
1066 			if ((opts & OPT_DONOTHING) == 0) {
1067 				fprintf(stderr, "%d:", ipf_yylineNum);
1068 				perror("ioctl(SIOCZRLST)");
1069 			}
1070 		} else {
1071 #ifdef	USE_QUAD_T
1072 			printf("hits %qd bytes %qd ",
1073 				(long long)fr->fr_hits,
1074 				(long long)fr->fr_bytes);
1075 #else
1076 			printf("hits %ld bytes %ld ",
1077 				fr->fr_hits, fr->fr_bytes);
1078 #endif
1079 			printfr(fr, ioctlfunc);
1080 		}
1081 	} else if ((opts & OPT_REMOVE) != 0) {
1082 		if ((*ioctlfunc)(fd, del, (void *)&obj) == -1) {
1083 			if ((opts & OPT_DONOTHING) != 0) {
1084 				fprintf(stderr, "%d:", ipf_yylineNum);
1085 				perror("ioctl(delete rule)");
1086 			}
1087 		}
1088 	} else {
1089 		if ((*ioctlfunc)(fd, add, (void *)&obj) == -1) {
1090 			if (!(opts & OPT_DONOTHING)) {
1091 				fprintf(stderr, "%d:", ipf_yylineNum);
1092 				perror("ioctl(add/insert rule)");
1093 			}
1094 		}
1095 	}
1096 }
1097 
1098 static void setsyslog()
1099 {
1100 	ipf_yysetdict(logwords);
1101 	ipf_yybreakondot = 1;
1102 }
1103 
1104 
1105 static void unsetsyslog()
1106 {
1107 	ipf_yyresetdict();
1108 	ipf_yybreakondot = 0;
1109 }
1110 
1111 
1112 static void fillgroup(fr)
1113 frentry_t *fr;
1114 {
1115 	frentry_t *f;
1116 
1117 	for (f = frold; f != NULL; f = f->fr_next)
1118 		if (strncmp(f->fr_grhead, fr->fr_group, FR_GROUPLEN) == 0)
1119 			break;
1120 	if (f == NULL)
1121 		return;
1122 
1123 	/*
1124 	 * Only copy down matching fields if the rules are of the same type
1125 	 * and are of ipf type.   The only fields that are copied are those
1126 	 * that impact the rule parsing itself, eg. need for knowing what the
1127 	 * protocol should be for rules with port comparisons in them.
1128 	 */
1129 	if (f->fr_type != fr->fr_type || f->fr_type != FR_T_IPF)
1130 		return;
1131 
1132 	if (fr->fr_v == 0 && f->fr_v != 0)
1133 		fr->fr_v = f->fr_v;
1134 
1135 	if (fr->fr_mproto == 0 && f->fr_mproto != 0)
1136 		fr->fr_mproto = f->fr_mproto;
1137 	if (fr->fr_proto == 0 && f->fr_proto != 0)
1138 		fr->fr_proto = f->fr_proto;
1139 
1140 	if ((fr->fr_mproto == 0) && ((fr->fr_flx & FI_TCPUDP) == 0) &&
1141 	    ((f->fr_flx & FI_TCPUDP) != 0))
1142 		fr->fr_flx |= FI_TCPUDP;
1143 }
1144 static YYCONST ipf_yytabelem ipf_yyexca[] ={
1145 -1, 1,
1146 	0, -1,
1147 	-2, 8,
1148 -1, 386,
1149 	324, 229,
1150 	47, 229,
1151 	-2, 228,
1152 -1, 387,
1153 	324, 233,
1154 	47, 233,
1155 	-2, 232,
1156 -1, 423,
1157 	41, 296,
1158 	-2, 90,
1159 -1, 430,
1160 	41, 291,
1161 	-2, 90,
1162 -1, 452,
1163 	257, 261,
1164 	259, 261,
1165 	-2, 257,
1166 	};
1167 # define YYNPROD 466
1168 # define YYLAST 796
1169 static YYCONST ipf_yytabelem ipf_yyact[]={
1170 
1171    382,   572,   144,   317,   595,   327,   392,   502,   586,   439,
1172    571,   429,   603,   422,   343,   342,   393,     3,     2,    10,
1173      9,    87,    88,    89,    90,    91,    92,    93,    94,    95,
1174     96,   101,   102,   103,   104,   105,   106,   107,   108,   109,
1175     97,    98,    99,   100,   454,    79,    80,    81,    82,    83,
1176     84,    85,    86,   406,   455,   547,   456,   470,    79,    80,
1177     81,    82,    83,    84,    85,    86,   559,     7,     5,   453,
1178     21,   388,   361,   504,     1,   341,   311,   340,   376,   213,
1179    214,   215,   390,   330,   252,   300,   209,   286,   210,   257,
1180    289,   287,   337,   431,   248,   351,   246,   198,   199,   200,
1181    203,   204,   205,   208,   201,   202,   212,   350,   247,   501,
1182    211,   207,   191,   405,   438,   145,   206,   294,   258,   259,
1183    260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
1184    270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
1185    280,   281,   283,   452,   344,   548,   240,   373,   182,   237,
1186    216,   362,   363,   364,   365,   367,   368,   369,   366,   215,
1187    606,   605,   189,   250,   209,   250,   210,   288,   290,   291,
1188    292,   293,   249,   248,   249,   198,   199,   200,   203,   204,
1189    205,   208,   201,   202,   212,   345,   221,    51,   211,   207,
1190    426,   427,   166,   167,   206,   424,   425,   334,   428,   242,
1191      7,     5,   347,   245,   176,   302,   178,   179,   219,   170,
1192    505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
1193    515,   516,   517,   518,   519,   301,   297,   302,   607,   608,
1194    609,   610,   225,   224,   125,   126,    63,   328,   127,   132,
1195    128,   130,   133,   134,    27,    28,   177,   318,   319,   320,
1196     38,   183,   620,   183,    58,    59,    62,    60,    50,   387,
1197    477,   175,   122,   123,   223,   222,     8,   146,   147,   148,
1198    149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
1199    159,   160,   161,   402,   403,   183,   125,   126,   233,   234,
1200    127,   132,   532,   130,   133,   134,   385,    51,    45,   383,
1201    384,    44,    38,    53,    55,    54,   378,   183,   569,   443,
1202    442,   397,   396,   576,   122,   123,   379,   318,   319,   320,
1203     31,    41,    33,    36,   318,   319,   320,    18,   560,   387,
1204    440,   545,   391,   568,   443,   442,   326,   543,   495,   183,
1205    377,   490,   482,    39,    40,    38,   528,   183,   529,   481,
1206    408,   407,   480,    35,   408,   407,   213,   214,   215,   318,
1207    319,   320,   492,   209,   491,   210,   385,   522,   443,   442,
1208    419,   324,   418,   478,   198,   199,   200,   203,   204,   205,
1209    208,   201,   202,   212,   378,   412,   459,   211,   207,   318,
1210    319,   320,   338,   206,   379,   349,   304,   348,   305,     8,
1211    476,   316,   314,   307,   143,    48,    43,    17,   255,    77,
1212    196,   193,   310,   309,   354,   194,   163,   308,   411,   172,
1213    446,   238,   549,   171,   417,   462,   460,   216,   416,    20,
1214    447,   174,   448,    66,   467,   471,   581,   183,   386,   463,
1215    461,   120,    65,   119,   468,   472,   469,   473,   421,   432,
1216    521,   526,   530,   413,   503,    23,   457,   117,   434,   420,
1217    444,   523,   229,   542,   541,   525,    32,   116,   180,   181,
1218    145,   227,   520,   539,   474,   479,   318,   319,   320,   115,
1219    555,   554,   483,    71,   487,   486,   551,    57,   387,   395,
1220    552,   489,   533,   534,   536,   538,   535,   537,   228,    70,
1221    408,   407,   504,   563,    10,     9,   498,   494,   561,   562,
1222    142,   566,   141,   399,   497,   114,   524,   564,   110,   471,
1223     17,   550,   575,   574,   220,   385,   140,   540,    49,   472,
1224    567,   473,   553,   570,   124,   124,   139,   401,    74,   557,
1225    441,   443,   442,   400,    75,   580,   162,   583,   138,   578,
1226    577,   331,   184,   587,   587,   433,   318,   319,   320,   398,
1227    329,   588,   589,   331,   318,   319,   320,   591,   387,   370,
1228    593,   592,   186,   359,   226,   596,   387,   594,   601,    69,
1229    496,   602,   600,   597,   137,   493,   185,   135,   604,   604,
1230    183,   613,   612,   613,   614,   616,   615,   618,   611,   598,
1231    619,   617,   599,   621,   251,   385,   254,   556,   383,   384,
1232    415,   253,   546,   385,   544,   622,   383,   384,   404,   623,
1233    355,   624,   146,   147,   148,   149,   150,   151,   152,   153,
1234    154,   155,   156,   157,   158,   159,   160,   161,   312,   505,
1235    506,   507,   508,   509,   510,   511,   512,   513,   514,   515,
1236    516,   517,   518,   519,   318,   319,   320,   332,   313,    29,
1237    318,   319,   320,   358,   357,   356,   387,   315,   488,   323,
1238    325,   485,   387,   484,   353,   339,   485,   230,   231,   414,
1239    335,   243,   415,    73,    15,    22,   282,   284,   197,   195,
1240    423,   430,   352,   590,   500,   565,   437,   499,   436,    24,
1241    450,    42,    64,   385,   451,   585,   383,   384,   465,   385,
1242    584,   464,   381,   380,   475,   466,   389,   458,   445,   375,
1243    372,   192,   165,   374,   299,   394,   298,    72,    76,    61,
1244    129,   173,   558,   410,   435,   371,   296,   303,   218,   306,
1245    169,   232,   131,   136,   118,   111,    56,    52,    37,    34,
1246     30,   333,   236,   241,   188,   409,   336,   239,   346,   244,
1247    190,   164,   295,   217,   168,   121,   113,   112,    16,   235,
1248     68,    47,    26,   187,    67,    46,    25,    14,    13,    12,
1249     19,     6,    11,     4,   579,   582,   527,   321,   322,   449,
1250    285,   256,   573,   531,   360,    78 };
1251 static YYCONST ipf_yytabelem ipf_yypact[]={
1252 
1253   -192,  -192,-10000000,-10000000,   263,-10000000,-10000000,   368,  -387,-10000000,
1254 -10000000,-10000000,   396,   396,   -33,    50,   150,-10000000,   149,    42,
1255 -10000000,    39,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
1256 -10000000,-10000000,-10000000,-10000000,-10000000,   148,   -72,    29,   -42,   -39,
1257 -10000000,-10000000,    50,-10000000,   383,   374,-10000000,-10000000,-10000000,-10000000,
1258     38,   452,-10000000,   643,   643,-10000000,   -42,-10000000,-10000000,-10000000,
1259 -10000000,  -404,-10000000,-10000000,-10000000,-10000000,-10000000,   -45,     7,-10000000,
1260    147,-10000000,  -142,-10000000,-10000000,-10000000,-10000000,-10000000,   500,-10000000,
1261 -10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
1262 -10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
1263 -10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
1264   -122,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
1265 -10000000,   -80,   300,   296,-10000000,-10000000,     2,   -13,-10000000,   -13,
1266    -13,   211,-10000000,-10000000,-10000000,  -122,-10000000,-10000000,-10000000,-10000000,
1267 -10000000,-10000000,-10000000,-10000000,   545,-10000000,-10000000,-10000000,-10000000,-10000000,
1268 -10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
1269 -10000000,-10000000,  -391,  -140,  -234,  -237,-10000000,-10000000,   -82,   267,
1270 -10000000,     6,     5,   -49,   530,   413,   404,-10000000,   404,   404,
1271 -10000000,-10000000,    31,-10000000,  -153,-10000000,-10000000,  -165,  -102,   641,
1272    -88,  -174,    40,-10000000,-10000000,  -159,  -236,  -222,-10000000,-10000000,
1273 -10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
1274 -10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,   -79,   139,-10000000,
1275 -10000000,   146,   292,   288,   -13,   -13,     2,   145,   132,-10000000,
1276    102,    67,   519,-10000000,-10000000,  -165,  -104,   640,-10000000,  -259,
1277    135,-10000000,   635,  -151,   -90,   138,  -239,  -251,   634,   580,
1278    580,-10000000,  -237,-10000000,  -236,-10000000,   529,-10000000,-10000000,-10000000,
1279 -10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
1280 -10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
1281 -10000000,-10000000,  -228,-10000000,-10000000,   525,-10000000,-10000000,-10000000,-10000000,
1282 -10000000,-10000000,-10000000,-10000000,-10000000,-10000000,  -175,-10000000,-10000000,   307,
1283    299,-10000000,-10000000,-10000000,-10000000,   442,   519,-10000000,-10000000,-10000000,
1284 -10000000,   515,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,   467,-10000000,
1285 -10000000,   497,   491,-10000000,-10000000,-10000000,-10000000,-10000000,    26,-10000000,
1286 -10000000,-10000000,-10000000,-10000000,   578,  -151,   295,   128,-10000000,  -151,
1287    638,-10000000,-10000000,-10000000,   367,   363,-10000000,   113,-10000000,-10000000,
1288   -176,  -253,-10000000,  -154,-10000000,  -257,-10000000,-10000000,-10000000,  -236,
1289    511,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
1290   -222,  -218,   283,-10000000,   -57,  -186,  -186,   397,-10000000,   -10,
1291    379,   378,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,  -186,
1292   -186,   397,-10000000,   -10,     1,-10000000,-10000000,   116,   -13,    95,
1293     92,    85,-10000000,-10000000,  -151,   632,-10000000,-10000000,-10000000,-10000000,
1294   -192,-10000000,   437,   627,-10000000,  -151,    84,   105,-10000000,-10000000,
1295 -10000000,-10000000,   544,   507,    81,-10000000,-10000000,-10000000,-10000000,   539,
1296    507,-10000000,-10000000,  -228,-10000000,-10000000,  -224,   245,-10000000,   425,
1297    110,   414,-10000000,-10000000,   299,-10000000,-10000000,-10000000,   550,    89,
1298     89,   231,-10000000,-10000000,-10000000,-10000000,   550,  -186,   519,-10000000,
1299     80,   574,    74,   572,    98,    98,-10000000,-10000000,-10000000,   550,
1300 -10000000,-10000000,-10000000,   550,  -186,   519,-10000000,-10000000,-10000000,-10000000,
1301 -10000000,-10000000,-10000000,   566,-10000000,  -151,   -59,    71,-10000000,-10000000,
1302 -10000000,-10000000,-10000000,-10000000,  -154,-10000000,-10000000,  -257,-10000000,-10000000,
1303    213,-10000000,-10000000,  -184,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
1304 -10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
1305     76,-10000000,-10000000,    51,-10000000,    89,-10000000,-10000000,-10000000,-10000000,
1306    255,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,    89,
1307 -10000000,-10000000,   -10,-10000000,   403,-10000000,    60,-10000000,-10000000,-10000000,
1308 -10000000,    89,    89,-10000000,-10000000,   -10,-10000000,-10000000,-10000000,-10000000,
1309 -10000000,-10000000,-10000000,-10000000,  -142,   519,-10000000,-10000000,-10000000,-10000000,
1310 -10000000,   519,-10000000,    89,-10000000,-10000000,-10000000,   519,-10000000,   558,
1311 -10000000,    60,   537,-10000000,   -97,   -97,   519,-10000000,   519,-10000000,
1312    519,-10000000,-10000000,  -184,-10000000,    89,-10000000,-10000000,-10000000,   219,
1313 -10000000,-10000000,    60,-10000000,-10000000,-10000000,   467,-10000000,-10000000,-10000000,
1314 -10000000,-10000000,-10000000,    89,-10000000,-10000000,  -142,-10000000,-10000000,-10000000,
1315     60,-10000000,-10000000,-10000000,-10000000 };
1316 static YYCONST ipf_yytabelem ipf_yypgo[]={
1317 
1318      0,     1,   795,   409,     2,    72,   794,     7,    89,   793,
1319    792,   415,     9,   791,   790,    87,   789,    56,     3,   788,
1320    787,   438,    12,     6,     0,   786,    76,   431,    54,    44,
1321    785,   784,    74,    18,    17,   783,   782,   781,   780,   779,
1322    685,   778,   777,   776,   775,   774,   518,   416,   773,   421,
1323    772,   771,   770,   769,   684,   659,   768,   767,   766,   765,
1324    764,   763,   762,   761,   760,   759,   758,   757,   756,   755,
1325    754,   753,   752,   751,   750,   466,   749,   528,   748,   747,
1326    483,   746,   745,   515,   479,   467,   457,   744,   443,   441,
1327    743,   742,    16,   741,     5,     4,   740,   739,    83,   738,
1328    737,   736,   735,   734,    77,    75,    15,    14,   113,    53,
1329    733,   732,   731,   412,   498,   730,   487,   729,   728,   727,
1330    726,   725,   724,   723,    85,    71,   722,   721,   720,   719,
1331    718,    78,    69,   717,    10,   716,   715,    82,    57,   714,
1332      8,   713,   712,   711,    55,   710,   708,   705,   704,   700,
1333    698,   697,   696,   695,   694,   693,    96,   108,   692,   414,
1334     11,   691,    13,   690,   411,   689,   410,   408,   688,   687,
1335    686 };
1336 static YYCONST ipf_yytabelem ipf_yyr1[]={
1337 
1338      0,    32,    32,    32,    32,    33,    33,    33,    35,    34,
1339     38,    37,    36,    36,    40,    40,    44,    39,    51,    41,
1340     42,    42,    43,    50,    46,    46,    57,    58,    58,    47,
1341     49,    48,    53,    56,    54,    54,    55,    55,    55,    55,
1342     55,    55,    55,    55,    74,    74,    78,    79,    79,    79,
1343     79,    79,    75,    75,    76,    76,    76,    77,    45,    45,
1344     82,    82,    82,    82,    82,    82,    82,    52,    52,    90,
1345     90,    90,    90,    90,    90,    59,    59,    59,    59,    91,
1346     93,    93,    93,    93,    60,    60,    60,    92,    94,    95,
1347     98,    98,    96,    97,    97,    61,    61,    99,    62,    66,
1348     66,    66,    65,    65,    65,    70,    70,   104,   104,   105,
1349    105,   107,   107,   106,    72,    72,   108,   108,   109,   109,
1350     71,    71,    73,    73,    67,    67,    69,    69,   110,   111,
1351     83,    84,    85,    85,    85,   112,   112,   113,   113,    86,
1352     86,    86,   114,    87,    88,    88,    88,   115,   115,    89,
1353     89,    89,    81,    81,   116,   116,   116,   116,    80,   119,
1354    101,   101,   101,   100,   100,   100,   121,   120,   120,   120,
1355    122,   124,    63,    63,   126,   126,   102,   102,   102,   102,
1356    102,   102,   102,   102,   102,   128,    12,    12,   129,   123,
1357    123,   123,   131,   131,   133,   133,   132,   132,   132,   132,
1358    130,   130,   130,   134,   134,   135,   125,   125,   125,   137,
1359    137,   139,   139,   138,   138,   138,   138,   136,   136,   136,
1360    140,   140,    23,    23,    23,    23,    23,    24,    24,   143,
1361    145,    24,    24,   146,   147,    24,   144,   144,    22,    22,
1362     22,    22,    22,    22,    22,    21,    21,    21,    21,    30,
1363     30,   141,   142,    31,    31,    31,    31,   148,    16,    16,
1364     17,   149,    29,    28,   103,   103,   150,   150,   152,   151,
1365    151,   151,   154,   153,   153,   155,   155,    68,    68,    68,
1366     64,    64,    64,    64,    64,   156,   157,   157,   159,   159,
1367    160,   160,   161,   158,   158,   162,   162,   163,   163,   163,
1368    163,   163,     1,     1,   127,   127,   127,   164,   164,   164,
1369    164,   164,   166,   168,   165,   165,    11,    11,    11,    11,
1370     11,    11,    11,    11,    11,    11,    11,    11,    11,    11,
1371     11,   167,    13,    13,   169,    14,    14,     6,     6,     5,
1372      5,     5,     5,     5,     5,     5,     5,     7,     7,     7,
1373      7,     7,     7,     7,     7,     7,     7,     7,     7,     7,
1374      7,     7,     7,     4,     4,     4,     4,     4,     4,     4,
1375      4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
1376      8,     8,     8,     8,     8,     8,     8,     8,     8,     8,
1377      8,     8,     8,     8,     8,     8,     8,     8,     8,     8,
1378      8,     8,     8,     8,     8,   170,    15,    15,    15,    15,
1379     15,    15,    15,    15,   117,   118,   118,     2,     2,     2,
1380      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1381      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1382      3,     3,     3,     3,     3,     3,     3,     3,     9,     9,
1383      9,     9,     9,     9,    10,    10,    10,    25,    27,    27,
1384     26,    19,    20,    18,    18,    18 };
1385 static YYCONST ipf_yytabelem ipf_yyr2[]={
1386 
1387      0,     2,     2,     4,     4,     5,     2,     2,     1,     9,
1388      3,     9,     4,     4,     0,     2,     1,    16,     1,    16,
1389      4,     6,     3,     3,     2,     2,     8,     9,     9,     8,
1390      6,     4,     4,     5,     0,     3,     2,     3,     2,     3,
1391      2,     5,     4,     7,     2,     4,     3,     3,     5,     3,
1392      5,     3,     3,     5,     3,     5,     3,     7,     0,     4,
1393      3,     3,     3,     3,     3,     3,     3,     0,     4,     3,
1394      3,     3,     3,     3,     3,     0,     5,     5,     8,     3,
1395      3,     3,     7,     7,     0,     5,     8,     3,     3,     3,
1396      0,     2,     3,     3,     7,     0,     5,     3,     6,     0,
1397      5,     5,     0,     5,     5,     0,     8,     2,     6,     2,
1398      2,     7,     7,     7,     0,     8,     2,     6,     2,     2,
1399      0,     8,     0,     8,     0,     5,     0,     6,     2,     2,
1400      2,     3,     4,     8,     8,     3,     7,     3,     7,     5,
1401      9,     9,     3,     3,     5,     9,     9,     2,     2,     5,
1402      9,     9,     2,     4,     3,     3,     3,     5,     7,     3,
1403      0,     2,     2,     3,     3,     7,     3,     9,     5,     5,
1404      3,     3,     0,     4,     3,     3,     0,     5,     9,     7,
1405      5,     7,     9,     9,     9,     3,     3,     3,     1,     4,
1406      4,     7,     3,     6,     3,     7,     0,     3,     3,     9,
1407      3,     3,     9,     3,     7,     1,     4,     4,     7,     3,
1408      6,     3,     7,     0,     3,     3,     9,     3,     3,     9,
1409      3,     7,     7,    11,     7,    11,     3,     3,     3,     1,
1410      1,    11,     3,     1,     1,    11,     2,     2,     3,     3,
1411      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
1412      7,     3,     3,     3,     5,     7,     9,     3,     5,     3,
1413      5,     3,     5,     9,     0,     4,     5,     9,     3,     0,
1414      5,     9,     3,     3,     7,     3,     7,     0,     5,     9,
1415      0,     4,     4,     8,     8,     5,     5,     5,     0,     6,
1416      6,     2,     3,     0,     6,     6,     2,     5,     3,     3,
1417      3,     3,     3,     3,     2,     4,     6,     3,     5,     5,
1418      7,     5,     3,     3,     3,     3,     3,     3,     3,     3,
1419      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
1420      3,     3,     3,     7,     3,     3,     7,     3,     7,     3,
1421      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
1422      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
1423      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
1424      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
1425      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
1426      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
1427      3,     3,     3,     3,     5,     3,     3,     3,     3,     3,
1428      3,     3,     3,     3,     3,     3,     7,     3,     3,     3,
1429      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
1430      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
1431      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
1432      3,     3,     3,     3,     3,     3,     3,     3,     3,     7,
1433      3,     7,     7,     7,     2,     2 };
1434 static YYCONST ipf_yytabelem ipf_yychk[]={
1435 
1436 -10000000,   -32,   -33,   -34,   -35,   260,   -37,   259,   458,   -33,
1437    -34,   -36,   -39,   -41,   -42,   -54,   -56,   257,    64,   -38,
1438     61,   457,   -40,    59,   -40,   -43,   -50,   277,   278,   -55,
1439    -74,   270,   -75,   272,   -76,   303,   273,   -78,   295,   293,
1440    294,   271,   -54,   257,   259,   259,   -44,   -51,   257,   -77,
1441    330,   259,   -79,   274,   276,   275,   -81,  -116,   296,   297,
1442    299,  -117,   298,   275,   -55,    59,    59,   -45,   -52,   -77,
1443     47,   -80,  -119,    40,   -80,  -116,  -118,    -3,    -2,   449,
1444    450,   451,   452,   453,   454,   455,   456,   425,   426,   427,
1445    428,   429,   430,   431,   432,   433,   434,   444,   445,   446,
1446    447,   435,   436,   437,   438,   439,   440,   441,   442,   443,
1447    -46,   -82,   -57,   -58,   -83,   -84,   -85,   -86,   -87,   -88,
1448    -89,   -59,   307,   308,   -75,   279,   280,   283,   285,  -115,
1449    286,   -91,   284,   287,   288,   -46,   -90,   -83,   -84,   -85,
1450    -86,   -88,   -89,   257,    -4,   257,   409,   410,   411,   412,
1451    413,   414,   415,   416,   417,   418,   419,   420,   421,   422,
1452    423,   424,    46,   -47,   -63,  -126,   314,   315,   -60,   -96,
1453    289,   123,   123,  -112,   -27,   259,   -26,   259,   -26,   -26,
1454    257,   258,   -92,    40,   -47,    41,    -3,   -48,   -70,   302,
1455    -64,   346,  -127,  -164,   -11,  -165,  -166,  -168,   334,   335,
1456    336,   341,   342,   337,   338,   339,   353,   348,   340,   323,
1457    325,   347,   343,   316,   317,   318,   387,   -61,   -99,   290,
1458    257,   -92,   259,   259,   282,   281,    44,    58,  -114,    58,
1459   -114,  -114,   -93,   257,   258,   -53,   -72,   302,   -49,   -67,
1460    311,   -71,   301,    40,   -65,   291,  -156,  -157,   347,   348,
1461    339,  -164,    44,   -11,  -166,  -167,   -13,    -8,   354,   355,
1462    356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
1463    366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
1464    376,   377,  -170,   378,  -169,   -14,   -15,   313,   389,   312,
1465    390,   391,   392,   393,   339,   -62,  -101,   305,  -120,  -122,
1466   -124,   304,   284,  -100,   257,   259,   -97,   257,   125,   125,
1467   -113,   -26,  -113,   -27,   257,   -21,   269,   -18,   257,   258,
1468    259,   -20,   -19,   -21,   269,   -21,   269,   -94,   -95,    41,
1469    -98,    44,   -49,   -73,   301,    40,   -68,   351,   257,    40,
1470   -104,  -105,  -106,  -107,   295,   336,   -66,   292,   259,   257,
1471    346,   346,  -158,    40,  -159,    40,  -159,  -164,  -167,    44,
1472     -6,    -5,   379,   380,   381,   382,   386,   383,   384,   385,
1473     44,  -102,  -128,   322,  -123,  -129,  -131,    33,   -23,   -92,
1474   -141,  -142,   -24,   309,   310,   306,   -21,   269,  -125,  -135,
1475   -137,    33,   -23,   -92,  -121,    47,   -94,   -95,    44,    46,
1476     46,    46,   257,   258,    40,  -108,  -109,  -106,  -107,   -69,
1477   -110,   123,   257,  -108,    41,    44,    61,    61,   259,   257,
1478   -157,  -156,  -162,  -163,   349,   350,   344,   345,   352,  -160,
1479   -161,   350,    -8,    44,   -15,  -103,  -150,  -152,   332,   -12,
1480     47,   257,   259,   258,  -124,  -130,   -29,   -28,   -17,   -16,
1481   -149,  -148,   329,  -132,   -29,   -28,   -17,  -131,  -133,   -23,
1482     47,    61,    47,    61,  -143,  -146,  -136,   -29,   -28,   -17,
1483   -138,   -29,   -28,   -17,  -137,  -139,   -23,   259,   257,   -26,
1484    257,   257,   257,  -104,    41,    44,   -32,    47,    41,  -105,
1485    257,   259,   257,    41,   -98,   257,    41,   -98,    -5,  -151,
1486   -154,   333,    -7,   -92,   257,   394,   395,   396,   397,   398,
1487    399,   400,   401,   402,   403,   404,   405,   406,   407,   408,
1488     47,   -12,   257,    47,  -125,   -92,    -1,   -25,   257,   259,
1489     -1,    -9,    61,   261,   262,   265,   263,   266,   264,   -92,
1490   -132,   -94,   -95,   257,    40,   257,    40,  -144,    47,   324,
1491   -144,   -92,   -92,  -138,   -94,   -95,    41,  -109,  -111,   125,
1492    257,  -162,  -160,    -4,   -92,  -153,    -7,   -12,   257,   257,
1493    -12,  -134,    -1,   -10,   268,   267,    58,  -134,   -23,   -31,
1494    -24,    33,   -30,   -24,  -145,  -147,  -140,    -1,  -140,   -23,
1495   -155,    -4,   -94,   -95,   -94,   -95,    -1,   -94,    41,    44,
1496    -24,    41,    44,   -22,   -18,   258,   257,   325,   326,   327,
1497    328,   -22,   -94,   -95,   -94,   -94,   -95,    -7,    -1,   -24,
1498     33,   -24,    -1,    -4,   -24 };
1499 static YYCONST ipf_yytabelem ipf_yydef[]={
1500 
1501      8,    -2,     1,     2,    34,     6,     7,     0,     0,     3,
1502      4,     5,    14,    14,     0,     0,    34,    35,     0,     0,
1503     10,     0,    12,    15,    13,    16,    18,    22,    23,    20,
1504     36,    37,    38,    39,    40,     0,     0,    44,    52,    54,
1505     56,    46,     0,    33,     0,     0,    58,    67,    41,    42,
1506      0,     0,    45,    47,    49,    51,    53,   152,   154,   155,
1507    156,     0,   414,    55,    21,     9,    11,    75,    75,    43,
1508      0,    48,     0,   159,    50,   153,   157,   415,     0,   440,
1509    441,   442,   443,   444,   445,   446,   447,   417,   418,   419,
1510    420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
1511    430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
1512    172,    59,    24,    25,    60,    61,    62,    63,    64,    65,
1513     66,    84,     0,     0,   130,   131,     0,     0,   143,     0,
1514      0,     0,   147,   148,    79,   172,    68,    69,    70,    71,
1515     72,    73,    74,    57,     0,   363,   364,   365,   366,   367,
1516    368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
1517    378,   379,     0,   105,   280,     0,   174,   175,    95,     0,
1518     92,     0,     0,   132,   135,   458,   139,   460,   144,   149,
1519     76,    77,     0,    87,   114,   158,   416,   124,   120,     0,
1520    102,     0,   173,   304,   307,     0,     0,     0,   316,   317,
1521    318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
1522    328,   329,   330,   314,   315,   312,   313,   160,     0,    97,
1523     85,     0,     0,     0,     0,     0,     0,     0,     0,   142,
1524      0,     0,    90,    80,    81,   124,   122,     0,    17,   277,
1525      0,    31,     0,     0,    99,     0,   281,   282,   293,   288,
1526    288,   305,     0,   308,     0,   309,   331,   332,   380,   381,
1527    382,   383,   384,   385,   386,   387,   388,   389,   390,   391,
1528    392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
1529    402,   403,     0,   405,   311,   334,   335,   406,   407,   408,
1530    409,   410,   411,   412,   413,    26,   176,   161,   162,   188,
1531    205,   170,   171,    96,   163,   164,    90,    93,    27,    28,
1532    133,   137,   134,   136,   459,   140,   141,   245,   246,   247,
1533    248,   464,   465,   145,   146,   150,   151,    78,     0,    88,
1534     89,    91,    19,    32,     0,     0,   126,     0,   125,     0,
1535      0,   107,   109,   110,     0,     0,    29,     0,   103,   104,
1536      0,     0,   285,     0,   286,     0,   287,   306,   310,     0,
1537    404,   337,   339,   340,   341,   342,   343,   344,   345,   346,
1538      0,   264,     0,   185,   169,     0,   196,     0,   192,     0,
1539      0,     0,   226,   251,   252,   227,    -2,    -2,   168,     0,
1540    213,     0,   209,     0,     0,   166,    86,     0,     0,     0,
1541      0,     0,    82,    83,     0,     0,   116,   118,   119,    30,
1542      8,   128,   278,     0,   106,     0,     0,     0,   100,   101,
1543    283,   284,     0,    -2,     0,   298,   299,   300,   301,     0,
1544     -2,   292,   333,     0,   336,    98,   269,     0,   268,   177,
1545      0,   180,   186,   187,   205,   189,   200,   201,   259,     0,
1546      0,     0,    -2,   190,   197,   198,   259,   196,    90,   194,
1547      0,     0,     0,     0,     0,     0,   206,   217,   218,   259,
1548    207,   214,   215,   259,   213,    90,   211,   165,    94,   138,
1549    461,   463,   462,     0,   115,     0,     8,     0,   121,   108,
1550    113,   111,   112,   294,     0,   297,   289,     0,   338,   265,
1551      0,   272,   266,     0,   347,   348,   349,   350,   351,   352,
1552    353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
1553      0,   179,   181,     0,   167,     0,   262,   302,   303,   457,
1554      0,   258,   260,   448,   449,   450,   451,   452,   453,     0,
1555    191,   193,     0,   222,     0,   224,     0,   230,   236,   237,
1556    234,     0,     0,   208,   210,     0,   123,   117,   127,   129,
1557    279,   295,   290,   270,     0,    90,   273,   178,   183,   182,
1558    184,    90,   203,     0,   454,   455,   456,    90,   195,     0,
1559    253,     0,     0,   249,     0,     0,    90,   220,    90,   212,
1560     90,   275,   267,     0,   202,     0,   263,   199,   223,     0,
1561    254,   225,     0,   231,   238,   239,   240,   241,   242,   243,
1562    244,   235,   219,     0,   216,   271,     0,   274,   204,   255,
1563      0,   250,   221,   276,   256 };
1564 typedef struct
1565 #ifdef __cplusplus
1566 	ipf_yytoktype
1567 #endif
1568 {
1569 #ifdef __cplusplus
1570 const
1571 #endif
1572 char *t_name; int t_val; } ipf_yytoktype;
1573 #ifndef YYDEBUG
1574 #	define YYDEBUG	0	/* don't allow debugging */
1575 #endif
1576 
1577 #if YYDEBUG
1578 
1579 ipf_yytoktype ipf_yytoks[] =
1580 {
1581 	"YY_NUMBER",	257,
1582 	"YY_HEX",	258,
1583 	"YY_STR",	259,
1584 	"YY_COMMENT",	260,
1585 	"YY_CMP_EQ",	261,
1586 	"YY_CMP_NE",	262,
1587 	"YY_CMP_LE",	263,
1588 	"YY_CMP_GE",	264,
1589 	"YY_CMP_LT",	265,
1590 	"YY_CMP_GT",	266,
1591 	"YY_RANGE_OUT",	267,
1592 	"YY_RANGE_IN",	268,
1593 	"YY_IPV6",	269,
1594 	"IPFY_PASS",	270,
1595 	"IPFY_BLOCK",	271,
1596 	"IPFY_COUNT",	272,
1597 	"IPFY_CALL",	273,
1598 	"IPFY_RETICMP",	274,
1599 	"IPFY_RETRST",	275,
1600 	"IPFY_RETICMPASDST",	276,
1601 	"IPFY_IN",	277,
1602 	"IPFY_OUT",	278,
1603 	"IPFY_QUICK",	279,
1604 	"IPFY_ON",	280,
1605 	"IPFY_OUTVIA",	281,
1606 	"IPFY_INVIA",	282,
1607 	"IPFY_DUPTO",	283,
1608 	"IPFY_TO",	284,
1609 	"IPFY_FROUTE",	285,
1610 	"IPFY_REPLY_TO",	286,
1611 	"IPFY_ROUTETO",	287,
1612 	"IPFY_TOS",	288,
1613 	"IPFY_TTL",	289,
1614 	"IPFY_PROTO",	290,
1615 	"IPFY_HEAD",	291,
1616 	"IPFY_GROUP",	292,
1617 	"IPFY_AUTH",	293,
1618 	"IPFY_PREAUTH",	294,
1619 	"IPFY_LOG",	295,
1620 	"IPFY_BODY",	296,
1621 	"IPFY_FIRST",	297,
1622 	"IPFY_LEVEL",	298,
1623 	"IPFY_ORBLOCK",	299,
1624 	"IPFY_LOGTAG",	300,
1625 	"IPFY_MATCHTAG",	301,
1626 	"IPFY_SETTAG",	302,
1627 	"IPFY_SKIP",	303,
1628 	"IPFY_FROM",	304,
1629 	"IPFY_ALL",	305,
1630 	"IPFY_ANY",	306,
1631 	"IPFY_BPFV4",	307,
1632 	"IPFY_BPFV6",	308,
1633 	"IPFY_POOL",	309,
1634 	"IPFY_HASH",	310,
1635 	"IPFY_PPS",	311,
1636 	"IPFY_ESP",	312,
1637 	"IPFY_AH",	313,
1638 	"IPFY_WITH",	314,
1639 	"IPFY_AND",	315,
1640 	"IPFY_NOT",	316,
1641 	"IPFY_NO",	317,
1642 	"IPFY_OPT",	318,
1643 	"IPFY_TCPUDP",	319,
1644 	"IPFY_TCP",	320,
1645 	"IPFY_UDP",	321,
1646 	"IPFY_FLAGS",	322,
1647 	"IPFY_MULTICAST",	323,
1648 	"IPFY_MASK",	324,
1649 	"IPFY_BROADCAST",	325,
1650 	"IPFY_NETWORK",	326,
1651 	"IPFY_NETMASKED",	327,
1652 	"IPFY_PEER",	328,
1653 	"IPFY_PORT",	329,
1654 	"IPFY_NOW",	330,
1655 	"IPFY_ICMP",	331,
1656 	"IPFY_ICMPTYPE",	332,
1657 	"IPFY_ICMPCODE",	333,
1658 	"IPFY_IPOPTS",	334,
1659 	"IPFY_SHORT",	335,
1660 	"IPFY_NAT",	336,
1661 	"IPFY_BADSRC",	337,
1662 	"IPFY_LOWTTL",	338,
1663 	"IPFY_FRAG",	339,
1664 	"IPFY_MBCAST",	340,
1665 	"IPFY_BAD",	341,
1666 	"IPFY_BADNAT",	342,
1667 	"IPFY_OOW",	343,
1668 	"IPFY_NEWISN",	344,
1669 	"IPFY_NOICMPERR",	345,
1670 	"IPFY_KEEP",	346,
1671 	"IPFY_STATE",	347,
1672 	"IPFY_FRAGS",	348,
1673 	"IPFY_LIMIT",	349,
1674 	"IPFY_STRICT",	350,
1675 	"IPFY_AGE",	351,
1676 	"IPFY_SYNC",	352,
1677 	"IPFY_FRAGBODY",	353,
1678 	"IPFY_IPOPT_NOP",	354,
1679 	"IPFY_IPOPT_RR",	355,
1680 	"IPFY_IPOPT_ZSU",	356,
1681 	"IPFY_IPOPT_MTUP",	357,
1682 	"IPFY_IPOPT_MTUR",	358,
1683 	"IPFY_IPOPT_ENCODE",	359,
1684 	"IPFY_IPOPT_TS",	360,
1685 	"IPFY_IPOPT_TR",	361,
1686 	"IPFY_IPOPT_SEC",	362,
1687 	"IPFY_IPOPT_LSRR",	363,
1688 	"IPFY_IPOPT_ESEC",	364,
1689 	"IPFY_IPOPT_CIPSO",	365,
1690 	"IPFY_IPOPT_SATID",	366,
1691 	"IPFY_IPOPT_SSRR",	367,
1692 	"IPFY_IPOPT_ADDEXT",	368,
1693 	"IPFY_IPOPT_VISA",	369,
1694 	"IPFY_IPOPT_IMITD",	370,
1695 	"IPFY_IPOPT_EIP",	371,
1696 	"IPFY_IPOPT_FINN",	372,
1697 	"IPFY_IPOPT_DPS",	373,
1698 	"IPFY_IPOPT_SDB",	374,
1699 	"IPFY_IPOPT_NSAPA",	375,
1700 	"IPFY_IPOPT_RTRALRT",	376,
1701 	"IPFY_IPOPT_UMP",	377,
1702 	"IPFY_SECCLASS",	378,
1703 	"IPFY_SEC_UNC",	379,
1704 	"IPFY_SEC_CONF",	380,
1705 	"IPFY_SEC_RSV1",	381,
1706 	"IPFY_SEC_RSV2",	382,
1707 	"IPFY_SEC_RSV4",	383,
1708 	"IPFY_SEC_SEC",	384,
1709 	"IPFY_SEC_TS",	385,
1710 	"IPFY_SEC_RSV3",	386,
1711 	"IPF6_V6HDRS",	387,
1712 	"IPFY_IPV6OPT",	388,
1713 	"IPFY_IPV6OPT_DSTOPTS",	389,
1714 	"IPFY_IPV6OPT_HOPOPTS",	390,
1715 	"IPFY_IPV6OPT_IPV6",	391,
1716 	"IPFY_IPV6OPT_NONE",	392,
1717 	"IPFY_IPV6OPT_ROUTING",	393,
1718 	"IPFY_ICMPT_UNR",	394,
1719 	"IPFY_ICMPT_ECHO",	395,
1720 	"IPFY_ICMPT_ECHOR",	396,
1721 	"IPFY_ICMPT_SQUENCH",	397,
1722 	"IPFY_ICMPT_REDIR",	398,
1723 	"IPFY_ICMPT_TIMEX",	399,
1724 	"IPFY_ICMPT_PARAMP",	400,
1725 	"IPFY_ICMPT_TIMEST",	401,
1726 	"IPFY_ICMPT_TIMESTREP",	402,
1727 	"IPFY_ICMPT_INFOREQ",	403,
1728 	"IPFY_ICMPT_INFOREP",	404,
1729 	"IPFY_ICMPT_MASKREQ",	405,
1730 	"IPFY_ICMPT_MASKREP",	406,
1731 	"IPFY_ICMPT_ROUTERAD",	407,
1732 	"IPFY_ICMPT_ROUTERSOL",	408,
1733 	"IPFY_ICMPC_NETUNR",	409,
1734 	"IPFY_ICMPC_HSTUNR",	410,
1735 	"IPFY_ICMPC_PROUNR",	411,
1736 	"IPFY_ICMPC_PORUNR",	412,
1737 	"IPFY_ICMPC_NEEDF",	413,
1738 	"IPFY_ICMPC_SRCFAIL",	414,
1739 	"IPFY_ICMPC_NETUNK",	415,
1740 	"IPFY_ICMPC_HSTUNK",	416,
1741 	"IPFY_ICMPC_ISOLATE",	417,
1742 	"IPFY_ICMPC_NETPRO",	418,
1743 	"IPFY_ICMPC_HSTPRO",	419,
1744 	"IPFY_ICMPC_NETTOS",	420,
1745 	"IPFY_ICMPC_HSTTOS",	421,
1746 	"IPFY_ICMPC_FLTPRO",	422,
1747 	"IPFY_ICMPC_HSTPRE",	423,
1748 	"IPFY_ICMPC_CUTPRE",	424,
1749 	"IPFY_FAC_KERN",	425,
1750 	"IPFY_FAC_USER",	426,
1751 	"IPFY_FAC_MAIL",	427,
1752 	"IPFY_FAC_DAEMON",	428,
1753 	"IPFY_FAC_AUTH",	429,
1754 	"IPFY_FAC_SYSLOG",	430,
1755 	"IPFY_FAC_LPR",	431,
1756 	"IPFY_FAC_NEWS",	432,
1757 	"IPFY_FAC_UUCP",	433,
1758 	"IPFY_FAC_CRON",	434,
1759 	"IPFY_FAC_LOCAL0",	435,
1760 	"IPFY_FAC_LOCAL1",	436,
1761 	"IPFY_FAC_LOCAL2",	437,
1762 	"IPFY_FAC_LOCAL3",	438,
1763 	"IPFY_FAC_LOCAL4",	439,
1764 	"IPFY_FAC_LOCAL5",	440,
1765 	"IPFY_FAC_LOCAL6",	441,
1766 	"IPFY_FAC_LOCAL7",	442,
1767 	"IPFY_FAC_SECURITY",	443,
1768 	"IPFY_FAC_FTP",	444,
1769 	"IPFY_FAC_AUTHPRIV",	445,
1770 	"IPFY_FAC_AUDIT",	446,
1771 	"IPFY_FAC_LFMT",	447,
1772 	"IPFY_FAC_CONSOLE",	448,
1773 	"IPFY_PRI_EMERG",	449,
1774 	"IPFY_PRI_ALERT",	450,
1775 	"IPFY_PRI_CRIT",	451,
1776 	"IPFY_PRI_ERR",	452,
1777 	"IPFY_PRI_WARN",	453,
1778 	"IPFY_PRI_NOTICE",	454,
1779 	"IPFY_PRI_INFO",	455,
1780 	"IPFY_PRI_DEBUG",	456,
1781 	"IPFY_SET_LOOPBACK",	457,
1782 	"IPFY_SET",	458,
1783 	"-unknown-",	-1	/* ends search */
1784 };
1785 
1786 #ifdef __cplusplus
1787 const
1788 #endif
1789 char * ipf_yyreds[] =
1790 {
1791 	"-no such reduction-",
1792 	"file : line",
1793 	"file : assign",
1794 	"file : file line",
1795 	"file : file assign",
1796 	"line : xx rule",
1797 	"line : YY_COMMENT",
1798 	"line : set",
1799 	"xx : /* empty */",
1800 	"assign : YY_STR assigning YY_STR ';'",
1801 	"assigning : '='",
1802 	"set : IPFY_SET IPFY_SET_LOOPBACK YY_STR ';'",
1803 	"rule : inrule eol",
1804 	"rule : outrule eol",
1805 	"eol : /* empty */",
1806 	"eol : ';'",
1807 	"inrule : rulehead markin",
1808 	"inrule : rulehead markin inopts rulemain ruletail intag ruletail2",
1809 	"outrule : rulehead markout",
1810 	"outrule : rulehead markout outopts rulemain ruletail outtag ruletail2",
1811 	"rulehead : collection action",
1812 	"rulehead : insert collection action",
1813 	"markin : IPFY_IN",
1814 	"markout : IPFY_OUT",
1815 	"rulemain : ipfrule",
1816 	"rulemain : bpfrule",
1817 	"ipfrule : tos ttl proto ip",
1818 	"bpfrule : IPFY_BPFV4 '{' YY_STR '}'",
1819 	"bpfrule : IPFY_BPFV6 '{' YY_STR '}'",
1820 	"ruletail : with keep head group",
1821 	"ruletail2 : pps age new",
1822 	"intag : settagin matchtagin",
1823 	"outtag : settagout matchtagout",
1824 	"insert : '@' YY_NUMBER",
1825 	"collection : /* empty */",
1826 	"collection : YY_NUMBER",
1827 	"action : block",
1828 	"action : IPFY_PASS",
1829 	"action : log",
1830 	"action : IPFY_COUNT",
1831 	"action : auth",
1832 	"action : IPFY_SKIP YY_NUMBER",
1833 	"action : IPFY_CALL func",
1834 	"action : IPFY_CALL IPFY_NOW func",
1835 	"block : blocked",
1836 	"block : blocked blockreturn",
1837 	"blocked : IPFY_BLOCK",
1838 	"blockreturn : IPFY_RETICMP",
1839 	"blockreturn : IPFY_RETICMP returncode",
1840 	"blockreturn : IPFY_RETICMPASDST",
1841 	"blockreturn : IPFY_RETICMPASDST returncode",
1842 	"blockreturn : IPFY_RETRST",
1843 	"log : IPFY_LOG",
1844 	"log : IPFY_LOG logoptions",
1845 	"auth : IPFY_AUTH",
1846 	"auth : IPFY_AUTH IPFY_RETRST",
1847 	"auth : IPFY_PREAUTH",
1848 	"func : YY_STR '/' YY_NUMBER",
1849 	"inopts : /* empty */",
1850 	"inopts : inopts inopt",
1851 	"inopt : logopt",
1852 	"inopt : quick",
1853 	"inopt : on",
1854 	"inopt : dup",
1855 	"inopt : froute",
1856 	"inopt : proute",
1857 	"inopt : replyto",
1858 	"outopts : /* empty */",
1859 	"outopts : outopts outopt",
1860 	"outopt : logopt",
1861 	"outopt : quick",
1862 	"outopt : on",
1863 	"outopt : dup",
1864 	"outopt : proute",
1865 	"outopt : replyto",
1866 	"tos : /* empty */",
1867 	"tos : settos YY_NUMBER",
1868 	"tos : settos YY_HEX",
1869 	"tos : settos lstart toslist lend",
1870 	"settos : IPFY_TOS",
1871 	"toslist : YY_NUMBER",
1872 	"toslist : YY_HEX",
1873 	"toslist : toslist lmore YY_NUMBER",
1874 	"toslist : toslist lmore YY_HEX",
1875 	"ttl : /* empty */",
1876 	"ttl : setttl YY_NUMBER",
1877 	"ttl : setttl lstart ttllist lend",
1878 	"lstart : '('",
1879 	"lend : ')'",
1880 	"lmore : lanother",
1881 	"lanother : /* empty */",
1882 	"lanother : ','",
1883 	"setttl : IPFY_TTL",
1884 	"ttllist : YY_NUMBER",
1885 	"ttllist : ttllist lmore YY_NUMBER",
1886 	"proto : /* empty */",
1887 	"proto : protox protocol",
1888 	"protox : IPFY_PROTO",
1889 	"ip : srcdst flags icmp",
1890 	"group : /* empty */",
1891 	"group : IPFY_GROUP YY_STR",
1892 	"group : IPFY_GROUP YY_NUMBER",
1893 	"head : /* empty */",
1894 	"head : IPFY_HEAD YY_STR",
1895 	"head : IPFY_HEAD YY_NUMBER",
1896 	"settagin : /* empty */",
1897 	"settagin : IPFY_SETTAG '(' taginlist ')'",
1898 	"taginlist : taginspec",
1899 	"taginlist : taginlist ',' taginspec",
1900 	"taginspec : logtag",
1901 	"taginspec : nattag",
1902 	"nattag : IPFY_NAT '=' YY_STR",
1903 	"nattag : IPFY_NAT '=' YY_NUMBER",
1904 	"logtag : IPFY_LOG '=' YY_NUMBER",
1905 	"settagout : /* empty */",
1906 	"settagout : IPFY_SETTAG '(' tagoutlist ')'",
1907 	"tagoutlist : tagoutspec",
1908 	"tagoutlist : tagoutlist ',' tagoutspec",
1909 	"tagoutspec : logtag",
1910 	"tagoutspec : nattag",
1911 	"matchtagin : /* empty */",
1912 	"matchtagin : IPFY_MATCHTAG '(' tagoutlist ')'",
1913 	"matchtagout : /* empty */",
1914 	"matchtagout : IPFY_MATCHTAG '(' taginlist ')'",
1915 	"pps : /* empty */",
1916 	"pps : IPFY_PPS YY_NUMBER",
1917 	"new : /* empty */",
1918 	"new : savegroup file restoregroup",
1919 	"savegroup : '{'",
1920 	"restoregroup : '}'",
1921 	"logopt : log",
1922 	"quick : IPFY_QUICK",
1923 	"on : IPFY_ON onname",
1924 	"on : IPFY_ON onname IPFY_INVIA vianame",
1925 	"on : IPFY_ON onname IPFY_OUTVIA vianame",
1926 	"onname : interfacename",
1927 	"onname : interfacename ',' interfacename",
1928 	"vianame : name",
1929 	"vianame : name ',' name",
1930 	"dup : IPFY_DUPTO name",
1931 	"dup : IPFY_DUPTO name duptoseparator hostname",
1932 	"dup : IPFY_DUPTO name duptoseparator YY_IPV6",
1933 	"duptoseparator : ':'",
1934 	"froute : IPFY_FROUTE",
1935 	"proute : routeto name",
1936 	"proute : routeto name duptoseparator hostname",
1937 	"proute : routeto name duptoseparator YY_IPV6",
1938 	"routeto : IPFY_TO",
1939 	"routeto : IPFY_ROUTETO",
1940 	"replyto : IPFY_REPLY_TO name",
1941 	"replyto : IPFY_REPLY_TO name duptoseparator hostname",
1942 	"replyto : IPFY_REPLY_TO name duptoseparator YY_IPV6",
1943 	"logoptions : logoption",
1944 	"logoptions : logoptions logoption",
1945 	"logoption : IPFY_BODY",
1946 	"logoption : IPFY_FIRST",
1947 	"logoption : IPFY_ORBLOCK",
1948 	"logoption : level loglevel",
1949 	"returncode : starticmpcode icmpcode ')'",
1950 	"starticmpcode : '('",
1951 	"srcdst : /* empty */",
1952 	"srcdst : IPFY_ALL",
1953 	"srcdst : fromto",
1954 	"protocol : YY_NUMBER",
1955 	"protocol : YY_STR",
1956 	"protocol : YY_STR nextstring YY_STR",
1957 	"nextstring : '/'",
1958 	"fromto : from srcobject to dstobject",
1959 	"fromto : to dstobject",
1960 	"fromto : from srcobject",
1961 	"from : IPFY_FROM",
1962 	"to : IPFY_TO",
1963 	"with : /* empty */",
1964 	"with : andwith withlist",
1965 	"andwith : IPFY_WITH",
1966 	"andwith : IPFY_AND",
1967 	"flags : /* empty */",
1968 	"flags : startflags flagset",
1969 	"flags : startflags flagset '/' flagset",
1970 	"flags : startflags '/' flagset",
1971 	"flags : startflags YY_NUMBER",
1972 	"flags : startflags '/' YY_NUMBER",
1973 	"flags : startflags YY_NUMBER '/' YY_NUMBER",
1974 	"flags : startflags flagset '/' YY_NUMBER",
1975 	"flags : startflags YY_NUMBER '/' flagset",
1976 	"startflags : IPFY_FLAGS",
1977 	"flagset : YY_STR",
1978 	"flagset : YY_HEX",
1979 	"srcobject : /* empty */",
1980 	"srcobject : fromport",
1981 	"srcobject : srcaddr srcport",
1982 	"srcobject : '!' srcaddr srcport",
1983 	"srcaddr : addr",
1984 	"srcaddr : lstart srcaddrlist lend",
1985 	"srcaddrlist : addr",
1986 	"srcaddrlist : srcaddrlist lmore addr",
1987 	"srcport : /* empty */",
1988 	"srcport : portcomp",
1989 	"srcport : portrange",
1990 	"srcport : porteq lstart srcportlist lend",
1991 	"fromport : portcomp",
1992 	"fromport : portrange",
1993 	"fromport : porteq lstart srcportlist lend",
1994 	"srcportlist : portnum",
1995 	"srcportlist : srcportlist lmore portnum",
1996 	"dstobject : /* empty */",
1997 	"dstobject : toport",
1998 	"dstobject : dstaddr dstport",
1999 	"dstobject : '!' dstaddr dstport",
2000 	"dstaddr : addr",
2001 	"dstaddr : lstart dstaddrlist lend",
2002 	"dstaddrlist : addr",
2003 	"dstaddrlist : dstaddrlist lmore addr",
2004 	"dstport : /* empty */",
2005 	"dstport : portcomp",
2006 	"dstport : portrange",
2007 	"dstport : porteq lstart dstportlist lend",
2008 	"toport : portcomp",
2009 	"toport : portrange",
2010 	"toport : porteq lstart dstportlist lend",
2011 	"dstportlist : portnum",
2012 	"dstportlist : dstportlist lmore portnum",
2013 	"addr : pool '/' YY_NUMBER",
2014 	"addr : pool '=' '(' poollist ')'",
2015 	"addr : hash '/' YY_NUMBER",
2016 	"addr : hash '=' '(' addrlist ')'",
2017 	"addr : ipaddr",
2018 	"ipaddr : IPFY_ANY",
2019 	"ipaddr : hostname",
2020 	"ipaddr : hostname",
2021 	"ipaddr : hostname maskspace",
2022 	"ipaddr : hostname maskspace mask",
2023 	"ipaddr : YY_IPV6",
2024 	"ipaddr : YY_IPV6",
2025 	"ipaddr : YY_IPV6 maskspace",
2026 	"ipaddr : YY_IPV6 maskspace mask",
2027 	"maskspace : '/'",
2028 	"maskspace : IPFY_MASK",
2029 	"mask : ipv4",
2030 	"mask : YY_HEX",
2031 	"mask : YY_NUMBER",
2032 	"mask : IPFY_BROADCAST",
2033 	"mask : IPFY_NETWORK",
2034 	"mask : IPFY_NETMASKED",
2035 	"mask : IPFY_PEER",
2036 	"hostname : ipv4",
2037 	"hostname : YY_NUMBER",
2038 	"hostname : YY_HEX",
2039 	"hostname : YY_STR",
2040 	"addrlist : ipaddr",
2041 	"addrlist : addrlist ',' ipaddr",
2042 	"pool : IPFY_POOL",
2043 	"hash : IPFY_HASH",
2044 	"poollist : ipaddr",
2045 	"poollist : '!' ipaddr",
2046 	"poollist : poollist ',' ipaddr",
2047 	"poollist : poollist ',' '!' ipaddr",
2048 	"port : IPFY_PORT",
2049 	"portc : port compare",
2050 	"portc : porteq",
2051 	"porteq : port '='",
2052 	"portr : IPFY_PORT",
2053 	"portcomp : portc portnum",
2054 	"portrange : portr portnum range portnum",
2055 	"icmp : /* empty */",
2056 	"icmp : itype icode",
2057 	"itype : seticmptype icmptype",
2058 	"itype : seticmptype lstart typelist lend",
2059 	"seticmptype : IPFY_ICMPTYPE",
2060 	"icode : /* empty */",
2061 	"icode : seticmpcode icmpcode",
2062 	"icode : seticmpcode lstart codelist lend",
2063 	"seticmpcode : IPFY_ICMPCODE",
2064 	"typelist : icmptype",
2065 	"typelist : typelist lmore icmptype",
2066 	"codelist : icmpcode",
2067 	"codelist : codelist lmore icmpcode",
2068 	"age : /* empty */",
2069 	"age : IPFY_AGE YY_NUMBER",
2070 	"age : IPFY_AGE YY_NUMBER '/' YY_NUMBER",
2071 	"keep : /* empty */",
2072 	"keep : IPFY_KEEP keepstate",
2073 	"keep : IPFY_KEEP keepfrag",
2074 	"keep : IPFY_KEEP keepstate IPFY_KEEP keepfrag",
2075 	"keep : IPFY_KEEP keepfrag IPFY_KEEP keepstate",
2076 	"keepstate : IPFY_STATE stateoptlist",
2077 	"keepfrag : IPFY_FRAGS fragoptlist",
2078 	"keepfrag : IPFY_FRAG fragoptlist",
2079 	"fragoptlist : /* empty */",
2080 	"fragoptlist : '(' fragopts ')'",
2081 	"fragopts : fragopt lanother fragopts",
2082 	"fragopts : fragopt",
2083 	"fragopt : IPFY_STRICT",
2084 	"stateoptlist : /* empty */",
2085 	"stateoptlist : '(' stateopts ')'",
2086 	"stateopts : stateopt lanother stateopts",
2087 	"stateopts : stateopt",
2088 	"stateopt : IPFY_LIMIT YY_NUMBER",
2089 	"stateopt : IPFY_STRICT",
2090 	"stateopt : IPFY_NEWISN",
2091 	"stateopt : IPFY_NOICMPERR",
2092 	"stateopt : IPFY_SYNC",
2093 	"portnum : servicename",
2094 	"portnum : YY_NUMBER",
2095 	"withlist : withopt",
2096 	"withlist : withlist withopt",
2097 	"withlist : withlist ',' withopt",
2098 	"withopt : opttype",
2099 	"withopt : notwith opttype",
2100 	"withopt : ipopt ipopts",
2101 	"withopt : notwith ipopt ipopts",
2102 	"withopt : startv6hdrs ipv6hdrs",
2103 	"ipopt : IPFY_OPT",
2104 	"startv6hdrs : IPF6_V6HDRS",
2105 	"notwith : IPFY_NOT",
2106 	"notwith : IPFY_NO",
2107 	"opttype : IPFY_IPOPTS",
2108 	"opttype : IPFY_SHORT",
2109 	"opttype : IPFY_NAT",
2110 	"opttype : IPFY_BAD",
2111 	"opttype : IPFY_BADNAT",
2112 	"opttype : IPFY_BADSRC",
2113 	"opttype : IPFY_LOWTTL",
2114 	"opttype : IPFY_FRAG",
2115 	"opttype : IPFY_FRAGBODY",
2116 	"opttype : IPFY_FRAGS",
2117 	"opttype : IPFY_MBCAST",
2118 	"opttype : IPFY_MULTICAST",
2119 	"opttype : IPFY_BROADCAST",
2120 	"opttype : IPFY_STATE",
2121 	"opttype : IPFY_OOW",
2122 	"ipopts : optlist",
2123 	"optlist : opt",
2124 	"optlist : optlist ',' opt",
2125 	"ipv6hdrs : ipv6hdrlist",
2126 	"ipv6hdrlist : ipv6hdr",
2127 	"ipv6hdrlist : ipv6hdrlist ',' ipv6hdr",
2128 	"secname : seclevel",
2129 	"secname : secname ',' seclevel",
2130 	"seclevel : IPFY_SEC_UNC",
2131 	"seclevel : IPFY_SEC_CONF",
2132 	"seclevel : IPFY_SEC_RSV1",
2133 	"seclevel : IPFY_SEC_RSV2",
2134 	"seclevel : IPFY_SEC_RSV3",
2135 	"seclevel : IPFY_SEC_RSV4",
2136 	"seclevel : IPFY_SEC_SEC",
2137 	"seclevel : IPFY_SEC_TS",
2138 	"icmptype : YY_NUMBER",
2139 	"icmptype : IPFY_ICMPT_UNR",
2140 	"icmptype : IPFY_ICMPT_ECHO",
2141 	"icmptype : IPFY_ICMPT_ECHOR",
2142 	"icmptype : IPFY_ICMPT_SQUENCH",
2143 	"icmptype : IPFY_ICMPT_REDIR",
2144 	"icmptype : IPFY_ICMPT_TIMEX",
2145 	"icmptype : IPFY_ICMPT_PARAMP",
2146 	"icmptype : IPFY_ICMPT_TIMEST",
2147 	"icmptype : IPFY_ICMPT_TIMESTREP",
2148 	"icmptype : IPFY_ICMPT_INFOREQ",
2149 	"icmptype : IPFY_ICMPT_INFOREP",
2150 	"icmptype : IPFY_ICMPT_MASKREQ",
2151 	"icmptype : IPFY_ICMPT_MASKREP",
2152 	"icmptype : IPFY_ICMPT_ROUTERAD",
2153 	"icmptype : IPFY_ICMPT_ROUTERSOL",
2154 	"icmpcode : YY_NUMBER",
2155 	"icmpcode : IPFY_ICMPC_NETUNR",
2156 	"icmpcode : IPFY_ICMPC_HSTUNR",
2157 	"icmpcode : IPFY_ICMPC_PROUNR",
2158 	"icmpcode : IPFY_ICMPC_PORUNR",
2159 	"icmpcode : IPFY_ICMPC_NEEDF",
2160 	"icmpcode : IPFY_ICMPC_SRCFAIL",
2161 	"icmpcode : IPFY_ICMPC_NETUNK",
2162 	"icmpcode : IPFY_ICMPC_HSTUNK",
2163 	"icmpcode : IPFY_ICMPC_ISOLATE",
2164 	"icmpcode : IPFY_ICMPC_NETPRO",
2165 	"icmpcode : IPFY_ICMPC_HSTPRO",
2166 	"icmpcode : IPFY_ICMPC_NETTOS",
2167 	"icmpcode : IPFY_ICMPC_HSTTOS",
2168 	"icmpcode : IPFY_ICMPC_FLTPRO",
2169 	"icmpcode : IPFY_ICMPC_HSTPRE",
2170 	"icmpcode : IPFY_ICMPC_CUTPRE",
2171 	"opt : IPFY_IPOPT_NOP",
2172 	"opt : IPFY_IPOPT_RR",
2173 	"opt : IPFY_IPOPT_ZSU",
2174 	"opt : IPFY_IPOPT_MTUP",
2175 	"opt : IPFY_IPOPT_MTUR",
2176 	"opt : IPFY_IPOPT_ENCODE",
2177 	"opt : IPFY_IPOPT_TS",
2178 	"opt : IPFY_IPOPT_TR",
2179 	"opt : IPFY_IPOPT_SEC",
2180 	"opt : IPFY_IPOPT_LSRR",
2181 	"opt : IPFY_IPOPT_ESEC",
2182 	"opt : IPFY_IPOPT_CIPSO",
2183 	"opt : IPFY_IPOPT_SATID",
2184 	"opt : IPFY_IPOPT_SSRR",
2185 	"opt : IPFY_IPOPT_ADDEXT",
2186 	"opt : IPFY_IPOPT_VISA",
2187 	"opt : IPFY_IPOPT_IMITD",
2188 	"opt : IPFY_IPOPT_EIP",
2189 	"opt : IPFY_IPOPT_FINN",
2190 	"opt : IPFY_IPOPT_DPS",
2191 	"opt : IPFY_IPOPT_SDB",
2192 	"opt : IPFY_IPOPT_NSAPA",
2193 	"opt : IPFY_IPOPT_RTRALRT",
2194 	"opt : IPFY_IPOPT_UMP",
2195 	"opt : setsecclass secname",
2196 	"setsecclass : IPFY_SECCLASS",
2197 	"ipv6hdr : IPFY_AH",
2198 	"ipv6hdr : IPFY_IPV6OPT_DSTOPTS",
2199 	"ipv6hdr : IPFY_ESP",
2200 	"ipv6hdr : IPFY_IPV6OPT_HOPOPTS",
2201 	"ipv6hdr : IPFY_IPV6OPT_IPV6",
2202 	"ipv6hdr : IPFY_IPV6OPT_NONE",
2203 	"ipv6hdr : IPFY_IPV6OPT_ROUTING",
2204 	"ipv6hdr : IPFY_FRAG",
2205 	"level : IPFY_LEVEL",
2206 	"loglevel : priority",
2207 	"loglevel : facility '.' priority",
2208 	"facility : IPFY_FAC_KERN",
2209 	"facility : IPFY_FAC_USER",
2210 	"facility : IPFY_FAC_MAIL",
2211 	"facility : IPFY_FAC_DAEMON",
2212 	"facility : IPFY_FAC_AUTH",
2213 	"facility : IPFY_FAC_SYSLOG",
2214 	"facility : IPFY_FAC_LPR",
2215 	"facility : IPFY_FAC_NEWS",
2216 	"facility : IPFY_FAC_UUCP",
2217 	"facility : IPFY_FAC_CRON",
2218 	"facility : IPFY_FAC_FTP",
2219 	"facility : IPFY_FAC_AUTHPRIV",
2220 	"facility : IPFY_FAC_AUDIT",
2221 	"facility : IPFY_FAC_LFMT",
2222 	"facility : IPFY_FAC_LOCAL0",
2223 	"facility : IPFY_FAC_LOCAL1",
2224 	"facility : IPFY_FAC_LOCAL2",
2225 	"facility : IPFY_FAC_LOCAL3",
2226 	"facility : IPFY_FAC_LOCAL4",
2227 	"facility : IPFY_FAC_LOCAL5",
2228 	"facility : IPFY_FAC_LOCAL6",
2229 	"facility : IPFY_FAC_LOCAL7",
2230 	"facility : IPFY_FAC_SECURITY",
2231 	"priority : IPFY_PRI_EMERG",
2232 	"priority : IPFY_PRI_ALERT",
2233 	"priority : IPFY_PRI_CRIT",
2234 	"priority : IPFY_PRI_ERR",
2235 	"priority : IPFY_PRI_WARN",
2236 	"priority : IPFY_PRI_NOTICE",
2237 	"priority : IPFY_PRI_INFO",
2238 	"priority : IPFY_PRI_DEBUG",
2239 	"compare : YY_CMP_EQ",
2240 	"compare : YY_CMP_NE",
2241 	"compare : YY_CMP_LT",
2242 	"compare : YY_CMP_LE",
2243 	"compare : YY_CMP_GT",
2244 	"compare : YY_CMP_GE",
2245 	"range : YY_RANGE_IN",
2246 	"range : YY_RANGE_OUT",
2247 	"range : ':'",
2248 	"servicename : YY_STR",
2249 	"interfacename : YY_STR",
2250 	"interfacename : YY_STR ':' YY_NUMBER",
2251 	"name : YY_STR",
2252 	"ipv4_16 : YY_NUMBER '.' YY_NUMBER",
2253 	"ipv4_24 : ipv4_16 '.' YY_NUMBER",
2254 	"ipv4 : ipv4_24 '.' YY_NUMBER",
2255 	"ipv4 : ipv4_24",
2256 	"ipv4 : ipv4_16",
2257 };
2258 #endif /* YYDEBUG */
2259 # line	1 "/usr/share/lib/ccs/yaccpar"
2260 /*
2261  * CDDL HEADER START
2262  *
2263  * The contents of this file are subject to the terms of the
2264  * Common Development and Distribution License, Version 1.0 only
2265  * (the "License").  You may not use this file except in compliance
2266  * with the License.
2267  *
2268  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2269  * or http://www.opensolaris.org/os/licensing.
2270  * See the License for the specific language governing permissions
2271  * and limitations under the License.
2272  *
2273  * When distributing Covered Code, include this CDDL HEADER in each
2274  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2275  * If applicable, add the following below this CDDL HEADER, with the
2276  * fields enclosed by brackets "[]" replaced with your own identifying
2277  * information: Portions Copyright [ipf_yyipf_yy] [name of copyright owner]
2278  *
2279  * CDDL HEADER END
2280  */
2281 /*
2282  * Copyright 1993 Sun Microsystems, Inc.  All rights reserved.
2283  * Use is subject to license terms.
2284  */
2285 
2286 /* Copyright (c) 1988 AT&T */
2287 /* All Rights Reserved */
2288 
2289 #pragma ident	"%Z%%M%	%I%	%E% SMI"
2290 
2291 /*
2292 ** Skeleton parser driver for yacc output
2293 */
2294 
2295 /*
2296 ** yacc user known macros and defines
2297 */
2298 #define YYERROR		goto ipf_yyerrlab
2299 #define YYACCEPT	return(0)
2300 #define YYABORT		return(1)
2301 #define YYBACKUP( newtoken, newvalue )\
2302 {\
2303 	if ( ipf_yychar >= 0 || ( ipf_yyr2[ ipf_yytmp ] >> 1 ) != 1 )\
2304 	{\
2305 		ipf_yyerror( "syntax error - cannot backup" );\
2306 		goto ipf_yyerrlab;\
2307 	}\
2308 	ipf_yychar = newtoken;\
2309 	ipf_yystate = *ipf_yyps;\
2310 	ipf_yylval = newvalue;\
2311 	goto ipf_yynewstate;\
2312 }
2313 #define YYRECOVERING()	(!!ipf_yyerrflag)
2314 #define YYNEW(type)	malloc(sizeof(type) * ipf_yynewmax)
2315 #define YYCOPY(to, from, type) \
2316 	(type *) memcpy(to, (char *) from, ipf_yymaxdepth * sizeof (type))
2317 #define YYENLARGE( from, type) \
2318 	(type *) realloc((char *) from, ipf_yynewmax * sizeof(type))
2319 #ifndef YYDEBUG
2320 #	define YYDEBUG	1	/* make debugging available */
2321 #endif
2322 
2323 /*
2324 ** user known globals
2325 */
2326 int ipf_yydebug;			/* set to 1 to get debugging */
2327 
2328 /*
2329 ** driver internal defines
2330 */
2331 #define YYFLAG		(-10000000)
2332 
2333 /*
2334 ** global variables used by the parser
2335 */
2336 YYSTYPE *ipf_yypv;			/* top of value stack */
2337 int *ipf_yyps;			/* top of state stack */
2338 
2339 int ipf_yystate;			/* current state */
2340 int ipf_yytmp;			/* extra var (lasts between blocks) */
2341 
2342 int ipf_yynerrs;			/* number of errors */
2343 int ipf_yyerrflag;			/* error recovery flag */
2344 int ipf_yychar;			/* current input token number */
2345 
2346 
2347 
2348 #ifdef YYNMBCHARS
2349 #define YYLEX()		ipf_yycvtok(ipf_yylex())
2350 /*
2351 ** ipf_yycvtok - return a token if i is a wchar_t value that exceeds 255.
2352 **	If i<255, i itself is the token.  If i>255 but the neither
2353 **	of the 30th or 31st bit is on, i is already a token.
2354 */
2355 #if defined(__STDC__) || defined(__cplusplus)
2356 int ipf_yycvtok(int i)
2357 #else
2358 int ipf_yycvtok(i) int i;
2359 #endif
2360 {
2361 	int first = 0;
2362 	int last = YYNMBCHARS - 1;
2363 	int mid;
2364 	wchar_t j;
2365 
2366 	if(i&0x60000000){/*Must convert to a token. */
2367 		if( ipf_yymbchars[last].character < i ){
2368 			return i;/*Giving up*/
2369 		}
2370 		while ((last>=first)&&(first>=0)) {/*Binary search loop*/
2371 			mid = (first+last)/2;
2372 			j = ipf_yymbchars[mid].character;
2373 			if( j==i ){/*Found*/
2374 				return ipf_yymbchars[mid].tvalue;
2375 			}else if( j<i ){
2376 				first = mid + 1;
2377 			}else{
2378 				last = mid -1;
2379 			}
2380 		}
2381 		/*No entry in the table.*/
2382 		return i;/* Giving up.*/
2383 	}else{/* i is already a token. */
2384 		return i;
2385 	}
2386 }
2387 #else/*!YYNMBCHARS*/
2388 #define YYLEX()		ipf_yylex()
2389 #endif/*!YYNMBCHARS*/
2390 
2391 /*
2392 ** ipf_yyparse - return 0 if worked, 1 if syntax error not recovered from
2393 */
2394 #if defined(__STDC__) || defined(__cplusplus)
2395 int ipf_yyparse(void)
2396 #else
2397 int ipf_yyparse()
2398 #endif
2399 {
2400 	register YYSTYPE *ipf_yypvt = 0;	/* top of value stack for $vars */
2401 
2402 #if defined(__cplusplus) || defined(lint)
2403 /*
2404 	hacks to please C++ and lint - goto's inside
2405 	switch should never be executed
2406 */
2407 	static int __yaccpar_lint_hack__ = 0;
2408 	switch (__yaccpar_lint_hack__)
2409 	{
2410 		case 1: goto ipf_yyerrlab;
2411 		case 2: goto ipf_yynewstate;
2412 	}
2413 #endif
2414 
2415 	/*
2416 	** Initialize externals - ipf_yyparse may be called more than once
2417 	*/
2418 	ipf_yypv = &ipf_yyv[-1];
2419 	ipf_yyps = &ipf_yys[-1];
2420 	ipf_yystate = 0;
2421 	ipf_yytmp = 0;
2422 	ipf_yynerrs = 0;
2423 	ipf_yyerrflag = 0;
2424 	ipf_yychar = -1;
2425 
2426 #if YYMAXDEPTH <= 0
2427 	if (ipf_yymaxdepth <= 0)
2428 	{
2429 		if ((ipf_yymaxdepth = YYEXPAND(0)) <= 0)
2430 		{
2431 			ipf_yyerror("yacc initialization error");
2432 			YYABORT;
2433 		}
2434 	}
2435 #endif
2436 
2437 	{
2438 		register YYSTYPE *ipf_yy_pv;	/* top of value stack */
2439 		register int *ipf_yy_ps;		/* top of state stack */
2440 		register int ipf_yy_state;		/* current state */
2441 		register int  ipf_yy_n;		/* internal state number info */
2442 	goto ipf_yystack;	/* moved from 6 lines above to here to please C++ */
2443 
2444 		/*
2445 		** get globals into registers.
2446 		** branch to here only if YYBACKUP was called.
2447 		*/
2448 	ipf_yynewstate:
2449 		ipf_yy_pv = ipf_yypv;
2450 		ipf_yy_ps = ipf_yyps;
2451 		ipf_yy_state = ipf_yystate;
2452 		goto ipf_yy_newstate;
2453 
2454 		/*
2455 		** get globals into registers.
2456 		** either we just started, or we just finished a reduction
2457 		*/
2458 	ipf_yystack:
2459 		ipf_yy_pv = ipf_yypv;
2460 		ipf_yy_ps = ipf_yyps;
2461 		ipf_yy_state = ipf_yystate;
2462 
2463 		/*
2464 		** top of for (;;) loop while no reductions done
2465 		*/
2466 	ipf_yy_stack:
2467 		/*
2468 		** put a state and value onto the stacks
2469 		*/
2470 #if YYDEBUG
2471 		/*
2472 		** if debugging, look up token value in list of value vs.
2473 		** name pairs.  0 and negative (-1) are special values.
2474 		** Note: linear search is used since time is not a real
2475 		** consideration while debugging.
2476 		*/
2477 		if ( ipf_yydebug )
2478 		{
2479 			register int ipf_yy_i;
2480 
2481 			printf( "State %d, token ", ipf_yy_state );
2482 			if ( ipf_yychar == 0 )
2483 				printf( "end-of-file\n" );
2484 			else if ( ipf_yychar < 0 )
2485 				printf( "-none-\n" );
2486 			else
2487 			{
2488 				for ( ipf_yy_i = 0; ipf_yytoks[ipf_yy_i].t_val >= 0;
2489 					ipf_yy_i++ )
2490 				{
2491 					if ( ipf_yytoks[ipf_yy_i].t_val == ipf_yychar )
2492 						break;
2493 				}
2494 				printf( "%s\n", ipf_yytoks[ipf_yy_i].t_name );
2495 			}
2496 		}
2497 #endif /* YYDEBUG */
2498 		if ( ++ipf_yy_ps >= &ipf_yys[ ipf_yymaxdepth ] )	/* room on stack? */
2499 		{
2500 			/*
2501 			** reallocate and recover.  Note that pointers
2502 			** have to be reset, or bad things will happen
2503 			*/
2504 			long ipf_yyps_index = (ipf_yy_ps - ipf_yys);
2505 			long ipf_yypv_index = (ipf_yy_pv - ipf_yyv);
2506 			long ipf_yypvt_index = (ipf_yypvt - ipf_yyv);
2507 			int ipf_yynewmax;
2508 #ifdef YYEXPAND
2509 			ipf_yynewmax = YYEXPAND(ipf_yymaxdepth);
2510 #else
2511 			ipf_yynewmax = 2 * ipf_yymaxdepth;	/* double table size */
2512 			if (ipf_yymaxdepth == YYMAXDEPTH)	/* first time growth */
2513 			{
2514 				char *newipf_yys = (char *)YYNEW(int);
2515 				char *newipf_yyv = (char *)YYNEW(YYSTYPE);
2516 				if (newipf_yys != 0 && newipf_yyv != 0)
2517 				{
2518 					ipf_yys = YYCOPY(newipf_yys, ipf_yys, int);
2519 					ipf_yyv = YYCOPY(newipf_yyv, ipf_yyv, YYSTYPE);
2520 				}
2521 				else
2522 					ipf_yynewmax = 0;	/* failed */
2523 			}
2524 			else				/* not first time */
2525 			{
2526 				ipf_yys = YYENLARGE(ipf_yys, int);
2527 				ipf_yyv = YYENLARGE(ipf_yyv, YYSTYPE);
2528 				if (ipf_yys == 0 || ipf_yyv == 0)
2529 					ipf_yynewmax = 0;	/* failed */
2530 			}
2531 #endif
2532 			if (ipf_yynewmax <= ipf_yymaxdepth)	/* tables not expanded */
2533 			{
2534 				ipf_yyerror( "yacc stack overflow" );
2535 				YYABORT;
2536 			}
2537 			ipf_yymaxdepth = ipf_yynewmax;
2538 
2539 			ipf_yy_ps = ipf_yys + ipf_yyps_index;
2540 			ipf_yy_pv = ipf_yyv + ipf_yypv_index;
2541 			ipf_yypvt = ipf_yyv + ipf_yypvt_index;
2542 		}
2543 		*ipf_yy_ps = ipf_yy_state;
2544 		*++ipf_yy_pv = ipf_yyval;
2545 
2546 		/*
2547 		** we have a new state - find out what to do
2548 		*/
2549 	ipf_yy_newstate:
2550 		if ( ( ipf_yy_n = ipf_yypact[ ipf_yy_state ] ) <= YYFLAG )
2551 			goto ipf_yydefault;		/* simple state */
2552 #if YYDEBUG
2553 		/*
2554 		** if debugging, need to mark whether new token grabbed
2555 		*/
2556 		ipf_yytmp = ipf_yychar < 0;
2557 #endif
2558 		if ( ( ipf_yychar < 0 ) && ( ( ipf_yychar = YYLEX() ) < 0 ) )
2559 			ipf_yychar = 0;		/* reached EOF */
2560 #if YYDEBUG
2561 		if ( ipf_yydebug && ipf_yytmp )
2562 		{
2563 			register int ipf_yy_i;
2564 
2565 			printf( "Received token " );
2566 			if ( ipf_yychar == 0 )
2567 				printf( "end-of-file\n" );
2568 			else if ( ipf_yychar < 0 )
2569 				printf( "-none-\n" );
2570 			else
2571 			{
2572 				for ( ipf_yy_i = 0; ipf_yytoks[ipf_yy_i].t_val >= 0;
2573 					ipf_yy_i++ )
2574 				{
2575 					if ( ipf_yytoks[ipf_yy_i].t_val == ipf_yychar )
2576 						break;
2577 				}
2578 				printf( "%s\n", ipf_yytoks[ipf_yy_i].t_name );
2579 			}
2580 		}
2581 #endif /* YYDEBUG */
2582 		if ( ( ( ipf_yy_n += ipf_yychar ) < 0 ) || ( ipf_yy_n >= YYLAST ) )
2583 			goto ipf_yydefault;
2584 		if ( ipf_yychk[ ipf_yy_n = ipf_yyact[ ipf_yy_n ] ] == ipf_yychar )	/*valid shift*/
2585 		{
2586 			ipf_yychar = -1;
2587 			ipf_yyval = ipf_yylval;
2588 			ipf_yy_state = ipf_yy_n;
2589 			if ( ipf_yyerrflag > 0 )
2590 				ipf_yyerrflag--;
2591 			goto ipf_yy_stack;
2592 		}
2593 
2594 	ipf_yydefault:
2595 		if ( ( ipf_yy_n = ipf_yydef[ ipf_yy_state ] ) == -2 )
2596 		{
2597 #if YYDEBUG
2598 			ipf_yytmp = ipf_yychar < 0;
2599 #endif
2600 			if ( ( ipf_yychar < 0 ) && ( ( ipf_yychar = YYLEX() ) < 0 ) )
2601 				ipf_yychar = 0;		/* reached EOF */
2602 #if YYDEBUG
2603 			if ( ipf_yydebug && ipf_yytmp )
2604 			{
2605 				register int ipf_yy_i;
2606 
2607 				printf( "Received token " );
2608 				if ( ipf_yychar == 0 )
2609 					printf( "end-of-file\n" );
2610 				else if ( ipf_yychar < 0 )
2611 					printf( "-none-\n" );
2612 				else
2613 				{
2614 					for ( ipf_yy_i = 0;
2615 						ipf_yytoks[ipf_yy_i].t_val >= 0;
2616 						ipf_yy_i++ )
2617 					{
2618 						if ( ipf_yytoks[ipf_yy_i].t_val
2619 							== ipf_yychar )
2620 						{
2621 							break;
2622 						}
2623 					}
2624 					printf( "%s\n", ipf_yytoks[ipf_yy_i].t_name );
2625 				}
2626 			}
2627 #endif /* YYDEBUG */
2628 			/*
2629 			** look through exception table
2630 			*/
2631 			{
2632 				register YYCONST int *ipf_yyxi = ipf_yyexca;
2633 
2634 				while ( ( *ipf_yyxi != -1 ) ||
2635 					( ipf_yyxi[1] != ipf_yy_state ) )
2636 				{
2637 					ipf_yyxi += 2;
2638 				}
2639 				while ( ( *(ipf_yyxi += 2) >= 0 ) &&
2640 					( *ipf_yyxi != ipf_yychar ) )
2641 					;
2642 				if ( ( ipf_yy_n = ipf_yyxi[1] ) < 0 )
2643 					YYACCEPT;
2644 			}
2645 		}
2646 
2647 		/*
2648 		** check for syntax error
2649 		*/
2650 		if ( ipf_yy_n == 0 )	/* have an error */
2651 		{
2652 			/* no worry about speed here! */
2653 			switch ( ipf_yyerrflag )
2654 			{
2655 			case 0:		/* new error */
2656 				ipf_yyerror( "syntax error" );
2657 				goto skip_init;
2658 			ipf_yyerrlab:
2659 				/*
2660 				** get globals into registers.
2661 				** we have a user generated syntax type error
2662 				*/
2663 				ipf_yy_pv = ipf_yypv;
2664 				ipf_yy_ps = ipf_yyps;
2665 				ipf_yy_state = ipf_yystate;
2666 			skip_init:
2667 				ipf_yynerrs++;
2668 				/* FALLTHRU */
2669 			case 1:
2670 			case 2:		/* incompletely recovered error */
2671 					/* try again... */
2672 				ipf_yyerrflag = 3;
2673 				/*
2674 				** find state where "error" is a legal
2675 				** shift action
2676 				*/
2677 				while ( ipf_yy_ps >= ipf_yys )
2678 				{
2679 					ipf_yy_n = ipf_yypact[ *ipf_yy_ps ] + YYERRCODE;
2680 					if ( ipf_yy_n >= 0 && ipf_yy_n < YYLAST &&
2681 						ipf_yychk[ipf_yyact[ipf_yy_n]] == YYERRCODE)					{
2682 						/*
2683 						** simulate shift of "error"
2684 						*/
2685 						ipf_yy_state = ipf_yyact[ ipf_yy_n ];
2686 						goto ipf_yy_stack;
2687 					}
2688 					/*
2689 					** current state has no shift on
2690 					** "error", pop stack
2691 					*/
2692 #if YYDEBUG
2693 #	define _POP_ "Error recovery pops state %d, uncovers state %d\n"
2694 					if ( ipf_yydebug )
2695 						printf( _POP_, *ipf_yy_ps,
2696 							ipf_yy_ps[-1] );
2697 #	undef _POP_
2698 #endif
2699 					ipf_yy_ps--;
2700 					ipf_yy_pv--;
2701 				}
2702 				/*
2703 				** there is no state on stack with "error" as
2704 				** a valid shift.  give up.
2705 				*/
2706 				YYABORT;
2707 			case 3:		/* no shift yet; eat a token */
2708 #if YYDEBUG
2709 				/*
2710 				** if debugging, look up token in list of
2711 				** pairs.  0 and negative shouldn't occur,
2712 				** but since timing doesn't matter when
2713 				** debugging, it doesn't hurt to leave the
2714 				** tests here.
2715 				*/
2716 				if ( ipf_yydebug )
2717 				{
2718 					register int ipf_yy_i;
2719 
2720 					printf( "Error recovery discards " );
2721 					if ( ipf_yychar == 0 )
2722 						printf( "token end-of-file\n" );
2723 					else if ( ipf_yychar < 0 )
2724 						printf( "token -none-\n" );
2725 					else
2726 					{
2727 						for ( ipf_yy_i = 0;
2728 							ipf_yytoks[ipf_yy_i].t_val >= 0;
2729 							ipf_yy_i++ )
2730 						{
2731 							if ( ipf_yytoks[ipf_yy_i].t_val
2732 								== ipf_yychar )
2733 							{
2734 								break;
2735 							}
2736 						}
2737 						printf( "token %s\n",
2738 							ipf_yytoks[ipf_yy_i].t_name );
2739 					}
2740 				}
2741 #endif /* YYDEBUG */
2742 				if ( ipf_yychar == 0 )	/* reached EOF. quit */
2743 					YYABORT;
2744 				ipf_yychar = -1;
2745 				goto ipf_yy_newstate;
2746 			}
2747 		}/* end if ( ipf_yy_n == 0 ) */
2748 		/*
2749 		** reduction by production ipf_yy_n
2750 		** put stack tops, etc. so things right after switch
2751 		*/
2752 #if YYDEBUG
2753 		/*
2754 		** if debugging, print the string that is the user's
2755 		** specification of the reduction which is just about
2756 		** to be done.
2757 		*/
2758 		if ( ipf_yydebug )
2759 			printf( "Reduce by (%d) \"%s\"\n",
2760 				ipf_yy_n, ipf_yyreds[ ipf_yy_n ] );
2761 #endif
2762 		ipf_yytmp = ipf_yy_n;			/* value to switch over */
2763 		ipf_yypvt = ipf_yy_pv;			/* $vars top of value stack */
2764 		/*
2765 		** Look in goto table for next state
2766 		** Sorry about using ipf_yy_state here as temporary
2767 		** register variable, but why not, if it works...
2768 		** If ipf_yyr2[ ipf_yy_n ] doesn't have the low order bit
2769 		** set, then there is no action to be done for
2770 		** this reduction.  So, no saving & unsaving of
2771 		** registers done.  The only difference between the
2772 		** code just after the if and the body of the if is
2773 		** the goto ipf_yy_stack in the body.  This way the test
2774 		** can be made before the choice of what to do is needed.
2775 		*/
2776 		{
2777 			/* length of production doubled with extra bit */
2778 			register int ipf_yy_len = ipf_yyr2[ ipf_yy_n ];
2779 
2780 			if ( !( ipf_yy_len & 01 ) )
2781 			{
2782 				ipf_yy_len >>= 1;
2783 				ipf_yyval = ( ipf_yy_pv -= ipf_yy_len )[1];	/* $$ = $1 */
2784 				ipf_yy_state = ipf_yypgo[ ipf_yy_n = ipf_yyr1[ ipf_yy_n ] ] +
2785 					*( ipf_yy_ps -= ipf_yy_len ) + 1;
2786 				if ( ipf_yy_state >= YYLAST ||
2787 					ipf_yychk[ ipf_yy_state =
2788 					ipf_yyact[ ipf_yy_state ] ] != -ipf_yy_n )
2789 				{
2790 					ipf_yy_state = ipf_yyact[ ipf_yypgo[ ipf_yy_n ] ];
2791 				}
2792 				goto ipf_yy_stack;
2793 			}
2794 			ipf_yy_len >>= 1;
2795 			ipf_yyval = ( ipf_yy_pv -= ipf_yy_len )[1];	/* $$ = $1 */
2796 			ipf_yy_state = ipf_yypgo[ ipf_yy_n = ipf_yyr1[ ipf_yy_n ] ] +
2797 				*( ipf_yy_ps -= ipf_yy_len ) + 1;
2798 			if ( ipf_yy_state >= YYLAST ||
2799 				ipf_yychk[ ipf_yy_state = ipf_yyact[ ipf_yy_state ] ] != -ipf_yy_n )
2800 			{
2801 				ipf_yy_state = ipf_yyact[ ipf_yypgo[ ipf_yy_n ] ];
2802 			}
2803 		}
2804 					/* save until reenter driver code */
2805 		ipf_yystate = ipf_yy_state;
2806 		ipf_yyps = ipf_yy_ps;
2807 		ipf_yypv = ipf_yy_pv;
2808 	}
2809 	/*
2810 	** code supplied by user is placed in this switch
2811 	*/
2812 	switch( ipf_yytmp )
2813 	{
2814 
2815 case 5:
2816 # line 186 "../ipf_y.y"
2817 { while ((fr = frtop) != NULL) {
2818 				frtop = fr->fr_next;
2819 				fr->fr_next = NULL;
2820 				(*ipfaddfunc)(ipffd, ipfioctl[IPL_LOGIPF], fr);
2821 				fr->fr_next = frold;
2822 				frold = fr;
2823 			  }
2824 			  resetlexer();
2825 			} break;
2826 case 8:
2827 # line 199 "../ipf_y.y"
2828 { newrule(); } break;
2829 case 9:
2830 # line 202 "../ipf_y.y"
2831 { set_variable(ipf_yypvt[-3].str, ipf_yypvt[-1].str);
2832 					  resetlexer();
2833 					  free(ipf_yypvt[-3].str);
2834 					  free(ipf_yypvt[-1].str);
2835 					  ipf_yyvarnext = 0;
2836 					} break;
2837 case 10:
2838 # line 211 "../ipf_y.y"
2839 { ipf_yyvarnext = 1; } break;
2840 case 11:
2841 # line 216 "../ipf_y.y"
2842 {
2843 			  int data;
2844 			  if (frold != NULL) {
2845 				ipf_yyerror("ipf rules before \"set\"");
2846 				return 0;
2847 			  }
2848 			  if (!strcmp(ipf_yypvt[-1].str, "true"))
2849 				data = 1;
2850 			  else if (!strcmp(ipf_yypvt[-1].str, "false"))
2851 				data = 0;
2852 			  else {
2853 				ipf_yyerror("invalid argument for ipf_loopback");
2854 				return 0;
2855 			  }
2856 			  if (((opts & OPT_DONOTHING) == 0) &&
2857 			      (ioctl(ipffd, SIOCIPFLP, &data) == -1))
2858 				perror("ioctl(SIOCIPFLP)");
2859 			} break;
2860 case 16:
2861 # line 244 "../ipf_y.y"
2862 { ruleopts = 0; } break;
2863 case 18:
2864 # line 248 "../ipf_y.y"
2865 { ruleopts = 0; } break;
2866 case 22:
2867 # line 256 "../ipf_y.y"
2868 { fr->fr_flags |= FR_INQUE; } break;
2869 case 23:
2870 # line 260 "../ipf_y.y"
2871 { fr->fr_flags |= FR_OUTQUE; } break;
2872 case 27:
2873 # line 273 "../ipf_y.y"
2874 { dobpf(4, ipf_yypvt[-1].str); free(ipf_yypvt[-1].str); } break;
2875 case 28:
2876 # line 274 "../ipf_y.y"
2877 { dobpf(6, ipf_yypvt[-1].str); free(ipf_yypvt[-1].str); } break;
2878 case 33:
2879 # line 292 "../ipf_y.y"
2880 { fr->fr_hits = (U_QUAD_T)ipf_yypvt[-0].num + 1; } break;
2881 case 35:
2882 # line 296 "../ipf_y.y"
2883 { fr->fr_collect = ipf_yypvt[-0].num; } break;
2884 case 37:
2885 # line 300 "../ipf_y.y"
2886 { fr->fr_flags |= FR_PASS; } break;
2887 case 39:
2888 # line 302 "../ipf_y.y"
2889 { fr->fr_flags |= FR_ACCOUNT; } break;
2890 case 41:
2891 # line 304 "../ipf_y.y"
2892 { fr->fr_flags |= FR_SKIP;
2893 					  fr->fr_arg = ipf_yypvt[-0].num; } break;
2894 case 43:
2895 # line 307 "../ipf_y.y"
2896 { fr->fr_flags |= FR_CALLNOW; } break;
2897 case 46:
2898 # line 315 "../ipf_y.y"
2899 { fr->fr_flags = FR_BLOCK; } break;
2900 case 47:
2901 # line 318 "../ipf_y.y"
2902 { fr->fr_flags |= FR_RETICMP; } break;
2903 case 48:
2904 # line 319 "../ipf_y.y"
2905 { fr->fr_flags |= FR_RETICMP; } break;
2906 case 49:
2907 # line 320 "../ipf_y.y"
2908 { fr->fr_flags |= FR_FAKEICMP; } break;
2909 case 50:
2910 # line 321 "../ipf_y.y"
2911 { fr->fr_flags |= FR_FAKEICMP; } break;
2912 case 51:
2913 # line 322 "../ipf_y.y"
2914 { fr->fr_flags |= FR_RETRST; } break;
2915 case 52:
2916 # line 325 "../ipf_y.y"
2917 { fr->fr_flags |= FR_LOG; } break;
2918 case 53:
2919 # line 326 "../ipf_y.y"
2920 { fr->fr_flags |= FR_LOG; } break;
2921 case 54:
2922 # line 329 "../ipf_y.y"
2923 { fr->fr_flags |= FR_AUTH; } break;
2924 case 55:
2925 # line 330 "../ipf_y.y"
2926 { fr->fr_flags |= (FR_AUTH|FR_RETRST);} break;
2927 case 56:
2928 # line 331 "../ipf_y.y"
2929 { fr->fr_flags |= FR_PREAUTH; } break;
2930 case 57:
2931 # line 334 "../ipf_y.y"
2932 { fr->fr_func = nametokva(ipf_yypvt[-2].str,
2933 							  ipfioctl[IPL_LOGIPF]);
2934 				  fr->fr_arg = ipf_yypvt[-0].num;
2935 				  free(ipf_yypvt[-2].str); } break;
2936 case 60:
2937 # line 346 "../ipf_y.y"
2938 {
2939 		if ( ruleopts & OPTION_LOG )
2940 			ipf_yyerror("Duplicate log option");
2941 		ruleopts |= OPTION_LOG;
2942 	} break;
2943 case 61:
2944 # line 352 "../ipf_y.y"
2945 {
2946 		if ( ruleopts & OPTION_QUICK )
2947 			ipf_yyerror("Duplicate quick option");
2948 		ruleopts |= OPTION_QUICK;
2949 	} break;
2950 case 62:
2951 # line 358 "../ipf_y.y"
2952 {
2953 		if ( ruleopts & OPTION_ON )
2954 			ipf_yyerror("Duplicate on option");
2955 		ruleopts |= OPTION_ON;
2956 	} break;
2957 case 63:
2958 # line 364 "../ipf_y.y"
2959 {
2960 		if ( ruleopts & OPTION_DUP )
2961 			ipf_yyerror("Duplicate dup option");
2962 		ruleopts |= OPTION_DUP;
2963 	} break;
2964 case 64:
2965 # line 370 "../ipf_y.y"
2966 {
2967 		if ( ruleopts & OPTION_FROUTE )
2968 			ipf_yyerror("Duplicate froute option");
2969 		ruleopts |= OPTION_FROUTE;
2970 	} break;
2971 case 65:
2972 # line 376 "../ipf_y.y"
2973 {
2974 		if ( ruleopts & OPTION_PROUTE )
2975 			ipf_yyerror("Duplicate proute option");
2976 		ruleopts |= OPTION_PROUTE;
2977 	} break;
2978 case 66:
2979 # line 382 "../ipf_y.y"
2980 {
2981 		if ( ruleopts & OPTION_REPLYTO )
2982 			ipf_yyerror("Duplicate replyto option");
2983 		ruleopts |= OPTION_REPLYTO;
2984 	} break;
2985 case 69:
2986 # line 395 "../ipf_y.y"
2987 {
2988 		if ( ruleopts & OPTION_LOG )
2989 			ipf_yyerror("Duplicate log option");
2990 		ruleopts |= OPTION_LOG;
2991 	} break;
2992 case 70:
2993 # line 401 "../ipf_y.y"
2994 {
2995 		if ( ruleopts & OPTION_QUICK )
2996 			ipf_yyerror("Duplicate quick option");
2997 		ruleopts |= OPTION_QUICK;
2998 	} break;
2999 case 71:
3000 # line 407 "../ipf_y.y"
3001 {
3002 		if ( ruleopts & OPTION_ON )
3003 			ipf_yyerror("Duplicate on option");
3004 		ruleopts |= OPTION_ON;
3005 	} break;
3006 case 72:
3007 # line 413 "../ipf_y.y"
3008 {
3009 		if ( ruleopts & OPTION_DUP )
3010 			ipf_yyerror("Duplicate dup option");
3011 		ruleopts |= OPTION_DUP;
3012 	} break;
3013 case 73:
3014 # line 419 "../ipf_y.y"
3015 {
3016 		if ( ruleopts & OPTION_PROUTE )
3017 			ipf_yyerror("Duplicate proute option");
3018 		ruleopts |= OPTION_PROUTE;
3019 	} break;
3020 case 74:
3021 # line 425 "../ipf_y.y"
3022 {
3023 		if ( ruleopts & OPTION_REPLYTO )
3024 			ipf_yyerror("Duplicate replyto option");
3025 		ruleopts |= OPTION_REPLYTO;
3026 	} break;
3027 case 76:
3028 # line 432 "../ipf_y.y"
3029 { DOALL(fr->fr_tos = ipf_yypvt[-0].num; fr->fr_mtos = 0xff;) } break;
3030 case 77:
3031 # line 433 "../ipf_y.y"
3032 { DOALL(fr->fr_tos = ipf_yypvt[-0].num; fr->fr_mtos = 0xff;) } break;
3033 case 79:
3034 # line 437 "../ipf_y.y"
3035 { setipftype(); } break;
3036 case 80:
3037 # line 441 "../ipf_y.y"
3038 { DOALL(fr->fr_tos = ipf_yypvt[-0].num; fr->fr_mtos = 0xff;) } break;
3039 case 81:
3040 # line 442 "../ipf_y.y"
3041 { DOREM(fr->fr_tos = ipf_yypvt[-0].num; fr->fr_mtos = 0xff;) } break;
3042 case 82:
3043 # line 444 "../ipf_y.y"
3044 { DOREM(fr->fr_tos = ipf_yypvt[-0].num; fr->fr_mtos = 0xff;) } break;
3045 case 83:
3046 # line 446 "../ipf_y.y"
3047 { DOREM(fr->fr_tos = ipf_yypvt[-0].num; fr->fr_mtos = 0xff;) } break;
3048 case 85:
3049 # line 450 "../ipf_y.y"
3050 { DOALL(fr->fr_ttl = ipf_yypvt[-0].num; fr->fr_mttl = 0xff;) } break;
3051 case 87:
3052 # line 454 "../ipf_y.y"
3053 { newlist = 1; fr = frc; added = 0; } break;
3054 case 88:
3055 # line 457 "../ipf_y.y"
3056 { nrules += added; } break;
3057 case 89:
3058 # line 460 "../ipf_y.y"
3059 { if (newlist == 1) {
3060 						newlist = 0;
3061 					  }
3062 					  fr = addrule();
3063 					  if (ipf_yycont != NULL)
3064 						*ipf_yycont = 1;
3065 					} break;
3066 case 92:
3067 # line 473 "../ipf_y.y"
3068 { setipftype(); } break;
3069 case 93:
3070 # line 477 "../ipf_y.y"
3071 { DOREM(fr->fr_ttl = ipf_yypvt[-0].num; fr->fr_mttl = 0xff;) } break;
3072 case 94:
3073 # line 479 "../ipf_y.y"
3074 { DOREM(fr->fr_ttl = ipf_yypvt[-0].num; fr->fr_mttl = 0xff;) } break;
3075 case 96:
3076 # line 482 "../ipf_y.y"
3077 { ipf_yyresetdict(); } break;
3078 case 97:
3079 # line 485 "../ipf_y.y"
3080 { setipftype();
3081 					  fr = frc;
3082 					  ipf_yysetdict(NULL); } break;
3083 case 100:
3084 # line 493 "../ipf_y.y"
3085 { DOALL(strncpy(fr->fr_group, ipf_yypvt[-0].str, \
3086 							FR_GROUPLEN); \
3087 							fillgroup(fr););
3088 					  free(ipf_yypvt[-0].str); } break;
3089 case 101:
3090 # line 497 "../ipf_y.y"
3091 { DOALL(sprintf(fr->fr_group, "%d", \
3092 							ipf_yypvt[-0].num); \
3093 							fillgroup(fr);) } break;
3094 case 103:
3095 # line 502 "../ipf_y.y"
3096 { DOALL(strncpy(fr->fr_grhead, ipf_yypvt[-0].str, \
3097 							FR_GROUPLEN););
3098 					  free(ipf_yypvt[-0].str); } break;
3099 case 104:
3100 # line 505 "../ipf_y.y"
3101 { DOALL(sprintf(fr->fr_grhead, "%d", \
3102 							ipf_yypvt[-0].num);) } break;
3103 case 111:
3104 # line 523 "../ipf_y.y"
3105 { DOALL(strncpy(fr->fr_nattag.ipt_tag,\
3106 						ipf_yypvt[-0].str, IPFTAG_LEN););
3107 					  free(ipf_yypvt[-0].str); } break;
3108 case 112:
3109 # line 526 "../ipf_y.y"
3110 { DOALL(sprintf(fr->fr_nattag.ipt_tag,\
3111 						"%d", ipf_yypvt[-0].num & 0xffffffff);) } break;
3112 case 113:
3113 # line 530 "../ipf_y.y"
3114 { DOALL(fr->fr_logtag = ipf_yypvt[-0].num;) } break;
3115 case 125:
3116 # line 555 "../ipf_y.y"
3117 { DOALL(fr->fr_pps = ipf_yypvt[-0].num;) } break;
3118 case 131:
3119 # line 573 "../ipf_y.y"
3120 { fr->fr_flags |= FR_QUICK; } break;
3121 case 135:
3122 # line 582 "../ipf_y.y"
3123 { strncpy(fr->fr_ifnames[0], ipf_yypvt[-0].str, sizeof(fr->fr_ifnames[0]));
3124 		  free(ipf_yypvt[-0].str);
3125 		} break;
3126 case 136:
3127 # line 586 "../ipf_y.y"
3128 { strncpy(fr->fr_ifnames[0], ipf_yypvt[-2].str, sizeof(fr->fr_ifnames[0]));
3129 		  free(ipf_yypvt[-2].str);
3130 		  strncpy(fr->fr_ifnames[1], ipf_yypvt[-0].str, sizeof(fr->fr_ifnames[1]));
3131 		  free(ipf_yypvt[-0].str);
3132 		} break;
3133 case 137:
3134 # line 595 "../ipf_y.y"
3135 { strncpy(fr->fr_ifnames[2], ipf_yypvt[-0].str, sizeof(fr->fr_ifnames[2]));
3136 		  free(ipf_yypvt[-0].str);
3137 		} break;
3138 case 138:
3139 # line 599 "../ipf_y.y"
3140 { strncpy(fr->fr_ifnames[2], ipf_yypvt[-2].str, sizeof(fr->fr_ifnames[2]));
3141 		  free(ipf_yypvt[-2].str);
3142 		  strncpy(fr->fr_ifnames[3], ipf_yypvt[-0].str, sizeof(fr->fr_ifnames[3]));
3143 		  free(ipf_yypvt[-0].str);
3144 		} break;
3145 case 139:
3146 # line 607 "../ipf_y.y"
3147 { strncpy(fr->fr_dif.fd_ifname, ipf_yypvt[-0].str, sizeof(fr->fr_dif.fd_ifname));
3148 	  free(ipf_yypvt[-0].str);
3149 	  fr->fr_flags |= FR_DUP;
3150 	} break;
3151 case 140:
3152 # line 612 "../ipf_y.y"
3153 { strncpy(fr->fr_dif.fd_ifname, ipf_yypvt[-2].str, sizeof(fr->fr_dif.fd_ifname));
3154 	  if (use_inet6 == 0)
3155 		fr->fr_dif.fd_ip = ipf_yypvt[-0].ip6.in4;
3156 	  else
3157 	  	bcopy(&ipf_yypvt[-0].ip6, &fr->fr_dif.fd_ip6, sizeof(fr->fr_dif.fd_ip6));
3158 	  ipf_yyexpectaddr = 0;
3159 	  fr->fr_flags |= FR_DUP;
3160 	  free(ipf_yypvt[-2].str);
3161 	} break;
3162 case 141:
3163 # line 622 "../ipf_y.y"
3164 { strncpy(fr->fr_dif.fd_ifname, ipf_yypvt[-2].str, sizeof(fr->fr_dif.fd_ifname));
3165 	  bcopy(&ipf_yypvt[-0].ip6, &fr->fr_dif.fd_ip6, sizeof(fr->fr_dif.fd_ip6));
3166 	  ipf_yyexpectaddr = 0;
3167 	  fr->fr_flags |= FR_DUP;
3168 	  free(ipf_yypvt[-2].str);
3169 	} break;
3170 case 142:
3171 # line 631 "../ipf_y.y"
3172 { ipf_yyexpectaddr = 1; ipf_yycont = &ipf_yyexpectaddr; resetaddr(); } break;
3173 case 143:
3174 # line 634 "../ipf_y.y"
3175 { fr->fr_flags |= FR_FASTROUTE; } break;
3176 case 144:
3177 # line 638 "../ipf_y.y"
3178 { strncpy(fr->fr_tif.fd_ifname, ipf_yypvt[-0].str, sizeof(fr->fr_tif.fd_ifname));
3179 	  free(ipf_yypvt[-0].str);
3180 	} break;
3181 case 145:
3182 # line 642 "../ipf_y.y"
3183 { strncpy(fr->fr_tif.fd_ifname, ipf_yypvt[-2].str, sizeof(fr->fr_tif.fd_ifname));
3184 	  if (use_inet6 == 0)
3185 		fr->fr_tif.fd_ip = ipf_yypvt[-0].ip6.in4;
3186 	  else
3187 	  	bcopy(&ipf_yypvt[-0].ip6, &fr->fr_tif.fd_ip6, sizeof(fr->fr_tif.fd_ip6));
3188 	  ipf_yyexpectaddr = 0;
3189 	  free(ipf_yypvt[-2].str);
3190 	} break;
3191 case 146:
3192 # line 651 "../ipf_y.y"
3193 { strncpy(fr->fr_tif.fd_ifname, ipf_yypvt[-2].str, sizeof(fr->fr_tif.fd_ifname));
3194 	  bcopy(&ipf_yypvt[-0].ip6, &fr->fr_tif.fd_ip6, sizeof(fr->fr_tif.fd_ip6));
3195 	  ipf_yyexpectaddr = 0;
3196 	  free(ipf_yypvt[-2].str);
3197 	} break;
3198 case 149:
3199 # line 665 "../ipf_y.y"
3200 { strncpy(fr->fr_rif.fd_ifname, ipf_yypvt[-0].str, sizeof(fr->fr_rif.fd_ifname));
3201 	  free(ipf_yypvt[-0].str);
3202 	} break;
3203 case 150:
3204 # line 669 "../ipf_y.y"
3205 { strncpy(fr->fr_rif.fd_ifname, ipf_yypvt[-2].str, sizeof(fr->fr_rif.fd_ifname));
3206 	  if (use_inet6 == 0)
3207 		fr->fr_rif.fd_ip = ipf_yypvt[-0].ip6.in4;
3208 	  else
3209 		bcopy(&ipf_yypvt[-0].ip6, &fr->fr_rif.fd_ip6, sizeof(fr->fr_rif.fd_ip6));
3210 	  ipf_yyexpectaddr = 0;
3211 	  free(ipf_yypvt[-2].str);
3212 	} break;
3213 case 151:
3214 # line 678 "../ipf_y.y"
3215 { strncpy(fr->fr_rif.fd_ifname, ipf_yypvt[-2].str, sizeof(fr->fr_rif.fd_ifname));
3216 	  bcopy(&ipf_yypvt[-0].ip6, &fr->fr_rif.fd_ip6, sizeof(fr->fr_rif.fd_ip6));
3217 	  ipf_yyexpectaddr = 0;
3218 	  free(ipf_yypvt[-2].str);
3219 	} break;
3220 case 154:
3221 # line 691 "../ipf_y.y"
3222 { fr->fr_flags |= FR_LOGBODY; } break;
3223 case 155:
3224 # line 692 "../ipf_y.y"
3225 { fr->fr_flags |= FR_LOGFIRST; } break;
3226 case 156:
3227 # line 693 "../ipf_y.y"
3228 { fr->fr_flags |= FR_LOGORBLOCK; } break;
3229 case 157:
3230 # line 694 "../ipf_y.y"
3231 { unsetsyslog(); } break;
3232 case 158:
3233 # line 698 "../ipf_y.y"
3234 { fr->fr_icode = ipf_yypvt[-1].num; ipf_yyresetdict(); } break;
3235 case 159:
3236 # line 702 "../ipf_y.y"
3237 { ipf_yysetdict(icmpcodewords); } break;
3238 case 163:
3239 # line 710 "../ipf_y.y"
3240 { DOREM(fr->fr_proto = ipf_yypvt[-0].num; \
3241 					fr->fr_mproto = 0xff;) } break;
3242 case 164:
3243 # line 712 "../ipf_y.y"
3244 { if (!strcmp(ipf_yypvt[-0].str, "tcp-udp")) {
3245 					DOREM(fr->fr_flx |= FI_TCPUDP; \
3246 					      fr->fr_mflx |= FI_TCPUDP;)
3247 				  } else {
3248 					int p = getproto(ipf_yypvt[-0].str);
3249 					if (p == -1)
3250 						ipf_yyerror("protocol unknown");
3251 					DOREM(fr->fr_proto = p; \
3252 						fr->fr_mproto = 0xff;)
3253 				  }
3254 				  free(ipf_yypvt[-0].str);
3255 				} break;
3256 case 165:
3257 # line 725 "../ipf_y.y"
3258 { if (!strcmp(ipf_yypvt[-2].str, "tcp") &&
3259 				      !strcmp(ipf_yypvt[-0].str, "udp")) {
3260 					DOREM(fr->fr_flx |= FI_TCPUDP; \
3261 					      fr->fr_mflx |= FI_TCPUDP;)
3262 				  } else
3263 					YYERROR;
3264 				  free(ipf_yypvt[-2].str);
3265 				  free(ipf_yypvt[-0].str);
3266 				} break;
3267 case 166:
3268 # line 737 "../ipf_y.y"
3269 { ipf_yysetdict(NULL); } break;
3270 case 167:
3271 # line 740 "../ipf_y.y"
3272 { ipf_yyexpectaddr = 0; ipf_yycont = NULL; } break;
3273 case 168:
3274 # line 741 "../ipf_y.y"
3275 { ipf_yyexpectaddr = 0; ipf_yycont = NULL; } break;
3276 case 169:
3277 # line 742 "../ipf_y.y"
3278 { ipf_yyexpectaddr = 0; ipf_yycont = NULL; } break;
3279 case 170:
3280 # line 745 "../ipf_y.y"
3281 { setipftype();
3282 					  if (fr == NULL)
3283 						fr = frc;
3284 					  ipf_yyexpectaddr = 1;
3285 					  if (ipf_yydebug)
3286 						printf("set ipf_yyexpectaddr\n");
3287 					  ipf_yycont = &ipf_yyexpectaddr;
3288 					  ipf_yysetdict(addrwords);
3289 					  resetaddr(); } break;
3290 case 171:
3291 # line 756 "../ipf_y.y"
3292 { if (fr == NULL)
3293 						fr = frc;
3294 					  ipf_yyexpectaddr = 1;
3295 					  if (ipf_yydebug)
3296 						printf("set ipf_yyexpectaddr\n");
3297 					  ipf_yycont = &ipf_yyexpectaddr;
3298 					  ipf_yysetdict(addrwords);
3299 					  resetaddr(); } break;
3300 case 174:
3301 # line 770 "../ipf_y.y"
3302 { nowith = 0; setipftype(); } break;
3303 case 175:
3304 # line 771 "../ipf_y.y"
3305 { nowith = 0; setipftype(); } break;
3306 case 177:
3307 # line 775 "../ipf_y.y"
3308 { DOALL(fr->fr_tcpf = ipf_yypvt[-0].num; fr->fr_tcpfm = FR_TCPFMAX;) } break;
3309 case 178:
3310 # line 777 "../ipf_y.y"
3311 { DOALL(fr->fr_tcpf = ipf_yypvt[-2].num; fr->fr_tcpfm = ipf_yypvt[-0].num;) } break;
3312 case 179:
3313 # line 779 "../ipf_y.y"
3314 { DOALL(fr->fr_tcpf = 0; fr->fr_tcpfm = ipf_yypvt[-0].num;) } break;
3315 case 180:
3316 # line 781 "../ipf_y.y"
3317 { DOALL(fr->fr_tcpf = ipf_yypvt[-0].num; fr->fr_tcpfm = FR_TCPFMAX;) } break;
3318 case 181:
3319 # line 783 "../ipf_y.y"
3320 { DOALL(fr->fr_tcpf = 0; fr->fr_tcpfm = ipf_yypvt[-0].num;) } break;
3321 case 182:
3322 # line 785 "../ipf_y.y"
3323 { DOALL(fr->fr_tcpf = ipf_yypvt[-2].num; fr->fr_tcpfm = ipf_yypvt[-0].num;) } break;
3324 case 183:
3325 # line 787 "../ipf_y.y"
3326 { DOALL(fr->fr_tcpf = ipf_yypvt[-2].num; fr->fr_tcpfm = ipf_yypvt[-0].num;) } break;
3327 case 184:
3328 # line 789 "../ipf_y.y"
3329 { DOALL(fr->fr_tcpf = ipf_yypvt[-2].num; fr->fr_tcpfm = ipf_yypvt[-0].num;) } break;
3330 case 185:
3331 # line 793 "../ipf_y.y"
3332 { if (frc->fr_type != FR_T_IPF)
3333 				ipf_yyerror("flags with non-ipf type rule");
3334 			  if (frc->fr_proto != IPPROTO_TCP)
3335 				ipf_yyerror("flags with non-TCP rule");
3336 			} break;
3337 case 186:
3338 # line 801 "../ipf_y.y"
3339 { ipf_yyval.num = tcpflags(ipf_yypvt[-0].str); free(ipf_yypvt[-0].str); } break;
3340 case 187:
3341 # line 802 "../ipf_y.y"
3342 { ipf_yyval.num = ipf_yypvt[-0].num; } break;
3343 case 188:
3344 # line 806 "../ipf_y.y"
3345 { ipf_yyresetdict(); } break;
3346 case 191:
3347 # line 809 "../ipf_y.y"
3348 { DOALL(fr->fr_flags |= FR_NOTSRCIP;) } break;
3349 case 192:
3350 # line 813 "../ipf_y.y"
3351 { DOREM(bcopy(&(ipf_yypvt[-0].ipp.a), &fr->fr_ip.fi_src, sizeof(ipf_yypvt[-0].ipp.a)); \
3352 			bcopy(&(ipf_yypvt[-0].ipp.m), &fr->fr_mip.fi_src, sizeof(ipf_yypvt[-0].ipp.m)); \
3353 			if (dynamic != -1) { \
3354 				fr->fr_satype = ifpflag; \
3355 				fr->fr_ipf->fri_sifpidx = dynamic; \
3356 			} else if (pooled || hashed) \
3357 				fr->fr_satype = FRI_LOOKUP;)
3358 		} break;
3359 case 194:
3360 # line 825 "../ipf_y.y"
3361 { DOREM(bcopy(&(ipf_yypvt[-0].ipp.a), &fr->fr_ip.fi_src, sizeof(ipf_yypvt[-0].ipp.a)); \
3362 			bcopy(&(ipf_yypvt[-0].ipp.m), &fr->fr_mip.fi_src, sizeof(ipf_yypvt[-0].ipp.m)); \
3363 			if (dynamic != -1) { \
3364 				fr->fr_satype = ifpflag; \
3365 				fr->fr_ipf->fri_sifpidx = dynamic; \
3366 			} else if (pooled || hashed) \
3367 				fr->fr_satype = FRI_LOOKUP;)
3368 		} break;
3369 case 195:
3370 # line 834 "../ipf_y.y"
3371 { DOREM(bcopy(&(ipf_yypvt[-0].ipp.a), &fr->fr_ip.fi_src, sizeof(ipf_yypvt[-0].ipp.a)); \
3372 			bcopy(&(ipf_yypvt[-0].ipp.m), &fr->fr_mip.fi_src, sizeof(ipf_yypvt[-0].ipp.m)); \
3373 			if (dynamic != -1) { \
3374 				fr->fr_satype = ifpflag; \
3375 				fr->fr_ipf->fri_sifpidx = dynamic; \
3376 			} else if (pooled || hashed) \
3377 				fr->fr_satype = FRI_LOOKUP;)
3378 		} break;
3379 case 197:
3380 # line 846 "../ipf_y.y"
3381 { DOALL(fr->fr_scmp = ipf_yypvt[-0].pc.pc; fr->fr_sport = ipf_yypvt[-0].pc.p1;) } break;
3382 case 198:
3383 # line 848 "../ipf_y.y"
3384 { DOALL(fr->fr_scmp = ipf_yypvt[-0].pc.pc; fr->fr_sport = ipf_yypvt[-0].pc.p1; \
3385 			fr->fr_stop = ipf_yypvt[-0].pc.p2;) } break;
3386 case 199:
3387 # line 851 "../ipf_y.y"
3388 { ipf_yyresetdict(); } break;
3389 case 200:
3390 # line 856 "../ipf_y.y"
3391 { DOALL(fr->fr_scmp = ipf_yypvt[-0].pc.pc; fr->fr_sport = ipf_yypvt[-0].pc.p1;) } break;
3392 case 201:
3393 # line 858 "../ipf_y.y"
3394 { DOALL(fr->fr_scmp = ipf_yypvt[-0].pc.pc; fr->fr_sport = ipf_yypvt[-0].pc.p1; \
3395 			fr->fr_stop = ipf_yypvt[-0].pc.p2;) } break;
3396 case 202:
3397 # line 861 "../ipf_y.y"
3398 { ipf_yyresetdict(); } break;
3399 case 203:
3400 # line 865 "../ipf_y.y"
3401 { DOREM(fr->fr_scmp = FR_EQUAL; fr->fr_sport = ipf_yypvt[-0].port;) } break;
3402 case 204:
3403 # line 867 "../ipf_y.y"
3404 { DOREM(fr->fr_scmp = FR_EQUAL; fr->fr_sport = ipf_yypvt[-0].port;) } break;
3405 case 205:
3406 # line 871 "../ipf_y.y"
3407 { ipf_yyresetdict(); } break;
3408 case 208:
3409 # line 874 "../ipf_y.y"
3410 { DOALL(fr->fr_flags |= FR_NOTDSTIP;) } break;
3411 case 209:
3412 # line 878 "../ipf_y.y"
3413 { DOREM(bcopy(&(ipf_yypvt[-0].ipp.a), &fr->fr_ip.fi_dst, sizeof(ipf_yypvt[-0].ipp.a)); \
3414 			bcopy(&(ipf_yypvt[-0].ipp.m), &fr->fr_mip.fi_dst, sizeof(ipf_yypvt[-0].ipp.m)); \
3415 			if (dynamic != -1) { \
3416 				fr->fr_datype = ifpflag; \
3417 				fr->fr_ipf->fri_difpidx = dynamic; \
3418 			  } else if (pooled || hashed) \
3419 				fr->fr_datype = FRI_LOOKUP;)
3420 		} break;
3421 case 211:
3422 # line 890 "../ipf_y.y"
3423 { DOREM(bcopy(&(ipf_yypvt[-0].ipp.a), &fr->fr_ip.fi_dst, sizeof(ipf_yypvt[-0].ipp.a)); \
3424 			bcopy(&(ipf_yypvt[-0].ipp.m), &fr->fr_mip.fi_dst, sizeof(ipf_yypvt[-0].ipp.m)); \
3425 			if (dynamic != -1) { \
3426 				fr->fr_datype = ifpflag; \
3427 				fr->fr_ipf->fri_difpidx = dynamic; \
3428 			} else if (pooled || hashed) \
3429 				fr->fr_datype = FRI_LOOKUP;)
3430 		} break;
3431 case 212:
3432 # line 899 "../ipf_y.y"
3433 { DOREM(bcopy(&(ipf_yypvt[-0].ipp.a), &fr->fr_ip.fi_dst, sizeof(ipf_yypvt[-0].ipp.a)); \
3434 			bcopy(&(ipf_yypvt[-0].ipp.m), &fr->fr_mip.fi_dst, sizeof(ipf_yypvt[-0].ipp.m)); \
3435 			if (dynamic != -1) { \
3436 				fr->fr_datype = ifpflag; \
3437 				fr->fr_ipf->fri_difpidx = dynamic; \
3438 			} else if (pooled || hashed) \
3439 				fr->fr_datype = FRI_LOOKUP;)
3440 		} break;
3441 case 214:
3442 # line 912 "../ipf_y.y"
3443 { DOALL(fr->fr_dcmp = ipf_yypvt[-0].pc.pc; fr->fr_dport = ipf_yypvt[-0].pc.p1;) } break;
3444 case 215:
3445 # line 914 "../ipf_y.y"
3446 { DOALL(fr->fr_dcmp = ipf_yypvt[-0].pc.pc; fr->fr_dport = ipf_yypvt[-0].pc.p1; \
3447 			fr->fr_dtop = ipf_yypvt[-0].pc.p2;) } break;
3448 case 216:
3449 # line 917 "../ipf_y.y"
3450 { ipf_yyresetdict(); } break;
3451 case 217:
3452 # line 922 "../ipf_y.y"
3453 { DOALL(fr->fr_dcmp = ipf_yypvt[-0].pc.pc; fr->fr_dport = ipf_yypvt[-0].pc.p1;) } break;
3454 case 218:
3455 # line 924 "../ipf_y.y"
3456 { DOALL(fr->fr_dcmp = ipf_yypvt[-0].pc.pc; fr->fr_dport = ipf_yypvt[-0].pc.p1; \
3457 			fr->fr_dtop = ipf_yypvt[-0].pc.p2;) } break;
3458 case 219:
3459 # line 927 "../ipf_y.y"
3460 { ipf_yyresetdict(); } break;
3461 case 220:
3462 # line 931 "../ipf_y.y"
3463 { DOREM(fr->fr_dcmp = FR_EQUAL; fr->fr_dport = ipf_yypvt[-0].port;) } break;
3464 case 221:
3465 # line 933 "../ipf_y.y"
3466 { DOREM(fr->fr_dcmp = FR_EQUAL; fr->fr_dport = ipf_yypvt[-0].port;) } break;
3467 case 222:
3468 # line 936 "../ipf_y.y"
3469 { pooled = 1;
3470 					  ipf_yyexpectaddr = 0;
3471 					  ipf_yyval.ipp.a.iplookuptype = IPLT_POOL;
3472 					  ipf_yyval.ipp.a.iplookupnum = ipf_yypvt[-0].num; } break;
3473 case 223:
3474 # line 940 "../ipf_y.y"
3475 { pooled = 1;
3476 					  ipf_yyexpectaddr = 0;
3477 					  ipf_yyval.ipp.a.iplookuptype = IPLT_POOL;
3478 					  ipf_yyval.ipp.a.iplookupnum = makepool(ipf_yypvt[-1].alist); } break;
3479 case 224:
3480 # line 944 "../ipf_y.y"
3481 { hashed = 1;
3482 					  ipf_yyexpectaddr = 0;
3483 					  ipf_yyval.ipp.a.iplookuptype = IPLT_HASH;
3484 					  ipf_yyval.ipp.a.iplookupnum = ipf_yypvt[-0].num; } break;
3485 case 225:
3486 # line 948 "../ipf_y.y"
3487 { hashed = 1;
3488 					  ipf_yyexpectaddr = 0;
3489 					  ipf_yyval.ipp.a.iplookuptype = IPLT_HASH;
3490 					  ipf_yyval.ipp.a.iplookupnum = makehash(ipf_yypvt[-1].alist); } break;
3491 case 226:
3492 # line 952 "../ipf_y.y"
3493 { bcopy(&ipf_yypvt[-0].ipp, &ipf_yyval.ipp, sizeof(ipf_yyval.ipp));
3494 					  ipf_yyexpectaddr = 0; } break;
3495 case 227:
3496 # line 956 "../ipf_y.y"
3497 { bzero(&(ipf_yyval.ipp), sizeof(ipf_yyval.ipp));
3498 					  ipf_yyresetdict();
3499 					  ipf_yyexpectaddr = 0; } break;
3500 case 228:
3501 # line 959 "../ipf_y.y"
3502 { if (use_inet6 == 0) {
3503 						ipf_yyval.ipp.a.in4 = ipf_yypvt[-0].ip6.in4;
3504 						ipf_yyval.ipp.m.in4_addr = 0xffffffff;
3505 					  } else {
3506 						set_ipv6_addr = 1;
3507 						bcopy(&ipf_yypvt[-0].ip6, &ipf_yyval.ipp.a, sizeof(ipf_yyval.ipp.a));
3508 						fill6bits(128, (u_32_t *)&ipf_yyval.ipp.m);
3509 					  }
3510 					  ipf_yyexpectaddr = 0; } break;
3511 case 229:
3512 # line 968 "../ipf_y.y"
3513 { ipf_yyresetdict();
3514 					  if (use_inet6 == 0)
3515 						ipf_yyval.ipp.a.in4 = ipf_yypvt[-0].ip6.in4;
3516 					  else {
3517 						set_ipv6_addr = 1;
3518 						bcopy(&ipf_yypvt[-0].ip6, &ipf_yyval.ipp.a, sizeof(ipf_yyval.ipp.a));
3519 					  }
3520 					} break;
3521 case 230:
3522 # line 976 "../ipf_y.y"
3523 { ipf_yysetdict(maskwords); } break;
3524 case 231:
3525 # line 977 "../ipf_y.y"
3526 { if (use_inet6 == 0) {
3527 						ipf_yyval.ipp.m.in4_addr = ipf_yypvt[-0].ip6.in4.s_addr;
3528 						ipf_yyval.ipp.a.in4_addr &= ipf_yypvt[-0].ip6.in4.s_addr;
3529 					  } else
3530 						bcopy(&ipf_yypvt[-0].ip6, &ipf_yyval.ipp.m, sizeof(ipf_yyval.ipp.m));
3531 					  ipf_yyresetdict();
3532 					  ipf_yyexpectaddr = 0; } break;
3533 case 232:
3534 # line 984 "../ipf_y.y"
3535 { set_ipv6_addr = 1;
3536 					  bcopy(&ipf_yypvt[-0].ip6, &ipf_yyval.ipp.a, sizeof(ipf_yyval.ipp.a));
3537 					  fill6bits(128, (u_32_t *)&ipf_yyval.ipp.m);
3538 					  ipf_yyresetdict();
3539 					  ipf_yyexpectaddr = 0; } break;
3540 case 233:
3541 # line 989 "../ipf_y.y"
3542 { set_ipv6_addr = 1;
3543 					  ipf_yyresetdict();
3544 					  bcopy(&ipf_yypvt[-0].ip6, &ipf_yyval.ipp.a, sizeof(ipf_yyval.ipp.a)); } break;
3545 case 234:
3546 # line 992 "../ipf_y.y"
3547 { ipf_yysetdict(maskwords); } break;
3548 case 235:
3549 # line 993 "../ipf_y.y"
3550 { bcopy(&ipf_yypvt[-0].ip6, &ipf_yyval.ipp.m, sizeof(ipf_yyval.ipp.m));
3551 					  ipf_yyresetdict();
3552 					  ipf_yyexpectaddr = 0; } break;
3553 case 238:
3554 # line 1004 "../ipf_y.y"
3555 { ipf_yyval.ip6.in4 = ipf_yypvt[-0].ipa; } break;
3556 case 239:
3557 # line 1005 "../ipf_y.y"
3558 { ipf_yyval.ip6.in4.s_addr = htonl(ipf_yypvt[-0].num); } break;
3559 case 240:
3560 # line 1006 "../ipf_y.y"
3561 { if ((use_inet6 == 0) && (ipf_yypvt[-0].num <= 32))
3562 						ntomask(4, ipf_yypvt[-0].num, (u_32_t *)&ipf_yyval.ip6.in4);
3563 					  else if ((use_inet6 != 0) && (ipf_yypvt[-0].num <= 128))
3564 						ntomask(6, ipf_yypvt[-0].num, ipf_yyval.ip6.i6);
3565 					  else {
3566 						ipf_yyerror("Bad value specified for netmask");
3567 						return 0;
3568 					  }
3569 					} break;
3570 case 241:
3571 # line 1015 "../ipf_y.y"
3572 { if (ifpflag == FRI_DYNAMIC) {
3573 						bzero(&ipf_yyval.ip6, sizeof(ipf_yyval.ip6));
3574 						ifpflag = FRI_BROADCAST;
3575 					  } else
3576 						YYERROR;
3577 					} break;
3578 case 242:
3579 # line 1021 "../ipf_y.y"
3580 { if (ifpflag == FRI_DYNAMIC) {
3581 						bzero(&ipf_yyval.ip6, sizeof(ipf_yyval.ip6));
3582 						ifpflag = FRI_NETWORK;
3583 					  } else
3584 						YYERROR;
3585 					} break;
3586 case 243:
3587 # line 1027 "../ipf_y.y"
3588 { if (ifpflag == FRI_DYNAMIC) {
3589 						bzero(&ipf_yyval.ip6, sizeof(ipf_yyval.ip6));
3590 						ifpflag = FRI_NETMASKED;
3591 					  } else
3592 						YYERROR;
3593 					} break;
3594 case 244:
3595 # line 1033 "../ipf_y.y"
3596 { if (ifpflag == FRI_DYNAMIC) {
3597 						bzero(&ipf_yyval.ip6, sizeof(ipf_yyval.ip6));
3598 						ifpflag = FRI_PEERADDR;
3599 					  } else
3600 						YYERROR;
3601 					} break;
3602 case 245:
3603 # line 1042 "../ipf_y.y"
3604 { ipf_yyval.ip6.in4 = ipf_yypvt[-0].ipa; } break;
3605 case 246:
3606 # line 1043 "../ipf_y.y"
3607 { ipf_yyval.ip6.in4.s_addr = ipf_yypvt[-0].num; } break;
3608 case 247:
3609 # line 1044 "../ipf_y.y"
3610 { ipf_yyval.ip6.in4.s_addr = ipf_yypvt[-0].num; } break;
3611 case 248:
3612 # line 1045 "../ipf_y.y"
3613 { if (lookuphost(ipf_yypvt[-0].str, &ipf_yyval.ip6) == 1)
3614 						free(ipf_yypvt[-0].str);
3615 					  else {
3616 						free(ipf_yypvt[-0].str);
3617 						if (ifpflag != FRI_DYNAMIC)
3618 							ipf_yyerror("Unknown hostname");
3619 					  }
3620 					} break;
3621 case 249:
3622 # line 1056 "../ipf_y.y"
3623 { ipf_yyval.alist = newalist(NULL);
3624 			  if (set_ipv6_addr)
3625 				  ipf_yyval.alist->al_family = AF_INET6;
3626 			  else
3627 				  ipf_yyval.alist->al_family = AF_INET;
3628 			  set_ipv6_addr = 0;
3629 			  bcopy(&(ipf_yypvt[-0].ipp.a), &(ipf_yyval.alist->al_i6addr), sizeof(ipf_yypvt[-0].ipp.a));
3630 			  bcopy(&(ipf_yypvt[-0].ipp.m), &(ipf_yyval.alist->al_i6mask), sizeof(ipf_yypvt[-0].ipp.m)); } break;
3631 case 250:
3632 # line 1065 "../ipf_y.y"
3633 { ipf_yyval.alist = newalist(ipf_yypvt[-2].alist);
3634 			  if (set_ipv6_addr)
3635 				  ipf_yyval.alist->al_family = AF_INET6;
3636 			  else
3637 				  ipf_yyval.alist->al_family = AF_INET;
3638 			  set_ipv6_addr = 0;
3639 			  bcopy(&(ipf_yypvt[-0].ipp.a), &(ipf_yyval.alist->al_i6addr), sizeof(ipf_yypvt[-0].ipp.a));
3640 			  bcopy(&(ipf_yypvt[-0].ipp.m), &(ipf_yyval.alist->al_i6mask), sizeof(ipf_yypvt[-0].ipp.m)); } break;
3641 case 251:
3642 # line 1075 "../ipf_y.y"
3643 { ipf_yyexpectaddr = 0; ipf_yycont = NULL; ipf_yyresetdict(); } break;
3644 case 252:
3645 # line 1078 "../ipf_y.y"
3646 { ipf_yyexpectaddr = 0; ipf_yycont = NULL; ipf_yyresetdict(); } break;
3647 case 253:
3648 # line 1082 "../ipf_y.y"
3649 { ipf_yyval.alist = newalist(NULL);
3650 			  if (set_ipv6_addr)
3651 				  ipf_yyval.alist->al_family = AF_INET6;
3652 			  else
3653 				  ipf_yyval.alist->al_family = AF_INET;
3654 			  set_ipv6_addr = 0;
3655 			  bcopy(&(ipf_yypvt[-0].ipp.a), &(ipf_yyval.alist->al_i6addr), sizeof(ipf_yypvt[-0].ipp.a));
3656 			  bcopy(&(ipf_yypvt[-0].ipp.m), &(ipf_yyval.alist->al_i6mask), sizeof(ipf_yypvt[-0].ipp.m)); } break;
3657 case 254:
3658 # line 1090 "../ipf_y.y"
3659 { ipf_yyval.alist = newalist(NULL);
3660 			  ipf_yyval.alist->al_not = 1;
3661 			  if (set_ipv6_addr)
3662 				  ipf_yyval.alist->al_family = AF_INET6;
3663 			  else
3664 				  ipf_yyval.alist->al_family = AF_INET;
3665 			  set_ipv6_addr = 0;
3666 			  bcopy(&(ipf_yypvt[-0].ipp.a), &(ipf_yyval.alist->al_i6addr), sizeof(ipf_yypvt[-0].ipp.a));
3667 			  bcopy(&(ipf_yypvt[-0].ipp.m), &(ipf_yyval.alist->al_i6mask), sizeof(ipf_yypvt[-0].ipp.m)); } break;
3668 case 255:
3669 # line 1100 "../ipf_y.y"
3670 { ipf_yyval.alist = newalist(ipf_yypvt[-2].alist);
3671 			  if (set_ipv6_addr)
3672 				  ipf_yyval.alist->al_family = AF_INET6;
3673 			  else
3674 				  ipf_yyval.alist->al_family = AF_INET;
3675 			  set_ipv6_addr = 0;
3676 			  bcopy(&(ipf_yypvt[-0].ipp.a), &(ipf_yyval.alist->al_i6addr), sizeof(ipf_yypvt[-0].ipp.a));
3677 			  bcopy(&(ipf_yypvt[-0].ipp.m), &(ipf_yyval.alist->al_i6mask), sizeof(ipf_yypvt[-0].ipp.m)); } break;
3678 case 256:
3679 # line 1109 "../ipf_y.y"
3680 { ipf_yyval.alist = newalist(ipf_yypvt[-3].alist);
3681 			  ipf_yyval.alist->al_not = 1;
3682 			  if (set_ipv6_addr)
3683 				  ipf_yyval.alist->al_family = AF_INET6;
3684 			  else
3685 				  ipf_yyval.alist->al_family = AF_INET;
3686 			  set_ipv6_addr = 0;
3687 			  bcopy(&(ipf_yypvt[-0].ipp.a), &(ipf_yyval.alist->al_i6addr), sizeof(ipf_yypvt[-0].ipp.a));
3688 			  bcopy(&(ipf_yypvt[-0].ipp.m), &(ipf_yyval.alist->al_i6mask), sizeof(ipf_yypvt[-0].ipp.m)); } break;
3689 case 257:
3690 # line 1120 "../ipf_y.y"
3691 { ipf_yyexpectaddr = 0;
3692 					  ipf_yycont = NULL;
3693 					} break;
3694 case 258:
3695 # line 1125 "../ipf_y.y"
3696 { ipf_yyval.num = ipf_yypvt[-0].num;
3697 					  ipf_yysetdict(NULL); } break;
3698 case 259:
3699 # line 1127 "../ipf_y.y"
3700 { ipf_yyval.num = ipf_yypvt[-0].num; } break;
3701 case 260:
3702 # line 1130 "../ipf_y.y"
3703 { ipf_yyval.num = FR_EQUAL;
3704 					  ipf_yysetdict(NULL); } break;
3705 case 261:
3706 # line 1134 "../ipf_y.y"
3707 { ipf_yyexpectaddr = 0;
3708 					  ipf_yycont = NULL;
3709 					  ipf_yysetdict(NULL); } break;
3710 case 262:
3711 # line 1140 "../ipf_y.y"
3712 { ipf_yyval.pc.pc = ipf_yypvt[-1].num;
3713 					  ipf_yyval.pc.p1 = ipf_yypvt[-0].port;
3714 					  ipf_yyresetdict(); } break;
3715 case 263:
3716 # line 1146 "../ipf_y.y"
3717 { ipf_yyval.pc.p1 = ipf_yypvt[-2].port;
3718 					  ipf_yyval.pc.pc = ipf_yypvt[-1].num;
3719 					  ipf_yyval.pc.p2 = ipf_yypvt[-0].port;
3720 					  ipf_yyresetdict(); } break;
3721 case 266:
3722 # line 1156 "../ipf_y.y"
3723 { DOALL(fr->fr_icmp = htons(ipf_yypvt[-0].num << 8); fr->fr_icmpm = htons(0xff00););
3724 	  ipf_yyresetdict();
3725 	} break;
3726 case 267:
3727 # line 1159 "../ipf_y.y"
3728 { ipf_yyresetdict(); } break;
3729 case 268:
3730 # line 1163 "../ipf_y.y"
3731 { setipftype();
3732 						  ipf_yysetdict(icmptypewords); } break;
3733 case 270:
3734 # line 1168 "../ipf_y.y"
3735 { DOALL(fr->fr_icmp |= htons(ipf_yypvt[-0].num); fr->fr_icmpm |= htons(0xff););
3736 	  ipf_yyresetdict();
3737 	} break;
3738 case 271:
3739 # line 1171 "../ipf_y.y"
3740 { ipf_yyresetdict(); } break;
3741 case 272:
3742 # line 1175 "../ipf_y.y"
3743 { ipf_yysetdict(icmpcodewords); } break;
3744 case 273:
3745 # line 1180 "../ipf_y.y"
3746 { DOREM(fr->fr_icmp = htons(ipf_yypvt[-0].num << 8); fr->fr_icmpm = htons(0xff00);) } break;
3747 case 274:
3748 # line 1182 "../ipf_y.y"
3749 { DOREM(fr->fr_icmp = htons(ipf_yypvt[-0].num << 8); fr->fr_icmpm = htons(0xff00);) } break;
3750 case 275:
3751 # line 1187 "../ipf_y.y"
3752 { DOREM(fr->fr_icmp |= htons(ipf_yypvt[-0].num); fr->fr_icmpm |= htons(0xff);) } break;
3753 case 276:
3754 # line 1189 "../ipf_y.y"
3755 { DOREM(fr->fr_icmp |= htons(ipf_yypvt[-0].num); fr->fr_icmpm |= htons(0xff);) } break;
3756 case 278:
3757 # line 1192 "../ipf_y.y"
3758 { DOALL(fr->fr_age[0] = ipf_yypvt[-0].num; \
3759 						fr->fr_age[1] = ipf_yypvt[-0].num;) } break;
3760 case 279:
3761 # line 1195 "../ipf_y.y"
3762 { DOALL(fr->fr_age[0] = ipf_yypvt[-2].num; \
3763 						fr->fr_age[1] = ipf_yypvt[-0].num;) } break;
3764 case 285:
3765 # line 1206 "../ipf_y.y"
3766 { DOALL(fr->fr_flags |= FR_KEEPSTATE;)} break;
3767 case 286:
3768 # line 1210 "../ipf_y.y"
3769 { DOALL(fr->fr_flags |= FR_KEEPFRAG;) } break;
3770 case 287:
3771 # line 1211 "../ipf_y.y"
3772 { DOALL(fr->fr_flags |= FR_KEEPFRAG;) } break;
3773 case 292:
3774 # line 1224 "../ipf_y.y"
3775 { DOALL(fr->fr_flags |= FR_FRSTRICT;) } break;
3776 case 297:
3777 # line 1237 "../ipf_y.y"
3778 { DOALL(fr->fr_statemax = ipf_yypvt[-0].num;) } break;
3779 case 298:
3780 # line 1238 "../ipf_y.y"
3781 { DOALL(if (fr->fr_proto != IPPROTO_TCP) { \
3782 						YYERROR; \
3783 					  } else \
3784 						fr->fr_flags |= FR_STSTRICT;)
3785 				} break;
3786 case 299:
3787 # line 1243 "../ipf_y.y"
3788 { DOALL(if (fr->fr_proto != IPPROTO_TCP) { \
3789 						YYERROR; \
3790 					  } else \
3791 						fr->fr_flags |= FR_NEWISN;)
3792 				} break;
3793 case 300:
3794 # line 1248 "../ipf_y.y"
3795 { DOALL(fr->fr_flags |= FR_NOICMPERR;) } break;
3796 case 301:
3797 # line 1250 "../ipf_y.y"
3798 { DOALL(fr->fr_flags |= FR_STATESYNC;) } break;
3799 case 302:
3800 # line 1254 "../ipf_y.y"
3801 { if (getport(frc, ipf_yypvt[-0].str, &(ipf_yyval.port)) == -1)
3802 						ipf_yyerror("service unknown");
3803 					  else
3804 						ipf_yyval.port = ntohs(ipf_yyval.port);
3805 					  free(ipf_yypvt[-0].str);
3806 					} break;
3807 case 303:
3808 # line 1260 "../ipf_y.y"
3809 { if (ipf_yypvt[-0].num > 65535)	/* Unsigned */
3810 						ipf_yyerror("invalid port number");
3811 					  else
3812 						ipf_yyval.port = ipf_yypvt[-0].num;
3813 					} break;
3814 case 307:
3815 # line 1274 "../ipf_y.y"
3816 { DOALL(fr->fr_flx |= ipf_yypvt[-0].num; fr->fr_mflx |= ipf_yypvt[-0].num;) } break;
3817 case 308:
3818 # line 1276 "../ipf_y.y"
3819 { DOALL(fr->fr_mflx |= ipf_yypvt[-0].num;) } break;
3820 case 309:
3821 # line 1277 "../ipf_y.y"
3822 { ipf_yyresetdict(); } break;
3823 case 310:
3824 # line 1278 "../ipf_y.y"
3825 { ipf_yyresetdict(); } break;
3826 case 311:
3827 # line 1279 "../ipf_y.y"
3828 { ipf_yyresetdict(); } break;
3829 case 312:
3830 # line 1282 "../ipf_y.y"
3831 { ipf_yysetdict(ipv4optwords); } break;
3832 case 313:
3833 # line 1286 "../ipf_y.y"
3834 { if (use_inet6 == 0)
3835 				ipf_yyerror("only available with IPv6");
3836 			  ipf_yysetdict(ipv6optwords);
3837 			} break;
3838 case 314:
3839 # line 1293 "../ipf_y.y"
3840 { nowith = 1; } break;
3841 case 315:
3842 # line 1294 "../ipf_y.y"
3843 { nowith = 1; } break;
3844 case 316:
3845 # line 1298 "../ipf_y.y"
3846 { ipf_yyval.num = FI_OPTIONS; } break;
3847 case 317:
3848 # line 1299 "../ipf_y.y"
3849 { ipf_yyval.num = FI_SHORT; } break;
3850 case 318:
3851 # line 1300 "../ipf_y.y"
3852 { ipf_yyval.num = FI_NATED; } break;
3853 case 319:
3854 # line 1301 "../ipf_y.y"
3855 { ipf_yyval.num = FI_BAD; } break;
3856 case 320:
3857 # line 1302 "../ipf_y.y"
3858 { ipf_yyval.num = FI_BADNAT; } break;
3859 case 321:
3860 # line 1303 "../ipf_y.y"
3861 { ipf_yyval.num = FI_BADSRC; } break;
3862 case 322:
3863 # line 1304 "../ipf_y.y"
3864 { ipf_yyval.num = FI_LOWTTL; } break;
3865 case 323:
3866 # line 1305 "../ipf_y.y"
3867 { ipf_yyval.num = FI_FRAG; } break;
3868 case 324:
3869 # line 1306 "../ipf_y.y"
3870 { ipf_yyval.num = FI_FRAGBODY; } break;
3871 case 325:
3872 # line 1307 "../ipf_y.y"
3873 { ipf_yyval.num = FI_FRAG; } break;
3874 case 326:
3875 # line 1308 "../ipf_y.y"
3876 { ipf_yyval.num = FI_MBCAST; } break;
3877 case 327:
3878 # line 1309 "../ipf_y.y"
3879 { ipf_yyval.num = FI_MULTICAST; } break;
3880 case 328:
3881 # line 1310 "../ipf_y.y"
3882 { ipf_yyval.num = FI_BROADCAST; } break;
3883 case 329:
3884 # line 1311 "../ipf_y.y"
3885 { ipf_yyval.num = FI_STATE; } break;
3886 case 330:
3887 # line 1312 "../ipf_y.y"
3888 { ipf_yyval.num = FI_OOW; } break;
3889 case 331:
3890 # line 1315 "../ipf_y.y"
3891 { DOALL(fr->fr_mip.fi_optmsk |= ipf_yypvt[-0].num;
3892 				if (!nowith)
3893 					fr->fr_ip.fi_optmsk |= ipf_yypvt[-0].num;)
3894 			} break;
3895 case 332:
3896 # line 1322 "../ipf_y.y"
3897 { ipf_yyval.num |= ipf_yypvt[-0].num; } break;
3898 case 333:
3899 # line 1323 "../ipf_y.y"
3900 { ipf_yyval.num |= ipf_yypvt[-2].num | ipf_yypvt[-0].num; } break;
3901 case 334:
3902 # line 1327 "../ipf_y.y"
3903 { DOALL(fr->fr_mip.fi_optmsk |= ipf_yypvt[-0].num;
3904 				if (!nowith)
3905 					fr->fr_ip.fi_optmsk |= ipf_yypvt[-0].num;)
3906 			} break;
3907 case 335:
3908 # line 1334 "../ipf_y.y"
3909 { ipf_yyval.num |= ipf_yypvt[-0].num; } break;
3910 case 336:
3911 # line 1335 "../ipf_y.y"
3912 { ipf_yyval.num |= ipf_yypvt[-2].num | ipf_yypvt[-0].num; } break;
3913 case 337:
3914 # line 1339 "../ipf_y.y"
3915 { ipf_yyval.num |= ipf_yypvt[-0].num; } break;
3916 case 338:
3917 # line 1340 "../ipf_y.y"
3918 { ipf_yyval.num |= ipf_yypvt[-2].num | ipf_yypvt[-0].num; } break;
3919 case 339:
3920 # line 1344 "../ipf_y.y"
3921 { ipf_yyval.num = secbit(IPSO_CLASS_UNCL); } break;
3922 case 340:
3923 # line 1345 "../ipf_y.y"
3924 { ipf_yyval.num = secbit(IPSO_CLASS_CONF); } break;
3925 case 341:
3926 # line 1346 "../ipf_y.y"
3927 { ipf_yyval.num = secbit(IPSO_CLASS_RES1); } break;
3928 case 342:
3929 # line 1347 "../ipf_y.y"
3930 { ipf_yyval.num = secbit(IPSO_CLASS_RES2); } break;
3931 case 343:
3932 # line 1348 "../ipf_y.y"
3933 { ipf_yyval.num = secbit(IPSO_CLASS_RES3); } break;
3934 case 344:
3935 # line 1349 "../ipf_y.y"
3936 { ipf_yyval.num = secbit(IPSO_CLASS_RES4); } break;
3937 case 345:
3938 # line 1350 "../ipf_y.y"
3939 { ipf_yyval.num = secbit(IPSO_CLASS_SECR); } break;
3940 case 346:
3941 # line 1351 "../ipf_y.y"
3942 { ipf_yyval.num = secbit(IPSO_CLASS_TOPS); } break;
3943 case 347:
3944 # line 1355 "../ipf_y.y"
3945 { ipf_yyval.num = ipf_yypvt[-0].num; } break;
3946 case 348:
3947 # line 1356 "../ipf_y.y"
3948 { ipf_yyval.num = ICMP_UNREACH; } break;
3949 case 349:
3950 # line 1357 "../ipf_y.y"
3951 { ipf_yyval.num = ICMP_ECHO; } break;
3952 case 350:
3953 # line 1358 "../ipf_y.y"
3954 { ipf_yyval.num = ICMP_ECHOREPLY; } break;
3955 case 351:
3956 # line 1359 "../ipf_y.y"
3957 { ipf_yyval.num = ICMP_SOURCEQUENCH; } break;
3958 case 352:
3959 # line 1360 "../ipf_y.y"
3960 { ipf_yyval.num = ICMP_REDIRECT; } break;
3961 case 353:
3962 # line 1361 "../ipf_y.y"
3963 { ipf_yyval.num = ICMP_TIMXCEED; } break;
3964 case 354:
3965 # line 1362 "../ipf_y.y"
3966 { ipf_yyval.num = ICMP_PARAMPROB; } break;
3967 case 355:
3968 # line 1363 "../ipf_y.y"
3969 { ipf_yyval.num = ICMP_TSTAMP; } break;
3970 case 356:
3971 # line 1364 "../ipf_y.y"
3972 { ipf_yyval.num = ICMP_TSTAMPREPLY; } break;
3973 case 357:
3974 # line 1365 "../ipf_y.y"
3975 { ipf_yyval.num = ICMP_IREQ; } break;
3976 case 358:
3977 # line 1366 "../ipf_y.y"
3978 { ipf_yyval.num = ICMP_IREQREPLY; } break;
3979 case 359:
3980 # line 1367 "../ipf_y.y"
3981 { ipf_yyval.num = ICMP_MASKREQ; } break;
3982 case 360:
3983 # line 1368 "../ipf_y.y"
3984 { ipf_yyval.num = ICMP_MASKREPLY; } break;
3985 case 361:
3986 # line 1369 "../ipf_y.y"
3987 { ipf_yyval.num = ICMP_ROUTERADVERT; } break;
3988 case 362:
3989 # line 1370 "../ipf_y.y"
3990 { ipf_yyval.num = ICMP_ROUTERSOLICIT; } break;
3991 case 363:
3992 # line 1374 "../ipf_y.y"
3993 { ipf_yyval.num = ipf_yypvt[-0].num; } break;
3994 case 364:
3995 # line 1375 "../ipf_y.y"
3996 { ipf_yyval.num = ICMP_UNREACH_NET; } break;
3997 case 365:
3998 # line 1376 "../ipf_y.y"
3999 { ipf_yyval.num = ICMP_UNREACH_HOST; } break;
4000 case 366:
4001 # line 1377 "../ipf_y.y"
4002 { ipf_yyval.num = ICMP_UNREACH_PROTOCOL; } break;
4003 case 367:
4004 # line 1378 "../ipf_y.y"
4005 { ipf_yyval.num = ICMP_UNREACH_PORT; } break;
4006 case 368:
4007 # line 1379 "../ipf_y.y"
4008 { ipf_yyval.num = ICMP_UNREACH_NEEDFRAG; } break;
4009 case 369:
4010 # line 1380 "../ipf_y.y"
4011 { ipf_yyval.num = ICMP_UNREACH_SRCFAIL; } break;
4012 case 370:
4013 # line 1381 "../ipf_y.y"
4014 { ipf_yyval.num = ICMP_UNREACH_NET_UNKNOWN; } break;
4015 case 371:
4016 # line 1382 "../ipf_y.y"
4017 { ipf_yyval.num = ICMP_UNREACH_HOST_UNKNOWN; } break;
4018 case 372:
4019 # line 1383 "../ipf_y.y"
4020 { ipf_yyval.num = ICMP_UNREACH_ISOLATED; } break;
4021 case 373:
4022 # line 1384 "../ipf_y.y"
4023 { ipf_yyval.num = ICMP_UNREACH_NET_PROHIB; } break;
4024 case 374:
4025 # line 1385 "../ipf_y.y"
4026 { ipf_yyval.num = ICMP_UNREACH_HOST_PROHIB; } break;
4027 case 375:
4028 # line 1386 "../ipf_y.y"
4029 { ipf_yyval.num = ICMP_UNREACH_TOSNET; } break;
4030 case 376:
4031 # line 1387 "../ipf_y.y"
4032 { ipf_yyval.num = ICMP_UNREACH_TOSHOST; } break;
4033 case 377:
4034 # line 1388 "../ipf_y.y"
4035 { ipf_yyval.num = ICMP_UNREACH_ADMIN_PROHIBIT; } break;
4036 case 378:
4037 # line 1389 "../ipf_y.y"
4038 { ipf_yyval.num = 14; } break;
4039 case 379:
4040 # line 1390 "../ipf_y.y"
4041 { ipf_yyval.num = 15; } break;
4042 case 380:
4043 # line 1394 "../ipf_y.y"
4044 { ipf_yyval.num = getoptbyvalue(IPOPT_NOP); } break;
4045 case 381:
4046 # line 1395 "../ipf_y.y"
4047 { ipf_yyval.num = getoptbyvalue(IPOPT_RR); } break;
4048 case 382:
4049 # line 1396 "../ipf_y.y"
4050 { ipf_yyval.num = getoptbyvalue(IPOPT_ZSU); } break;
4051 case 383:
4052 # line 1397 "../ipf_y.y"
4053 { ipf_yyval.num = getoptbyvalue(IPOPT_MTUP); } break;
4054 case 384:
4055 # line 1398 "../ipf_y.y"
4056 { ipf_yyval.num = getoptbyvalue(IPOPT_MTUR); } break;
4057 case 385:
4058 # line 1399 "../ipf_y.y"
4059 { ipf_yyval.num = getoptbyvalue(IPOPT_ENCODE); } break;
4060 case 386:
4061 # line 1400 "../ipf_y.y"
4062 { ipf_yyval.num = getoptbyvalue(IPOPT_TS); } break;
4063 case 387:
4064 # line 1401 "../ipf_y.y"
4065 { ipf_yyval.num = getoptbyvalue(IPOPT_TR); } break;
4066 case 388:
4067 # line 1402 "../ipf_y.y"
4068 { ipf_yyval.num = getoptbyvalue(IPOPT_SECURITY); } break;
4069 case 389:
4070 # line 1403 "../ipf_y.y"
4071 { ipf_yyval.num = getoptbyvalue(IPOPT_LSRR); } break;
4072 case 390:
4073 # line 1404 "../ipf_y.y"
4074 { ipf_yyval.num = getoptbyvalue(IPOPT_E_SEC); } break;
4075 case 391:
4076 # line 1405 "../ipf_y.y"
4077 { ipf_yyval.num = getoptbyvalue(IPOPT_CIPSO); } break;
4078 case 392:
4079 # line 1406 "../ipf_y.y"
4080 { ipf_yyval.num = getoptbyvalue(IPOPT_SATID); } break;
4081 case 393:
4082 # line 1407 "../ipf_y.y"
4083 { ipf_yyval.num = getoptbyvalue(IPOPT_SSRR); } break;
4084 case 394:
4085 # line 1408 "../ipf_y.y"
4086 { ipf_yyval.num = getoptbyvalue(IPOPT_ADDEXT); } break;
4087 case 395:
4088 # line 1409 "../ipf_y.y"
4089 { ipf_yyval.num = getoptbyvalue(IPOPT_VISA); } break;
4090 case 396:
4091 # line 1410 "../ipf_y.y"
4092 { ipf_yyval.num = getoptbyvalue(IPOPT_IMITD); } break;
4093 case 397:
4094 # line 1411 "../ipf_y.y"
4095 { ipf_yyval.num = getoptbyvalue(IPOPT_EIP); } break;
4096 case 398:
4097 # line 1412 "../ipf_y.y"
4098 { ipf_yyval.num = getoptbyvalue(IPOPT_FINN); } break;
4099 case 399:
4100 # line 1413 "../ipf_y.y"
4101 { ipf_yyval.num = getoptbyvalue(IPOPT_DPS); } break;
4102 case 400:
4103 # line 1414 "../ipf_y.y"
4104 { ipf_yyval.num = getoptbyvalue(IPOPT_SDB); } break;
4105 case 401:
4106 # line 1415 "../ipf_y.y"
4107 { ipf_yyval.num = getoptbyvalue(IPOPT_NSAPA); } break;
4108 case 402:
4109 # line 1416 "../ipf_y.y"
4110 { ipf_yyval.num = getoptbyvalue(IPOPT_RTRALRT); } break;
4111 case 403:
4112 # line 1417 "../ipf_y.y"
4113 { ipf_yyval.num = getoptbyvalue(IPOPT_UMP); } break;
4114 case 404:
4115 # line 1419 "../ipf_y.y"
4116 { DOALL(fr->fr_mip.fi_secmsk |= ipf_yypvt[-0].num;
4117 				if (!nowith)
4118 					fr->fr_ip.fi_secmsk |= ipf_yypvt[-0].num;)
4119 			  ipf_yyval.num = 0;
4120 			  ipf_yyresetdict();
4121 			} break;
4122 case 405:
4123 # line 1428 "../ipf_y.y"
4124 { ipf_yysetdict(ipv4secwords); } break;
4125 case 406:
4126 # line 1432 "../ipf_y.y"
4127 { ipf_yyval.num = getv6optbyvalue(IPPROTO_AH); } break;
4128 case 407:
4129 # line 1433 "../ipf_y.y"
4130 { ipf_yyval.num = getv6optbyvalue(IPPROTO_DSTOPTS); } break;
4131 case 408:
4132 # line 1434 "../ipf_y.y"
4133 { ipf_yyval.num = getv6optbyvalue(IPPROTO_ESP); } break;
4134 case 409:
4135 # line 1435 "../ipf_y.y"
4136 { ipf_yyval.num = getv6optbyvalue(IPPROTO_HOPOPTS); } break;
4137 case 410:
4138 # line 1436 "../ipf_y.y"
4139 { ipf_yyval.num = getv6optbyvalue(IPPROTO_IPV6); } break;
4140 case 411:
4141 # line 1437 "../ipf_y.y"
4142 { ipf_yyval.num = getv6optbyvalue(IPPROTO_NONE); } break;
4143 case 412:
4144 # line 1438 "../ipf_y.y"
4145 { ipf_yyval.num = getv6optbyvalue(IPPROTO_ROUTING); } break;
4146 case 413:
4147 # line 1439 "../ipf_y.y"
4148 { ipf_yyval.num = getv6optbyvalue(IPPROTO_FRAGMENT); } break;
4149 case 414:
4150 # line 1442 "../ipf_y.y"
4151 { setsyslog(); } break;
4152 case 415:
4153 # line 1446 "../ipf_y.y"
4154 { fr->fr_loglevel = LOG_LOCAL0|ipf_yypvt[-0].num; } break;
4155 case 416:
4156 # line 1447 "../ipf_y.y"
4157 { fr->fr_loglevel = ipf_yypvt[-2].num | ipf_yypvt[-0].num; } break;
4158 case 417:
4159 # line 1451 "../ipf_y.y"
4160 { ipf_yyval.num = LOG_KERN; } break;
4161 case 418:
4162 # line 1452 "../ipf_y.y"
4163 { ipf_yyval.num = LOG_USER; } break;
4164 case 419:
4165 # line 1453 "../ipf_y.y"
4166 { ipf_yyval.num = LOG_MAIL; } break;
4167 case 420:
4168 # line 1454 "../ipf_y.y"
4169 { ipf_yyval.num = LOG_DAEMON; } break;
4170 case 421:
4171 # line 1455 "../ipf_y.y"
4172 { ipf_yyval.num = LOG_AUTH; } break;
4173 case 422:
4174 # line 1456 "../ipf_y.y"
4175 { ipf_yyval.num = LOG_SYSLOG; } break;
4176 case 423:
4177 # line 1457 "../ipf_y.y"
4178 { ipf_yyval.num = LOG_LPR; } break;
4179 case 424:
4180 # line 1458 "../ipf_y.y"
4181 { ipf_yyval.num = LOG_NEWS; } break;
4182 case 425:
4183 # line 1459 "../ipf_y.y"
4184 { ipf_yyval.num = LOG_UUCP; } break;
4185 case 426:
4186 # line 1460 "../ipf_y.y"
4187 { ipf_yyval.num = LOG_CRON; } break;
4188 case 427:
4189 # line 1461 "../ipf_y.y"
4190 { ipf_yyval.num = LOG_FTP; } break;
4191 case 428:
4192 # line 1462 "../ipf_y.y"
4193 { ipf_yyval.num = LOG_AUTHPRIV; } break;
4194 case 429:
4195 # line 1463 "../ipf_y.y"
4196 { ipf_yyval.num = LOG_AUDIT; } break;
4197 case 430:
4198 # line 1464 "../ipf_y.y"
4199 { ipf_yyval.num = LOG_LFMT; } break;
4200 case 431:
4201 # line 1465 "../ipf_y.y"
4202 { ipf_yyval.num = LOG_LOCAL0; } break;
4203 case 432:
4204 # line 1466 "../ipf_y.y"
4205 { ipf_yyval.num = LOG_LOCAL1; } break;
4206 case 433:
4207 # line 1467 "../ipf_y.y"
4208 { ipf_yyval.num = LOG_LOCAL2; } break;
4209 case 434:
4210 # line 1468 "../ipf_y.y"
4211 { ipf_yyval.num = LOG_LOCAL3; } break;
4212 case 435:
4213 # line 1469 "../ipf_y.y"
4214 { ipf_yyval.num = LOG_LOCAL4; } break;
4215 case 436:
4216 # line 1470 "../ipf_y.y"
4217 { ipf_yyval.num = LOG_LOCAL5; } break;
4218 case 437:
4219 # line 1471 "../ipf_y.y"
4220 { ipf_yyval.num = LOG_LOCAL6; } break;
4221 case 438:
4222 # line 1472 "../ipf_y.y"
4223 { ipf_yyval.num = LOG_LOCAL7; } break;
4224 case 439:
4225 # line 1473 "../ipf_y.y"
4226 { ipf_yyval.num = LOG_SECURITY; } break;
4227 case 440:
4228 # line 1477 "../ipf_y.y"
4229 { ipf_yyval.num = LOG_EMERG; } break;
4230 case 441:
4231 # line 1478 "../ipf_y.y"
4232 { ipf_yyval.num = LOG_ALERT; } break;
4233 case 442:
4234 # line 1479 "../ipf_y.y"
4235 { ipf_yyval.num = LOG_CRIT; } break;
4236 case 443:
4237 # line 1480 "../ipf_y.y"
4238 { ipf_yyval.num = LOG_ERR; } break;
4239 case 444:
4240 # line 1481 "../ipf_y.y"
4241 { ipf_yyval.num = LOG_WARNING; } break;
4242 case 445:
4243 # line 1482 "../ipf_y.y"
4244 { ipf_yyval.num = LOG_NOTICE; } break;
4245 case 446:
4246 # line 1483 "../ipf_y.y"
4247 { ipf_yyval.num = LOG_INFO; } break;
4248 case 447:
4249 # line 1484 "../ipf_y.y"
4250 { ipf_yyval.num = LOG_DEBUG; } break;
4251 case 448:
4252 # line 1488 "../ipf_y.y"
4253 { ipf_yyval.num = FR_EQUAL; } break;
4254 case 449:
4255 # line 1489 "../ipf_y.y"
4256 { ipf_yyval.num = FR_NEQUAL; } break;
4257 case 450:
4258 # line 1490 "../ipf_y.y"
4259 { ipf_yyval.num = FR_LESST; } break;
4260 case 451:
4261 # line 1491 "../ipf_y.y"
4262 { ipf_yyval.num = FR_LESSTE; } break;
4263 case 452:
4264 # line 1492 "../ipf_y.y"
4265 { ipf_yyval.num = FR_GREATERT; } break;
4266 case 453:
4267 # line 1493 "../ipf_y.y"
4268 { ipf_yyval.num = FR_GREATERTE; } break;
4269 case 454:
4270 # line 1496 "../ipf_y.y"
4271 { ipf_yyval.num = FR_INRANGE; } break;
4272 case 455:
4273 # line 1497 "../ipf_y.y"
4274 { ipf_yyval.num = FR_OUTRANGE; } break;
4275 case 456:
4276 # line 1498 "../ipf_y.y"
4277 { ipf_yyval.num = FR_INCRANGE; } break;
4278 case 457:
4279 # line 1502 "../ipf_y.y"
4280 { ipf_yyval.str = ipf_yypvt[-0].str; } break;
4281 case 458:
4282 # line 1505 "../ipf_y.y"
4283 { ipf_yyval.str = ipf_yypvt[-0].str; } break;
4284 case 459:
4285 # line 1507 "../ipf_y.y"
4286 { ipf_yyval.str = ipf_yypvt[-2].str;
4287 		  fprintf(stderr, "%d: Logical interface %s:%d unsupported, "
4288 			  "use the physical interface %s instead.\n",
4289 			  ipf_yylineNum, ipf_yypvt[-2].str, ipf_yypvt[-0].num, ipf_yypvt[-2].str);
4290 		} break;
4291 case 460:
4292 # line 1514 "../ipf_y.y"
4293 { ipf_yyval.str = ipf_yypvt[-0].str; } break;
4294 case 461:
4295 # line 1519 "../ipf_y.y"
4296 { if (ipf_yypvt[-2].num > 255 || ipf_yypvt[-0].num > 255) {
4297 			ipf_yyerror("Invalid octet string for IP address");
4298 			return 0;
4299 		  }
4300 		  ipf_yyval.ipa.s_addr = (ipf_yypvt[-2].num << 24) | (ipf_yypvt[-0].num << 16);
4301 		  ipf_yyval.ipa.s_addr = htonl(ipf_yyval.ipa.s_addr);
4302 		} break;
4303 case 462:
4304 # line 1530 "../ipf_y.y"
4305 { if (ipf_yypvt[-0].num > 255) {
4306 			ipf_yyerror("Invalid octet string for IP address");
4307 			return 0;
4308 		  }
4309 		  ipf_yyval.ipa.s_addr |= htonl(ipf_yypvt[-0].num << 8);
4310 		} break;
4311 case 463:
4312 # line 1539 "../ipf_y.y"
4313 { if (ipf_yypvt[-0].num > 255) {
4314 			ipf_yyerror("Invalid octet string for IP address");
4315 			return 0;
4316 		  }
4317 		  ipf_yyval.ipa.s_addr |= htonl(ipf_yypvt[-0].num);
4318 		} break;
4319 # line	556 "/usr/share/lib/ccs/yaccpar"
4320 	}
4321 	goto ipf_yystack;		/* reset registers in driver code */
4322 }
4323 
4324