Re: Cannot load eBPF program as XDP

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

 



Hi Jesper

On Wed, Jun 28, 2017 at 4:26 PM, Jesper Dangaard Brouer
<brouer@xxxxxxxxxx> wrote:
>
> On Tue, 27 Jun 2017 22:32:26 -0400 "MD I. Islam" <tamim@xxxxxxxxxxx> wrote:
>
>> Hi Song
>>
>> 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!
>> RTNETLINK answers: Operation not supported
>>
>> Could you please advise me what is wrong here?
>
> The xdp1_kern.c bpf program expect to be loaded with the tool
> xdp1_user.c (compiled to executable xdp1) which uses the bpf-elf loader
> located in the kernel/samples/bpf/ directory.
>
> You are trying to load this xdp1_kern.c program with the TC utility,
> which have it's own bpf-elf loader.  These two loaders are not expected
> to be compatible... specifically struct bpf_elf_map are different.
>

Thanks for pointing that out! I will use xdp1 executable to load the
BPF program. Currently my development machine doesn't have a XDP
compatible NIC. Is there a virtual NIC that I can use to prototype
XDP?

>
> p.s. I'm maintaining some bpf samples here:
>  https://github.com/netoptimizer/prototype-kernel/tree/master/kernel/samples/bpf
>
> --Jesper
>
>> > 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
>
>
>
> --
> Best regards,
>   Jesper Dangaard Brouer
>   MSc.CS, Principal Kernel Engineer at Red Hat
>   LinkedIn: http://www.linkedin.com/in/brouer

Many thanks
Tamim



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

  Powered by Linux