Benjamin Beckmeyer <beb@xxxxxxxxxxxx> writes: > 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