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