Fix constructing of setdscp opcode with tablearg keyword.
setdscp's argument can have zero value that conflicts with IP_FW_TARG value. Always set high-order bit if parser doesn't find tablearg keyword. MFC after: 3 days
This commit is contained in:
parent
2af16ec8f2
commit
78724b5251
@ -3957,15 +3957,19 @@ compile_rule(char *av[], uint32_t *rbuf, int *rbufsize, struct tidx *tstate)
|
||||
NEED1("missing DSCP code");
|
||||
if (_substrcmp(*av, "tablearg") == 0) {
|
||||
action->arg1 = IP_FW_TARG;
|
||||
} else if (isalpha(*av[0])) {
|
||||
if ((code = match_token(f_ipdscp, *av)) == -1)
|
||||
errx(EX_DATAERR, "Unknown DSCP code");
|
||||
action->arg1 = code;
|
||||
} else
|
||||
action->arg1 = strtoul(*av, NULL, 10);
|
||||
/* Add high-order bit to DSCP to make room for tablearg */
|
||||
if (action->arg1 != IP_FW_TARG)
|
||||
} else {
|
||||
if (isalpha(*av[0])) {
|
||||
if ((code = match_token(f_ipdscp, *av)) == -1)
|
||||
errx(EX_DATAERR, "Unknown DSCP code");
|
||||
action->arg1 = code;
|
||||
} else
|
||||
action->arg1 = strtoul(*av, NULL, 10);
|
||||
/*
|
||||
* Add high-order bit to DSCP to make room
|
||||
* for tablearg
|
||||
*/
|
||||
action->arg1 |= 0x8000;
|
||||
}
|
||||
av++;
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user