summaryrefslogtreecommitdiffstats
path: root/src/parser.y
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.y')
-rw-r--r--src/parser.y29
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(&@$, &ethertype_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(&@$, &ethertype_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(&@$, &ethertype_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(&@$, &ethertype_type,
+ BYTEORDER_HOST_ENDIAN,
+ sizeof(data) * BITS_PER_BYTE, &data);
+ }
;
ip6_hdr_field : VERSION { $$ = IP6HDR_VERSION; }