Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package xdp-tools for openSUSE:Factory checked in at 2026-04-13 23:18:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xdp-tools (Old) and /work/SRC/openSUSE:Factory/.xdp-tools.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xdp-tools" Mon Apr 13 23:18:09 2026 rev:10 rq:1346118 version:1.6.3 Changes: -------- --- /work/SRC/openSUSE:Factory/xdp-tools/xdp-tools.changes 2026-02-24 15:37:53.040635489 +0100 +++ /work/SRC/openSUSE:Factory/.xdp-tools.new.21863/xdp-tools.changes 2026-04-13 23:18:28.271095691 +0200 @@ -1,0 +2,12 @@ +Sat Apr 11 21:01:24 UTC 2026 - Dirk Müller <[email protected]> + +- update to 1.6.3: + * xdp-trafficgen: Load an xdp_pass program on bonding driver + * A couple of xdpsock fixes + * configure: Update clang versions + * xdpdump: include removed from linux/ethtool.h + * configure: support compilation for non-sudoers + * xdp-forward/xdp_flowtable: Fix backward compatibility + verifier issue + +------------------------------------------------------------------- Old: ---- xdp-tools-1.6.2.tar.gz New: ---- xdp-tools-1.6.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xdp-tools.spec ++++++ --- /var/tmp/diff_new_pack.a9IGo9/_old 2026-04-13 23:18:28.839119114 +0200 +++ /var/tmp/diff_new_pack.a9IGo9/_new 2026-04-13 23:18:28.843119279 +0200 @@ -26,7 +26,7 @@ # workaround binutils/strip issue with BPF object, see #boo#1217108 %define __arch_install_post export NO_BRP_STRIP_DEBUG=true Name: xdp-tools -Version: 1.6.2 +Version: 1.6.3 Release: 0 Group: Productivity/Networking/Other Summary: Utilities and example programs for use with XDP ++++++ xdp-tools-1.6.2.tar.gz -> xdp-tools-1.6.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/configure new/xdp-tools-1.6.3/configure --- old/xdp-tools-1.6.2/configure 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/configure 2026-03-25 12:44:04.000000000 +0100 @@ -39,7 +39,7 @@ # we're looking for a binary with the same name as tool_name; try version # suffixes in order until we find one - for v in 17 16 15 14 13 12 11; do + for v in $(seq 23 -1 11); do tool_path="${tool_name}-$v" if command -v "$tool_path" >/dev/null 2>&1; then echo $tool_path @@ -109,11 +109,15 @@ exit 1 fi + if ! command -v $BPFTOOL &>/dev/null; then + BPFTOOL=$(whereis -b bpftool | awk '{print $2}') + fi + if command -v $BPFTOOL &>/dev/null && $BPFTOOL gen help 2>&1 | grep 'gen skeleton.*name' > /dev/null; then bpftool_version=$($BPFTOOL version | head -n 1) - echo "using $bpftool_version" + echo "using $bpftool_version" else - echo "bpftool not found or doesn't support skeleton generation; not building all tools" + echo "bpftool not found or doesn't support skeleton generation; not building all tools" BPFTOOL= fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/lib/libxdp/libxdp.3 new/xdp-tools-1.6.3/lib/libxdp/libxdp.3 --- old/xdp-tools-1.6.2/lib/libxdp/libxdp.3 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/lib/libxdp/libxdp.3 2026-03-25 12:44:04.000000000 +0100 @@ -1,4 +1,4 @@ -.TH "libxdp" "3" "January 15, 2026" "v1.6.2" "libxdp - library for loading XDP programs" +.TH "libxdp" "3" "January 15, 2026" "v1.6.3" "libxdp - library for loading XDP programs" .SH "NAME" libxdp \- library for attaching XDP programs and using AF_XDP sockets .SH "SYNOPSIS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/lib/util/xdpsock.c new/xdp-tools-1.6.3/lib/util/xdpsock.c --- old/xdp-tools-1.6.2/lib/util/xdpsock.c 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/lib/util/xdpsock.c 2026-03-25 12:44:04.000000000 +0100 @@ -1034,7 +1034,7 @@ ret = xsk_ring_prod__reserve(&umem->fq, XSK_RING_PROD__DEFAULT_NUM_DESCS * 2, &idx); if (ret != XSK_RING_PROD__DEFAULT_NUM_DESCS * 2) - return -ret; + return -ENOMEM; for (i = 0; i < XSK_RING_PROD__DEFAULT_NUM_DESCS * 2; i++) *xsk_ring_prod__fill_addr(&umem->fq, idx++) = (__u64)i * frame_size; @@ -1463,7 +1463,7 @@ static int l2fwd(struct xsk_ctx *ctx, struct xsk_socket_info *xsk) { __u32 idx_rx = 0, idx_tx = 0, frags_done = 0; - unsigned int rcvd, i, eop_cnt = 0; + unsigned int rcvd, i, eop_cnt = 0, slots; static __u32 nb_frags; int ret; @@ -1480,10 +1480,8 @@ return 0; } - ret = xsk_ring_prod__reserve(&xsk->tx, rcvd, &idx_tx); - while ((unsigned int)ret != rcvd) { - if (ret < 0) - return ret; + slots = xsk_ring_prod__reserve(&xsk->tx, rcvd, &idx_tx); + if (slots < rcvd) { complete_tx_l2fwd(xsk, ctx->opt.batch_size, ctx->opt.busy_poll); if (ctx->opt.busy_poll || xsk_ring_prod__needs_wakeup(&xsk->tx)) { xsk->app_stats.tx_wakeup_sendtos++; @@ -1491,11 +1489,11 @@ if (ret) return ret; } - ret = xsk_ring_prod__reserve(&xsk->tx, rcvd, &idx_tx); + slots = xsk_ring_prod__reserve(&xsk->tx, rcvd, &idx_tx); } for (i = 0; i < rcvd; i++) { - const struct xdp_desc *desc = xsk_ring_cons__rx_desc(&xsk->rx, idx_rx++); + const struct xdp_desc *desc = xsk_ring_cons__rx_desc(&xsk->rx, idx_rx + i); bool eop = IS_EOP_DESC(desc->options); __u64 addr = desc->addr; __u32 len = desc->len; @@ -1504,6 +1502,17 @@ addr = xsk_umem__add_offset_to_addr(addr); char *pkt = xsk_umem__get_data(xsk->umem->buffer, addr); + if (!slots) { + /* couldn't reserve the full number of slots above, try + * reserving one at a time while processing, aborting if + * this fails + */ + slots = xsk_ring_prod__reserve(&xsk->tx, 1, &idx_tx); + if (!slots) + break; + } + slots--; + if (!nb_frags++) swap_mac_addresses(pkt); @@ -1527,8 +1536,8 @@ xsk->ring_stats.rx_npkts += eop_cnt; xsk->ring_stats.tx_npkts += eop_cnt; - xsk->ring_stats.rx_frags += rcvd; - xsk->ring_stats.tx_frags += rcvd; + xsk->ring_stats.rx_frags += i; + xsk->ring_stats.tx_frags += i; xsk->outstanding_tx += frags_done; return 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/packaging/rpm/xdp-tools.spec new/xdp-tools-1.6.3/packaging/rpm/xdp-tools.spec --- old/xdp-tools-1.6.2/packaging/rpm/xdp-tools.spec 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/packaging/rpm/xdp-tools.spec 2026-03-25 12:44:04.000000000 +0100 @@ -1,5 +1,5 @@ Name: xdp-tools -Version: 1.6.2 +Version: 1.6.3 Release: 1%{?dist} Summary: Utilities and example programs for use with XDP %global _soversion 1.6.0 @@ -118,6 +118,9 @@ %{_libdir}/pkgconfig/libxdp.pc %changelog +* Tue Mar 24 2026 Toke Høiland-Jørgensen <[email protected]> 1.6.3-1 +- Upstream version bump + * Thu Feb 19 2026 Toke Høiland-Jørgensen <[email protected]> 1.6.2-1 - Upstream version bump diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/version.mk new/xdp-tools-1.6.3/version.mk --- old/xdp-tools-1.6.2/version.mk 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/version.mk 2026-03-25 12:44:04.000000000 +0100 @@ -1,4 +1,4 @@ -TOOLS_VERSION := "1.6.2" +TOOLS_VERSION := "1.6.3" # Conditionally defined make target makes it possible to print the version # defined above by running 'make -f version.mk' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/xdp-bench/xdp-bench.8 new/xdp-tools-1.6.3/xdp-bench/xdp-bench.8 --- old/xdp-tools-1.6.2/xdp-bench/xdp-bench.8 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/xdp-bench/xdp-bench.8 2026-03-25 12:44:04.000000000 +0100 @@ -1,4 +1,4 @@ -.TH "xdp-bench" "8" "FEBRUARY 19, 2026" "V1.6.2" "A simple XDP benchmarking tool" +.TH "xdp-bench" "8" "FEBRUARY 19, 2026" "V1.6.3" "A simple XDP benchmarking tool" .SH "NAME" XDP-bench \- a simple XDP benchmarking tool .SH "SYNOPSIS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/xdp-dump/xdpdump.8 new/xdp-tools-1.6.3/xdp-dump/xdpdump.8 --- old/xdp-tools-1.6.2/xdp-dump/xdpdump.8 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/xdp-dump/xdpdump.8 2026-03-25 12:44:04.000000000 +0100 @@ -1,4 +1,4 @@ -.TH "xdpdump" "8" "JANUARY 13, 2021" "V1.6.2" "a simple tcpdump like tool for capturing packets at the XDP layer" +.TH "xdpdump" "8" "JANUARY 13, 2021" "V1.6.3" "a simple tcpdump like tool for capturing packets at the XDP layer" .SH "NAME" xdpdump \- a simple tcpdump like tool for capturing packets at the XDP layer .SH "SYNOPSIS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/xdp-dump/xdpdump.c new/xdp-tools-1.6.3/xdp-dump/xdpdump.c --- old/xdp-tools-1.6.2/xdp-dump/xdpdump.c 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/xdp-dump/xdpdump.c 2026-03-25 12:44:04.000000000 +0100 @@ -7,6 +7,7 @@ #include <errno.h> #include <fcntl.h> #include <inttypes.h> +#include <limits.h> #include <signal.h> #include <stdbool.h> #include <stdio.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/xdp-filter/xdp-filter.8 new/xdp-tools-1.6.3/xdp-filter/xdp-filter.8 --- old/xdp-tools-1.6.2/xdp-filter/xdp-filter.8 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/xdp-filter/xdp-filter.8 2026-03-25 12:44:04.000000000 +0100 @@ -1,4 +1,4 @@ -.TH "xdp-filter" "8" "SEPTEMBER 5, 2022" "V1.6.2" "A simple XDP-powered packet filter" +.TH "xdp-filter" "8" "SEPTEMBER 5, 2022" "V1.6.3" "A simple XDP-powered packet filter" .SH "NAME" xdp-filter \- a simple XDP-powered packet filter .SH "SYNOPSIS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/xdp-forward/xdp-forward.8 new/xdp-tools-1.6.3/xdp-forward/xdp-forward.8 --- old/xdp-tools-1.6.2/xdp-forward/xdp-forward.8 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/xdp-forward/xdp-forward.8 2026-03-25 12:44:04.000000000 +0100 @@ -1,4 +1,4 @@ -.TH "xdp-forward" "8" "OCTOBER 11, 2024" "V1.6.2" "XDP program loader" +.TH "xdp-forward" "8" "OCTOBER 11, 2024" "V1.6.3" "XDP program loader" .SH "NAME" xdp-forward \- the XDP forwarding plane .SH "SYNOPSIS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/xdp-forward/xdp_flowtable.bpf.c new/xdp-tools-1.6.3/xdp-forward/xdp_flowtable.bpf.c --- old/xdp-tools-1.6.2/xdp-forward/xdp_flowtable.bpf.c 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/xdp-forward/xdp_flowtable.bpf.c 2026-03-25 12:44:04.000000000 +0100 @@ -125,7 +125,6 @@ break; } } - static __always_inline void xdp_flowtable_snat_port(const struct flow_offload *flow, struct flow_ports *ports, void *data_end, @@ -254,22 +253,37 @@ } static __always_inline void +xdp_flowtable_get_snat_ip(__be32 *addr, const struct flow_offload *flow, + enum flow_offload_tuple_dir dir) +{ + switch (dir) { + case FLOW_OFFLOAD_DIR_ORIGINAL: + bpf_core_read(addr, bpf_core_type_size(*addr), + &flow->tuplehash[FLOW_OFFLOAD_DIR_REPLY].tuple.dst_v4.s_addr); + break; + case FLOW_OFFLOAD_DIR_REPLY: + bpf_core_read(addr, bpf_core_type_size(*addr), + &flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].tuple.src_v4.s_addr); + break; + default: + return; + } +} + +static __always_inline void xdp_flowtable_snat_ip(const struct flow_offload *flow, struct iphdr *iph, void *data_end, enum flow_offload_tuple_dir dir) { __be32 addr, nat_addr; + xdp_flowtable_get_snat_ip(&nat_addr, flow, dir); switch (dir) { case FLOW_OFFLOAD_DIR_ORIGINAL: addr = iph->saddr; - bpf_core_read(&nat_addr, bpf_core_type_size(nat_addr), - &flow->tuplehash[FLOW_OFFLOAD_DIR_REPLY].tuple.dst_v4.s_addr); iph->saddr = nat_addr; break; case FLOW_OFFLOAD_DIR_REPLY: addr = iph->daddr; - bpf_core_read(&nat_addr, bpf_core_type_size(nat_addr), - &flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].tuple.src_v4.s_addr); iph->daddr = nat_addr; break; default: @@ -361,22 +375,38 @@ } static __always_inline void +xdp_flowtable_get_snat_ipv6(struct in6_addr *addr, + const struct flow_offload *flow, + enum flow_offload_tuple_dir dir) +{ + switch (dir) { + case FLOW_OFFLOAD_DIR_ORIGINAL: + bpf_core_read(addr, bpf_core_type_size(*addr), + &flow->tuplehash[FLOW_OFFLOAD_DIR_REPLY].tuple.dst_v6); + break; + case FLOW_OFFLOAD_DIR_REPLY: + bpf_core_read(addr, bpf_core_type_size(*addr), + &flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].tuple.src_v6); + break; + default: + return; + } +} + +static __always_inline void xdp_flowtable_snat_ipv6(const struct flow_offload *flow, struct ipv6hdr *ip6h, void *data_end, enum flow_offload_tuple_dir dir) { struct in6_addr addr, nat_addr; + xdp_flowtable_get_snat_ipv6(&nat_addr, flow, dir); switch (dir) { case FLOW_OFFLOAD_DIR_ORIGINAL: addr = ip6h->saddr; - bpf_core_read(&nat_addr, bpf_core_type_size(nat_addr), - &flow->tuplehash[FLOW_OFFLOAD_DIR_REPLY].tuple.dst_v6); ip6h->saddr = nat_addr; break; case FLOW_OFFLOAD_DIR_REPLY: addr = ip6h->daddr; - bpf_core_read(&nat_addr, bpf_core_type_size(nat_addr), - &flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].tuple.src_v6); ip6h->daddr = nat_addr; break; default: @@ -478,6 +508,83 @@ ip6h->hop_limit--; } +static __always_inline int +xdp_flowtable_route_lookup(struct xdp_md *ctx, + const struct flow_offload *flow, + struct bpf_fib_lookup *tuple, + enum flow_offload_tuple_dir dir, + unsigned long flags, __u32 fib_flags) +{ + if (tuple->family == AF_INET6) { + struct in6_addr *src = (struct in6_addr *)tuple->ipv6_src; + struct in6_addr *dst = (struct in6_addr *)tuple->ipv6_dst; + + if (flags & BIT(NF_FLOW_SNAT)) { + if (dir == FLOW_OFFLOAD_DIR_ORIGINAL) + xdp_flowtable_get_snat_ipv6(src, flow, dir); + else + xdp_flowtable_get_snat_ipv6(dst, flow, dir); + } + if (flags & BIT(NF_FLOW_DNAT)) { + if (dir == FLOW_OFFLOAD_DIR_ORIGINAL) + xdp_flowtable_get_dnat_ipv6(dst, flow, dir); + else + xdp_flowtable_get_dnat_ipv6(src, flow, dir); + } + } else { + if (flags & BIT(NF_FLOW_SNAT)) { + if (dir == FLOW_OFFLOAD_DIR_ORIGINAL) + xdp_flowtable_get_snat_ip(&tuple->ipv4_src, + flow, dir); + else + xdp_flowtable_get_snat_ip(&tuple->ipv4_dst, + flow, dir); + } + if (flags & BIT(NF_FLOW_DNAT)) { + if (dir == FLOW_OFFLOAD_DIR_ORIGINAL) + xdp_flowtable_get_dnat_ip(&tuple->ipv4_dst, + flow, dir); + else + xdp_flowtable_get_dnat_ip(&tuple->ipv4_src, + flow, dir); + } + } + + if (bpf_fib_lookup(ctx, tuple, sizeof(*tuple), fib_flags) != + BPF_FIB_LKUP_RET_SUCCESS) + return -1; + + /* Verify egress index has been configured as TX-port */ + if (!bpf_map_lookup_elem(&xdp_tx_ports, &tuple->ifindex)) + return -1; + + return 0; +} + +/* This function is required to keep the code backward compatible with older + * kernel where flow_offload_tuple struct size is different. + */ +static __always_inline struct flow_offload * +xdp_flowtable_get_flow_from_tuplehash(struct flow_offload_tuple_rhash *tuplehash, + enum flow_offload_tuple_dir dir) +{ + struct flow_offload_tuple_rhash *tuplehash_ptr; + + switch (dir) { + case FLOW_OFFLOAD_DIR_ORIGINAL: + tuplehash_ptr = tuplehash; + break; + case FLOW_OFFLOAD_DIR_REPLY: + tuplehash_ptr = (void *)tuplehash - + bpf_core_type_size(struct flow_offload_tuple_rhash); + break; + default: + return NULL; + } + + return container_of(tuplehash_ptr, struct flow_offload, tuplehash); +} + static __always_inline int xdp_flowtable_flags(struct xdp_md *ctx, __u32 fib_flags) { @@ -493,6 +600,7 @@ struct flow_offload *flow; struct flow_ports *ports; unsigned long flags; + __u8 xmit_type; if (eth + 1 > data_end) return XDP_PASS; @@ -563,34 +671,23 @@ if (!tuplehash) return XDP_PASS; - flow = container_of(tuplehash, struct flow_offload, tuplehash); - if (bpf_core_read(&flags, sizeof(flags), &flow->flags)) + dir = BPF_CORE_READ_BITFIELD_PROBED(tuplehash, tuple.dir); + if (dir >= FLOW_OFFLOAD_DIR_MAX) return XDP_PASS; - if (tuplehash->tuple.xmit_type != FLOW_OFFLOAD_XMIT_NEIGH) + flow = xdp_flowtable_get_flow_from_tuplehash(tuplehash, dir); + if (!flow) return XDP_PASS; - dir = tuplehash->tuple.dir; - if (dir >= FLOW_OFFLOAD_DIR_MAX) + if (bpf_core_read(&flags, sizeof(flags), &flow->flags)) return XDP_PASS; - /* update the destination address in case of dnatting before - * performing the route lookup - */ - if (tuple.family == AF_INET6) { - struct in6_addr *dst_addr = (struct in6_addr *)&tuple.ipv6_dst; - - xdp_flowtable_get_dnat_ipv6(dst_addr, flow, dir); - } else { - xdp_flowtable_get_dnat_ip(&tuple.ipv4_dst, flow, dir); - } - - if (bpf_fib_lookup(ctx, &tuple, sizeof(tuple), fib_flags) != - BPF_FIB_LKUP_RET_SUCCESS) + xmit_type = BPF_CORE_READ_BITFIELD_PROBED(tuplehash, tuple.xmit_type); + if (xmit_type != FLOW_OFFLOAD_XMIT_NEIGH) return XDP_PASS; - /* Verify egress index has been configured as TX-port */ - if (!bpf_map_lookup_elem(&xdp_tx_ports, &tuple.ifindex)) + if (xdp_flowtable_route_lookup(ctx, flow, &tuple, dir, flags, + fib_flags)) return XDP_PASS; if (tuple.family == AF_INET6) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/xdp-loader/xdp-loader.8 new/xdp-tools-1.6.3/xdp-loader/xdp-loader.8 --- old/xdp-tools-1.6.2/xdp-loader/xdp-loader.8 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/xdp-loader/xdp-loader.8 2026-03-25 12:44:04.000000000 +0100 @@ -1,4 +1,4 @@ -.TH "xdp-loader" "8" "SEPTEMBER 12, 2024" "V1.6.2" "XDP program loader" +.TH "xdp-loader" "8" "SEPTEMBER 12, 2024" "V1.6.3" "XDP program loader" .SH "NAME" xdp-loader \- an XDP program loader .SH "SYNOPSIS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/xdp-monitor/xdp-monitor.8 new/xdp-tools-1.6.3/xdp-monitor/xdp-monitor.8 --- old/xdp-tools-1.6.2/xdp-monitor/xdp-monitor.8 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/xdp-monitor/xdp-monitor.8 2026-03-25 12:44:04.000000000 +0100 @@ -1,4 +1,4 @@ -.TH "xdp-monitor" "8" "DECEMBER 12, 2022" "V1.6.2" "A simple XDP monitoring tool" +.TH "xdp-monitor" "8" "DECEMBER 12, 2022" "V1.6.3" "A simple XDP monitoring tool" .SH "NAME" XDP-monitor \- a simple BPF-powered XDP monitoring tool .SH "SYNOPSIS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/xdp-trafficgen/xdp-trafficgen.8 new/xdp-tools-1.6.3/xdp-trafficgen/xdp-trafficgen.8 --- old/xdp-tools-1.6.2/xdp-trafficgen/xdp-trafficgen.8 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/xdp-trafficgen/xdp-trafficgen.8 2026-03-25 12:44:04.000000000 +0100 @@ -1,4 +1,4 @@ -.TH "xdp-trafficgen" "8" "FEBRUARY 19, 2026" "V1.6.2" "An XDP-based traffic generator" +.TH "xdp-trafficgen" "8" "FEBRUARY 19, 2026" "V1.6.3" "An XDP-based traffic generator" .SH "NAME" XDP-trafficgen \- an XDP-based traffic generator .SH "SYNOPSIS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdp-tools-1.6.2/xdp-trafficgen/xdp-trafficgen.c new/xdp-tools-1.6.3/xdp-trafficgen/xdp-trafficgen.c --- old/xdp-tools-1.6.2/xdp-trafficgen/xdp-trafficgen.c 2026-02-19 15:55:59.000000000 +0100 +++ new/xdp-tools-1.6.3/xdp-trafficgen/xdp-trafficgen.c 2026-03-25 12:44:04.000000000 +0100 @@ -76,6 +76,7 @@ "octeontx2", "stmmac", "mlx5_core", + "bonding", }; static bool driver_needs_xdp_pass(const struct iface *iface) @@ -106,6 +107,9 @@ } } + pr_debug("Driver %s on interface %s does NOT need an xdp_pass program\n", + name, iface->ifname); + return false; }
