Re: Cannot load eBPF program as XDP

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/28/2017 04:32 AM, MD I. Islam wrote:
On Tue, Jun 27, 2017 at 10:05 PM, Y Song <ys114321@xxxxxxxxx> wrote:
xdp meta data is different:

struct xdp_md {
         __u32 data;
         __u32 data_end;
};

All other fields available for skb metadata won't be available in XDP.
That is way
you get verification failure.

Thanks for the quick reply! Now I'm trying xdp1_kern.c which uses
xdp_md. Now I'm getting the error:

Note: 8 bytes struct bpf_elf_map fixup performed due to size mismatch!

This one is harmless, just telling you that the native bpf_elf_map
from iproute2 is different than the one you're loading, so it fixes
up the remaining 8 bytes automatically.

RTNETLINK answers: Operation not supported

This one seems likely that the driver you're trying to attach this to
does not have XDP support. What's the driver you're using?

Could you please advise me what is wrong here?

On Tue, Jun 27, 2017 at 7:00 PM, MD I. Islam <tamim@xxxxxxxxxxx> wrote:
Hi

I'm using http://lingrok.org/xref/linux-net-next/samples/bpf/parse_simple.c.

I can load the program as tc_cls using following commands:

sudo tc qdisc add dev eno1 clsact
sudo tc filter add dev eno1  ingress bpf da obj parse_simple.o sec simple

But I get error when I load the same program in XDP:

sudo ip link set dev eno1 xdp obj parse_simple.o section simple

Prog section 'simple' rejected: Permission denied (13)!
  - Type:         6
  - Instructions: 23 (0 over limit)
  - License:      GPL

Verifier analysis:

0: (b7) r0 = 0
1: (61) r2 = *(u32 *)(r1 +80)
invalid bpf_context access off=80 size=4

Error fetching program/map!

I made sure that the parse_simple.o have necessary permission. Could
you please advise what is wrong here? I'm using Kernel 4.11+. Does XDP
need any specific kernel configuration enabled? clang and LLVM
versions are as following:

clang --version
clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
Target: x86_64-pc-linux-gnu

llc --version
LLVM (http://llvm.org/):
   LLVM version 3.8.0

   Optimized build.
   Built Jul  9 2016 (11:22:59).
   Default target: x86_64-pc-linux-gnu
   Host CPU: haswell

   Registered Targets:
     aarch64    - AArch64 (little endian)
     aarch64_be - AArch64 (big endian)
     amdgcn     - AMD GCN GPUs
     arm        - ARM
     arm64      - ARM64 (little endian)
     armeb      - ARM (big endian)
     bpf        - BPF (host endian)
     bpfeb      - BPF (big endian)
     bpfel      - BPF (little endian)
     cpp        - C++ backend
     hexagon    - Hexagon
     mips       - Mips
     mips64     - Mips64 [experimental]
     mips64el   - Mips64el [experimental]
     mipsel     - Mipsel
     msp430     - MSP430 [experimental]
     nvptx      - NVIDIA PTX 32-bit
     nvptx64    - NVIDIA PTX 64-bit
     ppc32      - PowerPC 32
     ppc64      - PowerPC 64
     ppc64le    - PowerPC 64 LE
     r600       - AMD GPUs HD2XXX-HD6XXX
     sparc      - Sparc
     sparcel    - Sparc LE
     sparcv9    - Sparc V9
     systemz    - SystemZ
     thumb      - Thumb
     thumbeb    - Thumb (big endian)
     x86        - 32-bit X86: Pentium-Pro and above
     x86-64     - 64-bit X86: EM64T and AMD64
     xcore      - XCore

Many thanks
Tamim

Thanks
Tamim





[Index of Archives]     [Linux Networking Development]     [Fedora Linux Users]     [Linux SCTP]     [DCCP]     [Gimp]     [Yosemite Campsites]

  Powered by Linux