XDP-Newbies Archive mirror
 help / color / mirror / Atom feed
From: "Toke Høiland-Jørgensen" <toke@redhat.com>
To: Benjamin Beckmeyer <beb@eks-engel.de>, xdp-newbies@vger.kernel.org
Subject: Re: static variable in xdp
Date: Sun, 20 Nov 2022 00:58:36 +0100	[thread overview]
Message-ID: <87y1s6wl77.fsf@toke.dk> (raw)
In-Reply-To: <35f6717a-c032-444c-f3e4-a479b1f91a3c@eks-engel.de>

Benjamin Beckmeyer <beb@eks-engel.de> writes:

> Hi Toke,
>
>>> Hi all,
>>>
>>> I hope you could help me with a static variable problem in xdp.
>>> Here is my source:
>>>
>>> static __u32 last_xid = 0;
>>>
>>> static __always_inline int profinet_process_packet(struct xdp_md *ctx, __u64 off) {
>>>     void *data_end = (void *)(long)ctx->data_end;
>>>     void *data = (void *)(long)ctx->data;
>>>     struct profinet_hdr *p_hdr;
>>>     __u16 profinet_frame_id;
>>> //  static __u32 last_xid;
>>>
>>>     p_hdr = data + off;
>>>
>>>     if (p_hdr + 1 > data_end)
>>>         return XDP_DROP;
>>>
>>>     profinet_frame_id = bpf_htons(p_hdr->frame_id);
>>>
>>>     if ((profinet_frame_id >= 0x0100 && profinet_frame_id <=0x7fff) ||
>>>         (profinet_frame_id == 0x0020) ||
>>>         (profinet_frame_id == 0xbbff) ||
>>>         (profinet_frame_id == 0xfefc) ||
>>>         (profinet_frame_id == 0xf7ff))
>>>             return XDP_DROP;
>>>
>>>     if (p_hdr->xid == last_xid)
>>>         return XDP_DROP;
>>>     else
>>>         last_xid = p_hdr->xid;
>>>
>>>     return XDP_PASS;
>>> }
>>>
>>> At the moment I'm using kernel version 6.0.2 and iproute2-6.0.0.
>>> I also tried to load the the filter with xdp_loader (xdp_tools).
>>>
>>> Output from ip:
>>> $ ip link set dev eth0 xdpgeneric obj xdp_prog_kern.o sec
>>>  eks_filter
>>>
>>> Prog section 'eks_filter' rejected: Permission denied (13)!
>>>  - Type:         6
>>>  - Instructions: 48 (0 over limit)
>>>  - License:      GPL
>>>
>>> Verifier analysis:
>>>
>>> Error fetching program/map!
>>>
>>> Output from xdp_loader:
>>> $ ./xdp_loader -deth0 -A --filename xdp_prog_kern.o --pro
>>> gsec eks_filter
>>> libbpf: failed to guess program type based on ELF section name 'eks_filter'
>>> libbpf: supported section(type) names are: socket kprobe/ uprobe/ 
>>> kretprobe/ uretprobe/ classifier action tracepoint/ tp/ raw_tracepoint/ 
>>> raw_tp/ tp_btf/ xdp perf_event lwt_in lwt_out lwt_xmit lwt_seg6local 
>>> cgroup_skb/ingress cgroup_skb/egress cgroup/skb cgroup/sock 
>>> cgroup/post_bind4 cgroup/post_bind6 cgroup/dev sockops sk_skb/stream_parser 
>>> sk_skb/stream_verdict sk_skb sk_msg lirc_mode2 flow_dissector cgroup/bind4 
>>> cgroup/bind6 cgroup/connect4 cgroup/connect6 cgroup/sendmsg4 
>>> cgroup/sendmsg6 cgroup/recvmsg4 cgroup/recvmsg6 cgroup/sysctl 
>>> cgroup/getsockopt cgroup/setsockopt
>>> Success: Loaded BPF-object(xdp_prog_kern.o) and used section(eks_filter)
>>>  - XDP prog attached on device:eth0(ifindex:2)
>>>  - Pinning maps in /sys/fs/bpf/eth0/
>>> libbpf: failed to pin map: Operation not permitted
>>> ERR: pinning maps
>> This does not look like the output of the xdp-loader from xdp-tools; are
>> you using the code from the xdp-tutorial? Try using the one from
>> xdp-tools instead...
>>
>> Also, there's a hint here:
>>
>>> libbpf: failed to guess program type based on ELF section name 'eks_filter'
>> You should use SEC("xdp") for XDP programs instead of custom section
>> names, those are deprecated...
>>
>> -Toke
>
> thanks for your reply. I forget about one thing. I'm cross compiling the xdp-loader 
> for armv7. So far it looks good. I had a little fight with the xdp-loader but it 
> seems to work now. The hint with SEC was really good.
>
> It seems that not the xdp program was the problem, it was more the problem which 
> tool you use to load it. 
>
> xdp-loader no problem, while ip throws still this output.
>
> Anyways, it works. Thanks for your help.

Cool! You're welcome! :)

-Toke


      reply	other threads:[~2022-11-19 23:59 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-19  9:44 static variable in xdp Benjamin Beckmeyer
2022-11-19 12:14 ` Toke Høiland-Jørgensen
2022-11-19 17:46   ` Benjamin Beckmeyer
2022-11-19 23:58     ` Toke Høiland-Jørgensen [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y1s6wl77.fsf@toke.dk \
    --to=toke@redhat.com \
    --cc=beb@eks-engel.de \
    --cc=xdp-newbies@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).