Add BPF extension SKF_AD_HATYPE to ppc JIT to check
the hw type of the interface

JIT off:
[   69.106783] test_bpf: #20 LD_HATYPE 48 48 PASS
JIT on:
[   64.721757] test_bpf: #20 LD_HATYPE 7 6 PASS

CC: Alexei Starovoitov<alexei.starovoi...@gmail.com>
CC: Daniel Borkmann<dbork...@redhat.com>
CC: Philippe Bergheaud<fe...@linux.vnet.ibm.com>
Signed-off-by: Denis Kirjanov <k...@linux-powerpc.org>
---
 arch/powerpc/net/bpf_jit_comp.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
index d110e28..8bf4fc2 100644
--- a/arch/powerpc/net/bpf_jit_comp.c
+++ b/arch/powerpc/net/bpf_jit_comp.c
@@ -412,6 +412,22 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 
*image,
                        PPC_ANDI(r_A, r_A, PKT_TYPE_MAX);
                        PPC_SRWI(r_A, r_A, 5);
                        break;
+               case BPF_ANC | SKF_AD_HATYPE:
+                       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);
+                       if (ctx->pc_ret0 != -1) {
+                               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_LI(r_ret, 0);
+                               PPC_JMP(exit_addr);
+                       }
+                       PPC_LHZ_OFFS(r_A, r_scratch1,
+                                    offsetof(struct net_device, type));
+                       break;
                case BPF_ANC | SKF_AD_CPU:
 #ifdef CONFIG_SMP
                        /*
-- 
2.1.0

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to