diff options
author | Patrick McHardy <kaber@trash.net> | 2014-01-16 17:22:56 +0000 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2014-01-16 17:22:56 +0000 |
commit | 3b457d49854503807fa019d9c44a9daf6c79dba0 (patch) | |
tree | 8c1b1e7a2443ac6cb1f1a4a561bf717cc1dd1246 /src/parser.y | |
parent | d357cdd882cc0cf6afb15686834f5d9d6efab57f (diff) | |
parent | 86b965bdab8dc8735c4a846ec09bfbbadfae780b (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.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; } |