diff options
Diffstat (limited to 'src/parser.y')
-rw-r--r-- | src/parser.y | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/parser.y b/src/parser.y index 89d6279c..05fe8bcb 100644 --- a/src/parser.y +++ b/src/parser.y @@ -14,6 +14,7 @@ #include <stdio.h> #include <inttypes.h> #include <netinet/ip.h> +#include <netinet/if_ether.h> #include <linux/netfilter.h> #include <linux/netfilter/nf_tables.h> #include <linux/netfilter/nf_conntrack_tuple_common.h> @@ -1482,6 +1483,13 @@ vlan_hdr_expr : VLAN vlan_hdr_field { $$ = payload_expr_alloc(&@$, &proto_vlan, $2); } + | VLAN + { + uint16_t data = ETH_P_8021Q; + $$ = constant_expr_alloc(&@$, ðertype_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } ; vlan_hdr_field : ID { $$ = VLANHDR_VID; } @@ -1494,6 +1502,13 @@ arp_hdr_expr : ARP arp_hdr_field { $$ = payload_expr_alloc(&@$, &proto_arp, $2); } + | ARP + { + uint16_t data = ETH_P_ARP; + $$ = constant_expr_alloc(&@$, ðertype_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } ; arp_hdr_field : HTYPE { $$ = ARPHDR_HRD; } @@ -1507,6 +1522,13 @@ ip_hdr_expr : IP ip_hdr_field { $$ = payload_expr_alloc(&@$, &proto_ip, $2); } + | IP + { + uint16_t data = ETH_P_IP; + $$ = constant_expr_alloc(&@$, ðertype_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } ; ip_hdr_field : VERSION { $$ = IPHDR_VERSION; } @@ -1548,6 +1570,13 @@ ip6_hdr_expr : IP6 ip6_hdr_field { $$ = payload_expr_alloc(&@$, &proto_ip6, $2); } + | IP6 + { + uint16_t data = ETH_P_IPV6; + $$ = constant_expr_alloc(&@$, ðertype_type, + BYTEORDER_HOST_ENDIAN, + sizeof(data) * BITS_PER_BYTE, &data); + } ; ip6_hdr_field : VERSION { $$ = IP6HDR_VERSION; } |