mirror of
https://github.com/zeek/zeek.git
synced 2025-10-16 21:48:21 +00:00
GH-173: Support ranges of values for value_list elements in the signature parser
This adds support for ranged values everywhere a value_list is used, not just for source port fields.
This commit is contained in:
parent
42f7be0473
commit
e10f9e4047
4 changed files with 43 additions and 0 deletions
|
@ -70,6 +70,7 @@ static uint8_t ip4_mask_to_len(uint32_t mask)
|
|||
%type <vallist> value_list
|
||||
%type <prefix_val_list> prefix_value_list
|
||||
%type <mval> TOK_IP value
|
||||
%type <vallist> ranged_value
|
||||
%type <prefixval> TOK_IP6 prefix_value
|
||||
%type <prot> TOK_PROT
|
||||
%type <ptype> TOK_PATTERN_TYPE
|
||||
|
@ -274,6 +275,16 @@ hdr_expr:
|
|||
value_list:
|
||||
value_list ',' value
|
||||
{ $1->append(new MaskedValue($3)); $$ = $1; }
|
||||
| value_list ',' ranged_value
|
||||
{
|
||||
int numVals = $3->length();
|
||||
for (int idx = 0; idx < numVals; idx++)
|
||||
{
|
||||
MaskedValue* val = $3->remove_nth(0);
|
||||
$1->append(val);
|
||||
}
|
||||
$$ = $1;
|
||||
}
|
||||
| value_list ',' TOK_IDENT
|
||||
{ id_to_maskedvallist($3, $1); $$ = $1; }
|
||||
| value
|
||||
|
@ -281,6 +292,10 @@ value_list:
|
|||
$$ = new maskedvalue_list();
|
||||
$$->append(new MaskedValue($1));
|
||||
}
|
||||
| ranged_value
|
||||
{
|
||||
$$ = $1;
|
||||
}
|
||||
| TOK_IDENT
|
||||
{
|
||||
$$ = new maskedvalue_list();
|
||||
|
@ -320,6 +335,20 @@ prefix_value:
|
|||
| TOK_IP6
|
||||
;
|
||||
|
||||
ranged_value:
|
||||
TOK_INT '-' TOK_INT
|
||||
{
|
||||
$$ = new maskedvalue_list();
|
||||
for (int val = $1; val <= $3; val++)
|
||||
{
|
||||
MaskedValue* masked = new MaskedValue();
|
||||
masked->val = val;
|
||||
masked->mask = 0xffffffff;
|
||||
$$->append(masked);
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
value:
|
||||
TOK_INT
|
||||
{ $$.val = $1; $$.mask = 0xffffffff; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue