YY_NUMBER
| '(' YY_STR ':' YY_NUMBER ')' '/'
| YY_NUMBER { $$ = $1; }
| YY_NUMBER { $$ = $1; }
| YY_NUMBER { memset(&($$), 0, sizeof($$));
%token <num> YY_NUMBER YY_HEX
age: | IPFY_AGE YY_NUMBER { DOALL(fr->fr_age[0] = $2; \
| IPFY_AGE YY_NUMBER '/' YY_NUMBER
IPFY_LIMIT YY_NUMBER { DOALL(fr->fr_statemax = $2;) }
| IPFY_AGE YY_NUMBER { DOALL(fr->fr_age[0] = $2; \
| IPFY_AGE YY_NUMBER '/' YY_NUMBER
| IPFY_MAX_SRCS YY_NUMBER
| IPFY_MAX_PER_SRC YY_NUMBER
| IPFY_MAX_PER_SRC YY_NUMBER '/' YY_NUMBER
| YY_NUMBER { if ($1 > 65535) /* Unsigned */
YY_NUMBER { $$ = $1; }
YY_NUMBER { $$ = $1; }
doi: IPFY_DOI YY_NUMBER { DOALL(fr->fr_doimask = 0xffffffff; \
| name ':' YY_NUMBER
YY_NUMBER '.' YY_NUMBER
ipv4_16 '.' YY_NUMBER
ipv4: ipv4_24 '.' YY_NUMBER
IPFY_SET YY_STR YY_NUMBER ';' { do_tuneint($2, $3); }
'@' YY_NUMBER { fr->fr_hits = (U_QUAD_T)$2 + 1; }
| YY_NUMBER { fr->fr_collect = $1; }
| IPFY_SKIP YY_NUMBER { fr->fr_flags |= FR_SKIP;
func: YY_STR '/' YY_NUMBER
tos: | settos YY_NUMBER { DOALL(fr->fr_tos = $2; fr->fr_mtos = 0xff;) }
YY_NUMBER { DOALL(fr->fr_tos = $1; fr->fr_mtos = 0xff;) }
| toslist lmore YY_NUMBER
ttl: | setttl YY_NUMBER
YY_NUMBER { DOREM(fr->fr_ttl = $1; fr->fr_mttl = 0xff;) }
| ttllist lmore YY_NUMBER
| YY_NUMBER { $$ = malloc(16);
| IPFY_NAT '=' YY_NUMBER { DOALL(sprintf(fr->fr_nattag.ipt_tag,\
logtag: IPFY_LOG '=' YY_NUMBER { DOALL(fr->fr_logtag = $3;) }
pps: | IPFY_PPS YY_NUMBER { DOALL(fr->fr_pps = $2;) }
| IPFY_RULETTL YY_NUMBER { DOALL(fr->fr_die = $2;) }
YY_NUMBER { DOALL(fr->fr_proto = $1; \
| startflags YY_NUMBER
| startflags '/' YY_NUMBER
| startflags YY_NUMBER '/' YY_NUMBER
| startflags flagset '/' YY_NUMBER
| startflags YY_NUMBER '/' flagset
addr: pool '/' YY_NUMBER { pooled = 1;
| hash '/' YY_NUMBER { hashed = 1;
if (prior == YY_NUMBER && c == ':') {
rval = YY_NUMBER;
case YY_NUMBER :
if (rval == YY_NUMBER)
yytokentype == YY_NUMBER) {
dstip: IPM_DSTIP '=' ipv4 '/' YY_NUMBER { $$ = new_opt(IPM_DSTIP);
IPM_DSTPORT '=' YY_NUMBER { $$ = new_opt(IPM_DSTPORT);
| IPM_EVERY YY_NUMBER IPM_SECONDS { $$ = new_opt(IPM_SECOND);
| IPM_EVERY YY_NUMBER IPM_PACKETS { $$ = new_opt(IPM_PACKET);
group: IPM_GROUP '=' YY_NUMBER { $$ = new_opt(IPM_GROUP);
logtag: IPM_LOGTAG '=' YY_NUMBER { $$ = new_opt(IPM_LOGTAG);
IPM_PROTOCOL '=' YY_NUMBER { $$ = new_opt(IPM_PROTOCOL);
rule: IPM_RULE '=' YY_NUMBER { $$ = new_opt(IPM_RULE);
$$->o_num = YY_NUMBER; }
srcip: IPM_SRCIP '=' ipv4 '/' YY_NUMBER { $$ = new_opt(IPM_SRCIP);
IPM_SRCPORT '=' YY_NUMBER { $$ = new_opt(IPM_SRCPORT);
ipv4: YY_NUMBER '.' YY_NUMBER '.' YY_NUMBER '.' YY_NUMBER
%token <num> YY_NUMBER YY_HEX
| hash slash YY_NUMBER { bzero(&$$, sizeof($$));
age: | IPNY_AGE YY_NUMBER { nat->in_age[0] = $2;
| IPNY_AGE YY_NUMBER '/' YY_NUMBER { nat->in_age[0] = $2;
| IPNY_MSSCLAMP YY_NUMBER { nat->in_mssclamp = $2; }
proto: YY_NUMBER { $$ = $1;
| YY_NUMBER { memset(&($$), 0, sizeof($$));
| YY_NUMBER YY_IPV6 { memset(&($$), 0, sizeof($$));
ipv4: YY_NUMBER '.' YY_NUMBER '.' YY_NUMBER '.' YY_NUMBER
| IPNY_DSTLIST '/' YY_NUMBER { $$.t = FRI_LOOKUP;
YY_NUMBER { if ($1 > 65535) /* Unsigned */
ports: | IPNY_PORTS YY_NUMBER { nat->in_spmin = $2; }
| hostname slash YY_NUMBER
%token <num> YY_NUMBER YY_HEX
| pool slash YY_NUMBER { bzero(&$$, sizeof($$));
number: IPT_NUM '=' YY_NUMBER { snprintf(poolname, sizeof(poolname), "%u", $3);
| IPT_GROUP '=' YY_NUMBER { char tmp[FR_GROUPLEN+1];
| YY_NUMBER { $$.adf_addr.in4.s_addr = htonl($1);
mask: YY_NUMBER { bzero(&$$, sizeof($$));
size: IPT_SIZE '=' YY_NUMBER { ipht.iph_size = $3; }
seed: IPT_SEED '=' YY_NUMBER { ipht.iph_seed = $3; }
ipv4: YY_NUMBER '.' YY_NUMBER '.' YY_NUMBER '.' YY_NUMBER
| IPT_NUM YY_NUMBER { char name[80];
IPT_SIZE YY_NUMBER
| IPT_SEED YY_NUMBER
%token <num> YY_NUMBER YY_HEX
ipaddr: YY_NUMBER '.' YY_NUMBER '.' YY_NUMBER '.' YY_NUMBER
YY_NUMBER { $$ = htons($1); }
%token <num> YY_NUMBER YY_HEX