ARM: net: bpf_jit_32: add VLAN instructions for BPF JIT
Subsystems (5)
PATCH 2/2 ARM: net: bpf_jit_32: add VLAN instructions for BPF JIT
This patch is a follow-up for patch "net: filter: add vlan tag access" to support the new VLAN_TAG/VLAN_TAG_PRESENT accessors in BPF JIT.
Signed-off-by Daniel Borkmann <[email protected]>
Cc Mircea Gherzan <[email protected]>
Cc Arnd Bergmann <[email protected]>
--- arch/arm/net/bpf_jit_32.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-)
arch/arm/net/bpf_jit_32.c +14 -0
@@ -16,6 +16,7 @@#include <linux/netdevice.h> #include <linux/string.h> #include <linux/slab.h> +#include <linux/if_vlan.h> #include <asm/cacheflush.h> #include <asm/hwcap.h>
@@ -168,6 +169,8 @@ static inline bool is_load_to_a(u16 inst)case BPF_S_ANC_MARK :case BPF_S_ANC_PROTOCOL :case BPF_S_ANC_RXHASH : +case BPF_S_ANC_VLAN_TAG : +case BPF_S_ANC_VLAN_TAG_PRESENT :case BPF_S_ANC_QUEUE :return true;default :
@@ -815,6 +818,17 @@ b_epilogue: off = offsetof(struct sk_buff , rxhash);emit (ARM_LDR_I (r_A, r_skb, off), ctx);break ; +case BPF_S_ANC_VLAN_TAG : +case BPF_S_ANC_VLAN_TAG_PRESENT : + ctx->seen |=SEEN_SKB ; + BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, vlan_tci) != 2); + off = offsetof(struct sk_buff , vlan_tci); +emit (ARM_LDRH_I (r_A, r_skb, off), ctx); +if (inst->code ==BPF_S_ANC_VLAN_TAG ) +OP_IMM3 (ARM_AND , r_A, r_A,VLAN_VID_MASK , ctx); +else +OP_IMM3 (ARM_AND , r_A, r_A,VLAN_TAG_PRESENT , ctx); +break ;case BPF_S_ANC_QUEUE : ctx->seen |=SEEN_SKB ; BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff,
Am 08.11.2012 02:31, schrieb Daniel Borkmann:
Quoted 39 lines
This patch is a follow-up for patch "net: filter: add vlan tag access" to support the new VLAN_TAG/VLAN_TAG_PRESENT accessors in BPF JIT.
Signed-off-by Daniel Borkmann <[email protected]>Cc Mircea Gherzan <[email protected]>Cc Arnd Bergmann <[email protected]>--- arch/arm/net/bpf_jit_32.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-)arch/arm/net/bpf_jit_32.c +7
-0@@ -16,6 +16,7 @@#include <linux/netdevice.h> #include <linux/string.h> #include <linux/slab.h> +#include <linux/if_vlan.h> #include <asm/cacheflush.h> #include <asm/hwcap.h> @@ -168,6 +169,8 @@ static inline bool is_load_to_a(u16 inst)case BPF_S_ANC_MARK :case BPF_S_ANC_PROTOCOL :case BPF_S_ANC_RXHASH : +case BPF_S_ANC_VLAN_TAG : +case BPF_S_ANC_VLAN_TAG_PRESENT :case BPF_S_ANC_QUEUE :return true;default :@@ -815,6 +818,17 @@ b_epilogue: off = offsetof(struct sk_buff , rxhash);emit (ARM_LDR_I (r_A, r_skb, off), ctx);break ; +case BPF_S_ANC_VLAN_TAG : +case BPF_S_ANC_VLAN_TAG_PRESENT : + ctx->seen |=SEEN_SKB ; + BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, vlan_tci) != 2);
arch/arm/net/bpf_jit_32.c b_epilogue: · line 834
Quoted 10 lines
arch/arm/net/bpf_jit_32.c +7
-0+ off = offsetof(struct sk_buff , vlan_tci); +emit (ARM_LDRH_I (r_A, r_skb, off), ctx); +if (inst->code ==BPF_S_ANC_VLAN_TAG ) +OP_IMM3 (ARM_AND , r_A, r_A,VLAN_VID_MASK , ctx); +else +OP_IMM3 (ARM_AND , r_A, r_A,VLAN_TAG_PRESENT , ctx); +break ;case BPF_S_ANC_QUEUE : ctx->seen |=SEEN_SKB ; BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff,
Acked-by Mircea Gherzan <[email protected]>
From: Mircea Gherzan <[email protected]>
Date: Wed, 14 Nov 2012 00:00:36 +0100
Quoted 5 lines
Am 08.11.2012 02:31, schrieb Daniel Borkmann:
Quoted 4 lines
This patch is a follow-up for patch "net: filter: add vlan tag access" to support the new VLAN_TAG/VLAN_TAG_PRESENT accessors in BPF JIT.
Signed-off-by Daniel Borkmann <[email protected]>
...
Quoted 1 line
Acked-by Mircea Gherzan <[email protected]>
Applied, thanks again.