diff options
author | Patrick McHardy <kaber@trash.net> | 2014-01-16 16:54:18 +0000 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2014-01-16 17:23:34 +0000 |
commit | 0dbced3615ffdbb212ba4f791475a7c65a525309 (patch) | |
tree | b5930a5f018f750ef20a003af40d05e2dc80981e /src/parser.y | |
parent | 3b457d49854503807fa019d9c44a9daf6c79dba0 (diff) |
parser: use symbolic expressions for parsing keywords as protocol values
For "meta protocol" and the "meta nfproto" expressions, we need to be
able to parse "ip", "ip6", "vlan" and "arp" as protocol values.
Since the interpretation depends on the LHS of the relaltional expression,
we need to use symbolic expressions instead of constants to defer parsing
to the evaluation phase.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'src/parser.y')
-rw-r--r-- | src/parser.y | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/src/parser.y b/src/parser.y index 05fe8bcb..fd631368 100644 --- a/src/parser.y +++ b/src/parser.y @@ -1485,10 +1485,9 @@ vlan_hdr_expr : VLAN vlan_hdr_field } | VLAN { - uint16_t data = ETH_P_8021Q; - $$ = constant_expr_alloc(&@$, ðertype_type, - BYTEORDER_HOST_ENDIAN, - sizeof(data) * BITS_PER_BYTE, &data); + $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE, + current_scope(state), + "vlan"); } ; @@ -1504,10 +1503,9 @@ arp_hdr_expr : ARP arp_hdr_field } | ARP { - uint16_t data = ETH_P_ARP; - $$ = constant_expr_alloc(&@$, ðertype_type, - BYTEORDER_HOST_ENDIAN, - sizeof(data) * BITS_PER_BYTE, &data); + $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE, + current_scope(state), + "arp"); } ; @@ -1524,10 +1522,9 @@ ip_hdr_expr : IP ip_hdr_field } | IP { - uint16_t data = ETH_P_IP; - $$ = constant_expr_alloc(&@$, ðertype_type, - BYTEORDER_HOST_ENDIAN, - sizeof(data) * BITS_PER_BYTE, &data); + $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE, + current_scope(state), + "ip"); } ; @@ -1572,10 +1569,9 @@ ip6_hdr_expr : IP6 ip6_hdr_field } | IP6 { - uint16_t data = ETH_P_IPV6; - $$ = constant_expr_alloc(&@$, ðertype_type, - BYTEORDER_HOST_ENDIAN, - sizeof(data) * BITS_PER_BYTE, &data); + $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE, + current_scope(state), + "ip6"); } ; |