summaryrefslogtreecommitdiffstats
path: root/src/parser.y
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2014-01-16 17:22:56 +0000
committerPatrick McHardy <kaber@trash.net>2014-01-16 17:22:56 +0000
commit3b457d49854503807fa019d9c44a9daf6c79dba0 (patch)
tree8c1b1e7a2443ac6cb1f1a4a561bf717cc1dd1246 /src/parser.y
parentd357cdd882cc0cf6afb15686834f5d9d6efab57f (diff)
parent86b965bdab8dc8735c4a846ec09bfbbadfae780b (diff)
Merge remote-tracking branch 'origin/master' into next-3.14
Signed-off-by: Patrick McHardy <kaber@trash.net> Conflicts: src/payload.c
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; }