PPC: bpf_jit_comp: add SKF_AD_HATYPE instruction
Subsystems (5)
PATCH v2 1/1 PPC: bpf_jit_comp: add SKF_AD_HATYPE instruction
Add BPF extension SKF_AD_HATYPE to ppc JIT to check the hw type of the interface
Before:
[ 57.723666] test_bpf: #20 LD_HATYPE [ 57.723675] BPF filter opcode 0020 (@0) unsupported [ 57.724168] 48 48 PASS
After:
[ 103.053184] test_bpf: #20 LD_HATYPE 7 6 PASS
CC Alexei Starovoitov<[email protected]>
CC Daniel Borkmann<[email protected]>
CC Philippe Bergheaud<[email protected]>
Signed-off-by Denis Kirjanov <[email protected]>
v2: address Alexei's comments
--- arch/powerpc/net/bpf_jit_comp.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
arch/powerpc/net/bpf_jit_comp.c +13 -4
@@ -361,6 +361,11 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, protocol));break ;case BPF_ANC |SKF_AD_IFINDEX : +case BPF_ANC |SKF_AD_HATYPE : +BUILD_BUG_ON (FIELD_SIZEOF (struct net_device , + ifindex) != 4); +BUILD_BUG_ON (FIELD_SIZEOF (struct net_device , + type) != 2);PPC_LD_OFFS (r_scratch1, r_skb, offsetof(struct sk_buff , dev));PPC_CMPDI (r_scratch1,0 );
@@ -368,14 +373,18 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,PPC_BCC (COND_EQ , addrs[ctx->pc_ret0]); }else {/* Exit, returning 0; first pass hits here. */ -PPC_BCC_SHORT (COND_NE , (ctx->idx*4 )+12 ); +PPC_BCC_SHORT (COND_NE , ctx->idx *4 +12 );PPC_LI (r_ret,0 );PPC_JMP (exit_addr); } -BUILD_BUG_ON (FIELD_SIZEOF (struct net_device , - ifindex) != 4); -PPC_LWZ_OFFS (r_A, r_scratch1, +if (code == (BPF_ANC |SKF_AD_IFINDEX )) { +PPC_LWZ_OFFS (r_A, r_scratch1, offsetof(struct net_device , ifindex)); + }else { +PPC_LHZ_OFFS (r_A, r_scratch1, + offsetof(struct net_device , type)); + } +break ;case BPF_ANC |SKF_AD_MARK : BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, mark) != 4);
Signature · 1 line
2.1.0
Quoted 45 lines · Denis Kirjanov
Add BPF extension
SKF_AD_HATYPEto ppc JIT to check the hw type of the interfaceBefore:
[ 57.723666] test_bpf: #20 LD_HATYPE [ 57.723675] BPF filter opcode 0020 (@0) unsupported [ 57.724168] 48 48 PASSAfter:
[ 103.053184] test_bpf: #20 LD_HATYPE 7 6 PASSCC Alexei Starovoitov<[email protected]>CC Daniel Borkmann<[email protected]>CC Philippe Bergheaud<[email protected]>Signed-off-by Denis Kirjanov <[email protected]>v2: address Alexei's comments
--- arch/powerpc/net/bpf_jit_comp.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)arch/powerpc/net/bpf_jit_comp.c +6
-1@@ -361,6 +361,11 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, protocol));break ;case BPF_ANC |SKF_AD_IFINDEX : +case BPF_ANC |SKF_AD_HATYPE : +BUILD_BUG_ON (FIELD_SIZEOF (struct net_device , + ifindex) != 4); +BUILD_BUG_ON (FIELD_SIZEOF (struct net_device , + type) != 2);PPC_LD_OFFS (r_scratch1, r_skb, offsetof(struct sk_buff , dev));PPC_CMPDI (r_scratch1,0 );@@ -368,14 +373,18 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,PPC_BCC (COND_EQ , addrs[ctx->pc_ret0]); }else {/* Exit, returning 0; first pass hits here. */ -PPC_BCC_SHORT (COND_NE , (ctx->idx*4 )+12 ); +PPC_BCC_SHORT (COND_NE , ctx->idx *4 +12 );PPC_LI (r_ret,0 );PPC_JMP (exit_addr);
arch/powerpc/net/bpf_jit_comp.c static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, · line 385
Quoted 10 lines
arch/powerpc/net/bpf_jit_comp.c +5
-3} -BUILD_BUG_ON (FIELD_SIZEOF (struct net_device , - ifindex) != 4); -PPC_LWZ_OFFS (r_A, r_scratch1, +if (code == (BPF_ANC |SKF_AD_IFINDEX )) { +PPC_LWZ_OFFS (r_A, r_scratch1, offsetof(struct net_device , ifindex)); + }else { +PPC_LHZ_OFFS (r_A, r_scratch1, + offsetof(struct net_device , type));
formatting is a bit off here, but that's minor.
From: Denis Kirjanov <[email protected]>
Date: Mon, 10 Nov 2014 08:59:43 +0300
Quoted 9 lines
Add BPF extension
SKF_AD_HATYPEto ppc JIT to check the hw type of the interfaceBefore:
[ 57.723666] test_bpf: #20 LD_HATYPE [ 57.723675] BPF filter opcode 0020 (@0) unsupported [ 57.724168] 48 48 PASSAfter:
Quoted 8 lines
[ 103.053184] test_bpf: #20 LD_HATYPE 7 6 PASSCC Alexei Starovoitov<[email protected]>CC Daniel Borkmann<[email protected]>CC Philippe Bergheaud<[email protected]>Signed-off-by Denis Kirjanov <[email protected]>v2: address Alexei's comments
Applied, thanks.