libpfring: update to 9.2.0

Bump to 9.2.0 and swtich from git build to tagged tarball.

Added the following patches:
900-Fix-Compilation-on-kernel-6.17.patch (backport)
901-pf_ring-fix-virt_to_page-type-mismatch.patch (pending backport)[1,2]

Removed all upstreamed patches and removed MAINTAINER as no one is
maintaining this pkg. Note that this version is needed in order to
build against linux 6.18.

1. Suggested by CI co-pilot to prevent failure builds for ARM targets
   including: arm_cortex9_vfpv3-d16, arm_cortex-a15_neon-vfpv4,
   powerpc_464fp, and powerpc_8548.

2. https://github.com/ntop/PF_RING/pull/1010

Signed-off-by: John Audia <therealgraysky@proton.me>
This commit is contained in:
John Audia
2025-12-19 16:52:44 -05:00
committed by Hannu Nyman
parent c410b89632
commit cc4309d44f
10 changed files with 127 additions and 255 deletions

View File

@@ -9,15 +9,13 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=libpfring
PKG_VERSION:=8.6.1
PKG_RELEASE:=2
PKG_VERSION:=9.2.0
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=$(PKG_VERSION)
PKG_SOURCE_URL:=https://github.com/ntop/PF_RING
PKG_MIRROR_HASH:=2c4623e4a3cd601a94cfdaf748e0cd7aa93e8ec850d3cd4c2ec5d33419e45fbb
PKG_MAINTAINER:=Banglang Huang <banglang.huang@foxmail.com>
PKG_SOURCE:=$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/ntop/PF_RING/tar.gz/$(PKG_VERSION)?
PKG_HASH:=4352ec1f0913999a8dc75e064a294bc84c2ea24deca02cf7acc7a3a0fc0189f0
PKG_BUILD_DIR:=$(BUILD_DIR)/PF_RING-$(PKG_VERSION)
PKG_FIXUP:=patch-libtool
PKG_INSTALL:=1

View File

@@ -1,32 +1,43 @@
--- a/userland/configure
+++ b/userland/configure
@@ -3873,12 +3873,6 @@ $as_echo "no" >&6; }
@@ -3942,13 +3942,6 @@ printf "%s\n" "no" >&6; }
if test "$IS_FREEBSD" != "1" && test "$cross_compiling" != "yes" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if r/w locks are supported" >&5
$as_echo_n "checking if r/w locks are supported... " >&6; }
- if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if r/w locks are supported" >&5
printf %s "checking if r/w locks are supported... " >&6; }
- if test "$cross_compiling" = yes
-then :
- { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
-See \`config.log' for more details" "$LINENO" 5; }
-else
-else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -3891,7 +3885,7 @@ else
@@ -3961,8 +3954,6 @@ else $as_nop
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
cat >>confdefs.h <<_ACEOF
@@ -3905,7 +3899,6 @@ $as_echo "no" >&6; }
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-if ac_fn_c_try_run "$LINENO"
-then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_RW_LOCK 1" >>confdefs.h
@@ -3978,8 +3969,6 @@ fi
fi
- fi
-
MOD_FIBERBLAZE_LIB="libs/libpfring_fiberblaze_$MACHINE$LIBARCH.a"
if test -f "lib/$MOD_FIBERBLAZE_LIB"; then
FIBERBLAZE_LIB="-lm -ldl"
@@ -4009,8 +3998,6 @@ printf "%s\n" "no" >&6; }
fi
fi
-fi
-
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking Mellanox support (x64 and aarch64)" >&5
printf %s "checking Mellanox support (x64 and aarch64)... " >&6; }
MOD_MLX_LIB="libs/libpfring_mlx_${MACHINE}${LIBARCH}.a"

View File

@@ -1,77 +0,0 @@
From 3b76a8ae22874b76759da9e188082138a9a03d41 Mon Sep 17 00:00:00 2001
From: Alfredo Cardigliano <cardigliano@ntop.org>
Date: Tue, 30 Apr 2024 09:30:24 +0000
Subject: [PATCH] Fix missing prototypes
---
kernel/pf_ring.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
--- a/kernel/pf_ring.c
+++ b/kernel/pf_ring.c
@@ -443,6 +443,65 @@ MODULE_PARM_DESC(transparent_mode,
/* ********************************** */
+u_int32_t get_num_rx_queues(struct net_device *dev);
+u_int32_t lock_rss_queues(struct net_device *dev);
+pf_ring_net *netns_lookup(struct net *net);
+pf_ring_net *netns_add(struct net *net);
+pf_ring_device *pf_ring_device_ifindex_lookup(struct net *net, int ifindex);
+pf_ring_device *pf_ring_device_name_lookup(struct net *net /* namespace */, char *name);
+int check_perfect_rules(struct sk_buff *skb,
+ struct pf_ring_socket *pfr,
+ struct pfring_pkthdr *hdr,
+ int *fwd_pkt,
+ int displ,
+ sw_filtering_hash_bucket **p_hash_bucket);
+int check_wildcard_rules(struct sk_buff *skb,
+ struct pf_ring_socket *pfr,
+ struct pfring_pkthdr *hdr,
+ int *fwd_pkt,
+ int displ);
+int bpf_filter_skb(struct sk_buff *skb,
+ struct pf_ring_socket *pfr,
+ int displ);
+int sample_packet(struct pf_ring_socket *pfr);
+u_int32_t default_rehash_rss_func(struct sk_buff *skb, struct pfring_pkthdr *hdr);
+void set_ring_num_channels(struct pf_ring_socket *pfr, u_int32_t num_rx_channels);
+void register_device_handler(void);
+void unregister_device_handler(void);
+void reserve_memory(unsigned long base, unsigned long mem_len);
+void unreserve_memory(unsigned long base, unsigned long mem_len);
+unsigned int ring_poll(struct file *file,
+ struct socket *sock, poll_table *wait);
+ring_cluster_element *cluster_lookup(u_int32_t cluster_id);
+int get_first_available_cluster_queue(ring_cluster_element *el);
+struct pf_ring_socket *get_first_cluster_consumer(ring_cluster_element *el);
+int add_sock_to_cluster_list(ring_cluster_element *el, struct sock *sk, u_int16_t consumer_id);
+int remove_from_cluster_list(struct ring_cluster *cluster_ptr, struct sock *sock);
+int setSocketStats(struct pf_ring_socket *pfr);
+void pf_ring_zc_dev_register(zc_dev_callbacks *callbacks,
+ zc_dev_ring_info *rx_info,
+ zc_dev_ring_info *tx_info,
+ void *rx_descr_packet_memory,
+ void *tx_descr_packet_memory,
+ void *phys_card_memory,
+ u_int32_t phys_card_memory_len,
+ u_int32_t channel_id,
+ struct net_device *dev,
+ struct device *hwdev,
+ zc_dev_model device_model,
+ u_char *device_address,
+ wait_queue_head_t *packet_waitqueue,
+ u_int8_t *interrupt_received,
+ void *rx_adapter,
+ void *tx_adapter);
+void pf_ring_zc_dev_unregister(struct net_device *dev, u_int32_t channel_id);
+void remove_device_from_proc(pf_ring_net *netns, pf_ring_device *dev_ptr);
+void remove_device_from_ring_list(struct net_device *dev);
+void add_device_to_proc(pf_ring_net *netns, pf_ring_device *dev_ptr);
+int add_device_to_ring_list(struct net_device *dev, int32_t dev_index);
+
+/* ********************************** */
+
#define MIN_QUEUED_PKTS 64
#define MAX_QUEUE_LOOPS 64

View File

@@ -1,33 +0,0 @@
From f6d56c4a0cceffa0a3def7e32a0f7c470e86d652 Mon Sep 17 00:00:00 2001
From: Christian Marangi <ansuelsmth@gmail.com>
Date: Mon, 18 Aug 2025 17:12:50 +0200
Subject: [PATCH] kernel: pf_ring: fix old-style-declaration compilation
warning
New kernel linux from 6.12 enabled new compilation Warning and this
cause errors if -Werror is enabled.
There is currently one line that triggers the following warning:
pf_ring.c:284:1: error: 'static' is not at beginning of declaration [-Werror=old-style-declaration]
284 | const static ip_addr ip_zero = { IN6ADDR_ANY_INIT };
| ^~~~~
Implement the trivial fix to mute the warning.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
kernel/pf_ring.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/kernel/pf_ring.c
+++ b/kernel/pf_ring.c
@@ -269,7 +269,7 @@ static inline void printk_addr(u_int8_t
/* ************************************************* */
-const static ip_addr ip_zero = { IN6ADDR_ANY_INIT };
+static const ip_addr ip_zero = { IN6ADDR_ANY_INIT };
static u_int8_t pfring_enabled = 1;

View File

@@ -1,24 +0,0 @@
--- a/kernel/pf_ring.c
+++ b/kernel/pf_ring.c
@@ -4772,8 +4772,8 @@ void reserve_memory(unsigned long base,
{
struct page *page, *page_end;
- page_end = virt_to_page(base + mem_len - 1);
- for(page = virt_to_page(base); page <= page_end; page++)
+ page_end = virt_to_page((void*)base + mem_len - 1);
+ for(page = virt_to_page((void*)base); page <= page_end; page++)
SetPageReserved(page);
}
@@ -4781,8 +4781,8 @@ void unreserve_memory(unsigned long base
{
struct page *page, *page_end;
- page_end = virt_to_page(base + mem_len - 1);
- for(page = virt_to_page(base); page <= page_end; page++)
+ page_end = virt_to_page((void*)base + mem_len - 1);
+ for(page = virt_to_page((void*)base); page <= page_end; page++)
ClearPageReserved(page);
}

View File

@@ -1,6 +1,6 @@
--- a/kernel/pf_ring.c
+++ b/kernel/pf_ring.c
@@ -3962,7 +3962,7 @@ static int hash_pkt_cluster(ring_cluster
@@ -4079,7 +4079,7 @@ static int hash_pkt_cluster(ring_cluster
break;
}
/* else, fall through, because it's like 2-tuple for non-TCP packets */

View File

@@ -1,72 +0,0 @@
From 1b7780e9ecb46c6a5bbc8a831778a683f8ae80d8 Mon Sep 17 00:00:00 2001
From: Christian Marangi <ansuelsmth@gmail.com>
Date: Mon, 18 Mar 2024 10:03:43 +0100
Subject: [PATCH] kernel: pf_ring: better define sa_data size
pfring_mod_bind() needs to specify the interface
name using struct sockaddr that is defined as
struct sockaddr { ushort sa_family; char sa_data[14]; };
so the total interface name length is 13 chars (plus \0 trailer).
Since sa_data size is arbitrary, define a more precise size for
PF_RING socket use.
This fix some compilation error with fortify string and makes the array
handling more deterministic.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
kernel/pf_ring.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
--- a/kernel/pf_ring.c
+++ b/kernel/pf_ring.c
@@ -158,6 +158,18 @@
#endif
#endif
+/*
+ pfring_mod_bind() needs to specify the interface
+ name using struct sockaddr that is defined as
+
+ struct sockaddr { ushort sa_family; char sa_data[14]; };
+
+ so the total interface name length is 13 chars (plus \0 trailer).
+ Since sa_data size is arbitrary, define a more precise size for
+ PF_RING socket use.
+*/
+#define RING_SA_DATA_LEN 14
+
/* ************************************************* */
#if(LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0))
@@ -1091,7 +1103,7 @@ pf_ring_device *pf_ring_device_name_look
so the total interface name length is 13 chars (plus \0 trailer).
The check below is to trap this case.
*/
- || ((l >= 13) && (strncmp(dev_ptr->device_name, name, 13) == 0)))
+ || ((l >= RING_SA_DATA_LEN - 1) && (strncmp(dev_ptr->device_name, name, RING_SA_DATA_LEN - 1) == 0)))
&& device_net_eq(dev_ptr, net))
return dev_ptr;
}
@@ -5664,15 +5676,15 @@ static int ring_bind(struct socket *sock
#ifndef RING_USE_SOCKADDR_LL
} else if (addr_len == sizeof(struct sockaddr)) { /* Deprecated */
- char name[sizeof(sa->sa_data)+1];
+ char name[RING_SA_DATA_LEN];
if (sa->sa_family != PF_RING)
return(-EINVAL);
- memcpy(name, sa->sa_data, sizeof(sa->sa_data));
+ memcpy(name, sa->sa_data, RING_SA_DATA_LEN - 1);
/* Add trailing zero if missing */
- name[sizeof(name)-1] = '\0';
+ name[RING_SA_DATA_LEN-1] = '\0';
debug_printk(2, "searching device %s\n", name);

View File

@@ -1,22 +0,0 @@
From 5557b6ffe8d4eeb93532d043649b40eb10120bf7 Mon Sep 17 00:00:00 2001
From: Gavin <gavin.bravery@jagsiacs.co.uk>
Date: Wed, 25 Oct 2023 11:40:50 +0100
Subject: [PATCH] Update pf_ring.c
Change to remove .sendpage assignment, as that attribute seems to have gone away in 6.5.3 kernel.
---
kernel/pf_ring.c | 2 ++
1 file changed, 2 insertions(+)
--- a/kernel/pf_ring.c
+++ b/kernel/pf_ring.c
@@ -8529,7 +8529,9 @@ static struct proto_ops ring_ops = {
.getname = sock_no_getname,
.listen = sock_no_listen,
.shutdown = sock_no_shutdown,
+ #if(LINUX_VERSION_CODE < KERNEL_VERSION(6,5,3))
.sendpage = sock_no_sendpage,
+ #endif
/* Now the operations that really occur. */
.release = ring_release,

View File

@@ -0,0 +1,50 @@
From f6e8cb42a891ab3cf1eb2ecb52ae38a2af1096eb Mon Sep 17 00:00:00 2001
From: Alfredo Cardigliano <cardigliano@ntop.org>
Date: Mon, 22 Dec 2025 11:31:07 +0100
Subject: [PATCH] Fix compilation on kernel 6.17 (fix #1009)
---
kernel/pf_ring.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
--- a/kernel/pf_ring.c
+++ b/kernel/pf_ring.c
@@ -5468,7 +5468,12 @@ static int is_netdev_promisc(struct net_
debug_printk(1, "checking promisc for %s\n", netdev->name);
rtnl_lock();
+
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(6,17,0))
if_flags = (short) dev_get_flags(netdev);
+#else
+ if_flags = (short) netif_get_flags(netdev);
+#endif
rtnl_unlock();
return !!(if_flags & IFF_PROMISC);
@@ -5483,7 +5488,12 @@ static void set_netdev_promisc(struct ne
rtnl_lock();
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(6,17,0))
if_flags = (short) dev_get_flags(netdev);
+#else
+ if_flags = (short) netif_get_flags(netdev);
+#endif
+
if(!(if_flags & IFF_PROMISC)) {
if_flags |= IFF_PROMISC;
#if(LINUX_VERSION_CODE < KERNEL_VERSION(5,0,0) && \
@@ -5506,7 +5516,12 @@ static void unset_netdev_promisc(struct
rtnl_lock();
+#if(LINUX_VERSION_CODE < KERNEL_VERSION(6,17,0))
if_flags = (short) dev_get_flags(netdev);
+#else
+ if_flags = (short) netif_get_flags(netdev);
+#endif
+
if(if_flags & IFF_PROMISC) {
if_flags &= ~IFF_PROMISC;
#if(LINUX_VERSION_CODE < KERNEL_VERSION(5,0,0) && \

View File

@@ -0,0 +1,41 @@
From b5ab5d33461bcde40fc53820d7048def90ebc9b7 Mon Sep 17 00:00:00 2001
From: John Audia <therealgraysky@proton.me>
Date: Sat, 3 Jan 2026 05:11:32 -0500
Subject: [PATCH] pf_ring: fix virt_to_page() type mismatch
Cast base and end addresses to void * before calling virt_to_page().
This avoids integer-to-pointer warnings on newer toolchains and makes
the pointer semantics explicit.
This fixes build failures on the following ARM targets on OpenWrt:
arm_cortex{9_vfpv3-d16,a15_neon-vfpv4}, powerpc_{464fp,8548}.
Signed-off-by: John Audia <therealgraysky@proton.me>
---
kernel/pf_ring.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
--- a/kernel/pf_ring.c
+++ b/kernel/pf_ring.c
@@ -4927,8 +4927,8 @@ void reserve_memory(unsigned long base,
{
struct page *page, *page_end;
- page_end = virt_to_page(base + mem_len - 1);
- for(page = virt_to_page(base); page <= page_end; page++)
+ page_end = virt_to_page((void *)(base + mem_len - 1));
+ for(page = virt_to_page((void *)base); page <= page_end; page++)
SetPageReserved(page);
}
@@ -4936,8 +4936,8 @@ void unreserve_memory(unsigned long base
{
struct page *page, *page_end;
- page_end = virt_to_page(base + mem_len - 1);
- for(page = virt_to_page(base); page <= page_end; page++)
+ page_end = virt_to_page((void *)(base + mem_len - 1));
+ for(page = virt_to_page((void *)base); page <= page_end; page++)
ClearPageReserved(page);
}