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;
 }
 

Reply via email to