From: Stephen Hemminger <stephen@networkplumber.org>
To: Frank Dressler <frank@dressler.pro>
Cc: dev@dpdk.org, thomas@monjalon.net, david.marchand@redhat.com,
ktraynor@redhat.com, Bing Zhao <bingz@nvidia.com>
Subject: Re: [PATCH] net/af_packet: fix build with old kernel headers
Date: Sun, 8 Nov 2026 08:22:11 -0800 [thread overview]
Message-ID: <20261108082211.1f190f4b@phoenix.local> (raw)
In-Reply-To: <0374e022-3c41-4a6b-9464-7f879ef02ce1@dressler.pro>
On Sat, 7 Nov 2026 11:11:54 +0000
Frank Dressler <frank@dressler.pro> wrote:
> On 11/6/26 14:27, Bing Zhao wrote:
>
> > The PACKET_IGNORE_OUTGOING socket option is used unconditionally,
> > but it was only added to the uapi headers in Linux 4.20. The build
> > fails on distributions shipping older kernel headers, like RHEL 8
> > (kernel-headers-4.18.0-193.el8, gcc 8.5.0):
>
> On 11/6/26 16:06, Frank Dressler wrote:
> > If RHEL 8 uses Linux 4.18, [...]
> > If DPDK needs to stay compatible with RHEL 8, [...]
>
> Short version: RHEL itself does't seem to ship any DPDK that is too
> new for its kernel. The RHEL 8 compatibility requirement may instead
> come from NVIDIA's DOCA, which ships DPDK 26.03 on RHEL 8. If so, the
> question is whether upstream DPDK should support that combination, or
> whether it is better handled on the DOCA side. Details below.
>
> Bing Zhao, is that the use case behind the patch?
>
> Details:
> I read too much into Bing Zhao's statement that the new code does not
> build with the RHEL 8 kernel. That statement is true.I incorrectly
> assumed RHEL itself ships a DPDK version that is too new for its
> kernel, which is not the case.
The important parts that were missed here.
- flag should not be accepted if underlying kernel does not support it.
- failure should be at compile time not runtime.
Either remove this part:
diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
index 44f82c0309..ecd4a9801e 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -32,11 +32,6 @@
#include <unistd.h>
#include <poll.h>
-/* Added in Linux 6.2. Older kernels ignore it. */
-#ifndef PACKET_FANOUT_FLAG_IGNORE_OUTGOING
-#define PACKET_FANOUT_FLAG_IGNORE_OUTGOING 0x4000
-#endif
-
#define ETH_AF_PACKET_IFACE_ARG "iface"
#define ETH_AF_PACKET_NUM_Q_ARG "qpairs"
#define ETH_AF_PACKET_BLOCKSIZE_ARG "blocksz"
Or add a bunch of #ifdef like this.
diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
index 44f82c0309..6ffdfd8524 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -32,11 +32,6 @@
#include <unistd.h>
#include <poll.h>
-/* Added in Linux 6.2. Older kernels ignore it. */
-#ifndef PACKET_FANOUT_FLAG_IGNORE_OUTGOING
-#define PACKET_FANOUT_FLAG_IGNORE_OUTGOING 0x4000
-#endif
-
#define ETH_AF_PACKET_IFACE_ARG "iface"
#define ETH_AF_PACKET_NUM_Q_ARG "qpairs"
#define ETH_AF_PACKET_BLOCKSIZE_ARG "blocksz"
@@ -44,7 +39,10 @@
#define ETH_AF_PACKET_FRAMECOUNT_ARG "framecnt"
#define ETH_AF_PACKET_QDISC_BYPASS_ARG "qdisc_bypass"
#define ETH_AF_PACKET_FANOUT_MODE_ARG "fanout_mode"
-#define ETH_AF_PACKET_IGNORE_OUTGOING_ARG "ignore_outgoing"
+
+#ifdef PACKET_FANOUT_FLAG_IGNORE_OUTGOING
+#define ETH_AF_PACKET_IGNORE_OUTGOING_ARG "ignore_outgoing"
+#endif
#define DFLT_FRAME_SIZE (1 << 11)
#define DFLT_FRAME_COUNT (1 << 9)
@@ -110,7 +108,9 @@ static const char *valid_arguments[] = {
ETH_AF_PACKET_FRAMECOUNT_ARG,
ETH_AF_PACKET_QDISC_BYPASS_ARG,
ETH_AF_PACKET_FANOUT_MODE_ARG,
+#ifdef ETH_AF_PACKET_IGNORE_OUTGOING_ARG
ETH_AF_PACKET_IGNORE_OUTGOING_ARG,
+#endif
NULL
};
@@ -1002,6 +1002,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
goto error;
}
+#ifdef PACKET_FANOUT_FLAG_IGNORE_OUTGOING
/*
* Set the flag opportunistically if multiple queues are requested.
* It takes effect from Linux 6.2. Older kernels ignore it and the
@@ -1009,6 +1010,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
*/
if (ignore_outgoing != 0 && nb_queues > 1)
fanout_arg |= PACKET_FANOUT_FLAG_IGNORE_OUTGOING << 16;
+#endif
for (q = 0; q < nb_queues; q++) {
/* Open an AF_PACKET socket for this queue... */
@@ -1053,6 +1055,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
#endif
}
+#ifdef PACKET_IGNORE_OUTGOING
if (ignore_outgoing != 0 && nb_queues == 1) {
rc = setsockopt(qsockfd, SOL_PACKET, PACKET_IGNORE_OUTGOING,
&ignore_outgoing, sizeof(ignore_outgoing));
@@ -1064,6 +1067,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
goto error;
}
}
+#endif
rc = setsockopt(qsockfd, SOL_PACKET, PACKET_RX_RING, req, sizeof(*req));
if (rc == -1) {
@@ -1314,11 +1318,14 @@ rte_eth_from_packet(struct rte_vdev_device *dev,
fanout_mode = pair->value;
continue;
}
+
+#ifdef ETH_AF_PACKET_IGNORE_OUTGOING_ARG
if (strstr(pair->key, ETH_AF_PACKET_IGNORE_OUTGOING_ARG) != NULL) {
if (parse_uint(pair->key, pair->value, &ignore_outgoing, 1) < 0)
return -1;
continue;
}
+#endif
}
if (framesize > blocksize) {
next prev parent reply other threads:[~2026-11-08 16:22 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 14:27 [PATCH] net/af_packet: fix build with old kernel headers Bing Zhao
2026-11-06 14:46 ` Thomas Monjalon
2026-11-06 16:06 ` Frank Dressler
2026-11-07 11:11 ` Frank Dressler
2026-11-08 16:22 ` Stephen Hemminger [this message]
2026-11-08 18:51 ` Frank Dressler
2026-11-08 20:29 ` Stephen Hemminger
2026-11-09 15:47 ` [PATCH v2] " Bing Zhao
2026-11-09 17:47 ` Stephen Hemminger
2026-11-10 10:39 ` Thomas Monjalon
2026-11-10 12:52 ` Frank Dressler
2026-11-10 13:56 ` Thomas Monjalon
2026-11-10 14:23 ` Frank Dressler
2026-11-10 16:51 ` Stephen Hemminger
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=20261108082211.1f190f4b@phoenix.local \
--to=stephen@networkplumber.org \
--cc=bingz@nvidia.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=frank@dressler.pro \
--cc=ktraynor@redhat.com \
--cc=thomas@monjalon.net \
/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