Message ID | 20251015023239.2742022-1-guocai.he.cn@windriver.com |
---|---|
State | New |
Headers | show |
Series | [meta-oe,kirkstone,V2] libnet: backport patch to remove configure time SOCK_PACKET check | expand |
Thank you so much for the correction. Just for your information, your first version was included in a previous merge, and is a part of Kirkstone[1]. [1]: https://git.openembedded.org/meta-openembedded/commit/meta-oe/recipes-connectivity/libnet?h=kirkstone&id=12824411988d10737a840a97336e1ba7c8e4f525 On 10/15/25 04:32, guocai.he.cn@windriver.com wrote: > From: Guocai He <guocai.he.cn@windriver.com> > > Backport [1] to fix the do_configure error like below: > > checking for packet socket (PF_PACKET)... ./pf_packet-test: > /lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.34' not found > > [1] https://github.com/libnet/libnet/commit/19979c4541ddcc817c64ea911a309ee71a8cc250 > > Signed-off-by: Qi Chen <Qi.Chen@windriver.com> > Signed-off-by: Guocai He <guocai.he.cn@windriver.com> > --- > V2: > Correct the mail client's settings about charset > --- > ...move-support-for-SOCK_PACKET-sockets.patch | 251 ++++++++++++++++++ > .../libnet/libnet_1.2-rc3.bb | 1 + > 2 files changed, 252 insertions(+) > create mode 100644 meta-oe/recipes-connectivity/libnet/libnet/0001-Remove-support-for-SOCK_PACKET-sockets.patch > > diff --git a/meta-oe/recipes-connectivity/libnet/libnet/0001-Remove-support-for-SOCK_PACKET-sockets.patch b/meta-oe/recipes-connectivity/libnet/libnet/0001-Remove-support-for-SOCK_PACKET-sockets.patch > new file mode 100644 > index 0000000000..2fc7ecd180 > --- /dev/null > +++ b/meta-oe/recipes-connectivity/libnet/libnet/0001-Remove-support-for-SOCK_PACKET-sockets.patch > @@ -0,0 +1,251 @@ > +From dd77c43a9773edb895bfe9074315e83a19cac471 Mon Sep 17 00:00:00 2001 > +From: Guocai He <guocai.he.cn@windriver.com> > +Date: Tue, 26 Aug 2025 06:15:41 +0000 > +Subject: [PATCH] Remove support for SOCK_PACKET sockets > +MIME-Version: 1.0 > +Content-Type: text/plain; charset=UTF-8 > +Content-Transfer-Encoding: 8bit > + > +The current code has a build-time check to verify that PF_PACKET sockets > +are supported on Linux systems and if not, fallback on SOCK_PACKET sockets. > + > +The test implementation relies on FTM (Feature Test Macros) to detect > +glibc and its version to include correct headers. > +But, some libc such as the musl libc do not have such macros, making the > +test program compilation fail and libnet fallback on SOCK_PACKET. > + > +Since PF_PACKET support is present in kernel for more than 20 years now, > +the simplest solution and safe choice is to just drop support for > +SOCK_PACKET and assume PF_PACKET is always available on any Linux system. > + > +Signed-off-by: Hervé Boisse <admin@netgeek.ovh> > + > +Upstream-Status: Backport [19979c4541ddcc817c64ea911a309ee71a8cc250] > + > +Signed-off-by: Chen Qi <Qi.Chen@windriver.com> > +Signed-off-by: Guocai He <guocai.he.cn@windriver.com> > +--- > + acinclude.m4 | 87 ----------------------------------------- > + configure.ac | 3 -- > + src/libnet_link_linux.c | 19 +-------- > + win32/config.h | 1 - > + 4 files changed, 1 insertion(+), 109 deletions(-) > + > +diff --git a/acinclude.m4 b/acinclude.m4 > +index 064b582..f8ab967 100644 > +--- a/acinclude.m4 > ++++ b/acinclude.m4 > +@@ -25,93 +25,6 @@ AC_DEFUN([AC_LIBNET_LINUX_PROCFS], > + [Define if you have the Linux /proc filesystem.]) > + fi]) > + > +-dnl > +-dnl Checks to see if this linux kernel has a working PF_PACKET > +-dnl > +-dnl usage: > +-dnl > +-dnl AC_LIBNET_CHECK_PF_PACKET > +-dnl > +-dnl results: > +-dnl > +-dnl HAVE_PACKET_SOCKET (DEFINED) > +-dnl > +- > +-AC_DEFUN([AC_LIBNET_CHECK_PF_PACKET], > +-[ > +- AC_MSG_CHECKING(for packet socket (PF_PACKET)) > +- AC_CACHE_VAL(libnet_cv_have_packet_socket, > +- > +- [ > +- cat > pf_packet-test.c << EOF > +-#include <stdio.h> > +-#include <errno.h> > +-#include <stdlib.h> > +-#include <netinet/in.h> > +-#include <sys/socket.h> > +-#include <features.h> /* for the glibc version number */ > +-#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1 > +-#include <netpacket/packet.h> > +-#include <net/ethernet.h> /* the L2 protocols */ > +-#else > +-#include <asm/types.h> > +-#include <linux/if_packet.h> > +-#include <linux/if_ether.h> /* The L2 protocols */ > +-#endif > +- > +-#ifndef SOL_PACKET > +-#define SOL_PACKET 263 > +-#endif /* SOL_PACKET */ > +- > +-int > +-main(int argc, char **argv) > +-{ > +- int fd; > +- > +- fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); > +- if (fd == -1) > +- { > +- if (errno == EPERM) > +- { > +- /* user's UID != 0 */ > +- printf("probably"); > +- exit (EXIT_FAILURE); > +- } > +- printf("no"); > +- exit (EXIT_FAILURE); > +- } > +- printf("yes"); > +- exit (EXIT_SUCCESS); > +-} > +-EOF > +- ${CC-cc} -o pf_packet-test $CFLAGS pf_packet-test.c >/dev/null 2>&1 > +- > +- # Oopz 4.3 BSD doesn't have this. Sorry. > +- if test ! -x ./pf_packet-test ; then > +- libnet_cv_have_packet_socket=choked > +- else > +- libnet_cv_have_packet_socket=`./pf_packet-test`; > +- fi > +- if test $libnet_cv_have_packet_socket = choked; then > +- AC_MSG_RESULT(test program compile choked... assuming no) > +- elif test $libnet_cv_have_packet_socket = yes; then > +- AC_MSG_RESULT(yes) > +- elif test $libnet_cv_have_packet_socket = probably; then > +- AC_MSG_RESULT(test program got EPERM... assuming yes) > +- elif test $libnet_cv_have_packet_socket = no; then > +- AC_MSG_RESULT(no) > +- fi > +- > +- rm -f pf_packet-test* core core.pf_packet-test > +- > +- ]) > +- > +- if test $libnet_cv_have_packet_socket = yes -o $libnet_cv_have_packet_socket = probably; then > +- AC_DEFINE(HAVE_PACKET_SOCKET, 1, > +- [Define if we're running on a Linux system with PF_PACKET sockets.]) > +- fi > +-]) > +- > + dnl > + dnl Looks for a previous libnet version and attempts to determine which verion > + dnl it is. Version 0.8 was the first version that actually knew internally > +diff --git a/configure.ac b/configure.ac > +index 4751f62..ad002b9 100644 > +--- a/configure.ac > ++++ b/configure.ac > +@@ -51,7 +51,6 @@ AC_LIBNET_ENDIAN_CHECK > + dnl AC_LBL_LIBRARY_NET > + > + AC_SUBST(ENDIANESS) > +-AC_SUBST(HAVE_PACKET_SOCKET) > + AC_SUBST(ADDITIONAL_LIBS) > + AC_SUBST(LIBNET_CONFIG_DEFINES) > + AC_SUBST(LIBNET_CONFIG_LIBS) > +@@ -87,7 +86,6 @@ if test -n "${with_link_layer}"; then > + snoop) AC_LIBOBJ([libnet_link_snoop]) ;; > + dlpi) AC_LIBOBJ([libnet_link_dlpi]) ;; > + linux) AC_LIBOBJ([libnet_link_linux]) > +- AC_LIBNET_CHECK_PF_PACKET > + AC_LIBNET_LINUX_PROCFS ;; > + none) AC_LIBOBJ([libnet_link_none]) ;; > + *) AC_MSG_ERROR([Invalid link type "${with_link_layer}"]) ;; > +@@ -115,7 +113,6 @@ elif test "${ac_cv_header_sys_dlpi_h}" = "yes" ; then > + elif test "${ac_cv_header_linux_socket_h}" = "yes" ; then > + AC_LIBOBJ([libnet_link_linux]) > + AC_MSG_RESULT(found link layer linux) > +- AC_LIBNET_CHECK_PF_PACKET > + AC_LIBNET_LINUX_PROCFS > + elif test "${cross_compiling}" != "yes" -a -c /dev/bpf0 ; then # check again in case not readable > + AC_LIBOBJ([libnet_link_bpf]) > +diff --git a/src/libnet_link_linux.c b/src/libnet_link_linux.c > +index 3c6df3c..1dd2a42 100644 > +--- a/src/libnet_link_linux.c > ++++ b/src/libnet_link_linux.c > +@@ -33,13 +33,11 @@ > + #include <netinet/if_ether.h> > + #include <net/if_arp.h> > + > +-#if (HAVE_PACKET_SOCKET) > + #ifndef SOL_PACKET > + #define SOL_PACKET 263 > + #endif /* SOL_PACKET */ > + #include <netpacket/packet.h> > + #include <net/ethernet.h> /* the L2 protocols */ > +-#endif /* HAVE_PACKET_SOCKET */ > + > + #include "../include/libnet.h" > + > +@@ -69,11 +67,8 @@ libnet_open_link(libnet_t *l) > + return (-1); > + } > + > +-#if (HAVE_PACKET_SOCKET) > + l->fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); > +-#else > +- l->fd = socket(PF_INET, SOCK_PACKET, htons(ETH_P_ALL)); > +-#endif > ++ > + if (l->fd == -1) > + { > + if (errno == EPERM) { > +@@ -177,7 +172,6 @@ libnet_close_link(libnet_t *l) > + } > + > + > +-#if (HAVE_PACKET_SOCKET) > + static int > + get_iface_index(int fd, const char *device) > + { > +@@ -194,18 +188,12 @@ get_iface_index(int fd, const char *device) > + > + return ifr.ifr_ifindex; > + } > +-#endif > +- > + > + int > + libnet_write_link(libnet_t *l, const uint8_t *packet, uint32_t size) > + { > + int c; > +-#if (HAVE_PACKET_SOCKET) > + struct sockaddr_ll sa; > +-#else > +- struct sockaddr sa; > +-#endif > + > + if (l == NULL) > + { > +@@ -213,7 +201,6 @@ libnet_write_link(libnet_t *l, const uint8_t *packet, uint32_t size) > + } > + > + memset(&sa, 0, sizeof (sa)); > +-#if (HAVE_PACKET_SOCKET) > + sa.sll_family = AF_PACKET; > + sa.sll_ifindex = get_iface_index(l->fd, l->device); > + if (sa.sll_ifindex == -1) > +@@ -221,10 +208,6 @@ libnet_write_link(libnet_t *l, const uint8_t *packet, uint32_t size) > + return (-1); > + } > + sa.sll_protocol = htons(ETH_P_ALL); > +-#else > +- strncpy(sa.sa_data, l->device, sizeof (sa.sa_data) - 1); > +- sa.sa_data[sizeof (sa.sa_data) - 1] = 0; > +-#endif > + > + c = sendto(l->fd, packet, size, 0, > + (struct sockaddr *)&sa, sizeof (sa)); > +diff --git a/win32/config.h b/win32/config.h > +index 926f12f..12e1ee7 100644 > +--- a/win32/config.h > ++++ b/win32/config.h > +@@ -11,7 +11,6 @@ > + #undef HAVE_HPUX11 > + #undef HAVE_SOCKADDR_SA_LEN > + #undef HAVE_DLPI > +-#undef HAVE_PACKET_SOCKET > + #undef HAVE_STRUCT_IP_CSUM > + #undef HAVE_LIB_PCAP > + #undef STUPID_SOLARIS_CHECKSUM_BUG > +-- > +2.35.5 > + > diff --git a/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb b/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb > index 785abf66d6..5e35fc3391 100644 > --- a/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb > +++ b/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb > @@ -10,6 +10,7 @@ PROVIDES = "libnet-1.2rc2" > > SRC_URI = "${SOURCEFORGE_MIRROR}/libnet-dev/${BPN}-${PV}.tar.gz \ > file://0001-Support-musl-libc-remove-support-for-glibc-2.1.patch \ > + file://0001-Remove-support-for-SOCK_PACKET-sockets.patch \ > " > > SRC_URI[md5sum] = "f051e6e5bdecddb90f77c701c2ca1804"
diff --git a/meta-oe/recipes-connectivity/libnet/libnet/0001-Remove-support-for-SOCK_PACKET-sockets.patch b/meta-oe/recipes-connectivity/libnet/libnet/0001-Remove-support-for-SOCK_PACKET-sockets.patch new file mode 100644 index 0000000000..2fc7ecd180 --- /dev/null +++ b/meta-oe/recipes-connectivity/libnet/libnet/0001-Remove-support-for-SOCK_PACKET-sockets.patch @@ -0,0 +1,251 @@ +From dd77c43a9773edb895bfe9074315e83a19cac471 Mon Sep 17 00:00:00 2001 +From: Guocai He <guocai.he.cn@windriver.com> +Date: Tue, 26 Aug 2025 06:15:41 +0000 +Subject: [PATCH] Remove support for SOCK_PACKET sockets +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The current code has a build-time check to verify that PF_PACKET sockets +are supported on Linux systems and if not, fallback on SOCK_PACKET sockets. + +The test implementation relies on FTM (Feature Test Macros) to detect +glibc and its version to include correct headers. +But, some libc such as the musl libc do not have such macros, making the +test program compilation fail and libnet fallback on SOCK_PACKET. + +Since PF_PACKET support is present in kernel for more than 20 years now, +the simplest solution and safe choice is to just drop support for +SOCK_PACKET and assume PF_PACKET is always available on any Linux system. + +Signed-off-by: Hervé Boisse <admin@netgeek.ovh> + +Upstream-Status: Backport [19979c4541ddcc817c64ea911a309ee71a8cc250] + +Signed-off-by: Chen Qi <Qi.Chen@windriver.com> +Signed-off-by: Guocai He <guocai.he.cn@windriver.com> +--- + acinclude.m4 | 87 ----------------------------------------- + configure.ac | 3 -- + src/libnet_link_linux.c | 19 +-------- + win32/config.h | 1 - + 4 files changed, 1 insertion(+), 109 deletions(-) + +diff --git a/acinclude.m4 b/acinclude.m4 +index 064b582..f8ab967 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -25,93 +25,6 @@ AC_DEFUN([AC_LIBNET_LINUX_PROCFS], + [Define if you have the Linux /proc filesystem.]) + fi]) + +-dnl +-dnl Checks to see if this linux kernel has a working PF_PACKET +-dnl +-dnl usage: +-dnl +-dnl AC_LIBNET_CHECK_PF_PACKET +-dnl +-dnl results: +-dnl +-dnl HAVE_PACKET_SOCKET (DEFINED) +-dnl +- +-AC_DEFUN([AC_LIBNET_CHECK_PF_PACKET], +-[ +- AC_MSG_CHECKING(for packet socket (PF_PACKET)) +- AC_CACHE_VAL(libnet_cv_have_packet_socket, +- +- [ +- cat > pf_packet-test.c << EOF +-#include <stdio.h> +-#include <errno.h> +-#include <stdlib.h> +-#include <netinet/in.h> +-#include <sys/socket.h> +-#include <features.h> /* for the glibc version number */ +-#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1 +-#include <netpacket/packet.h> +-#include <net/ethernet.h> /* the L2 protocols */ +-#else +-#include <asm/types.h> +-#include <linux/if_packet.h> +-#include <linux/if_ether.h> /* The L2 protocols */ +-#endif +- +-#ifndef SOL_PACKET +-#define SOL_PACKET 263 +-#endif /* SOL_PACKET */ +- +-int +-main(int argc, char **argv) +-{ +- int fd; +- +- fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); +- if (fd == -1) +- { +- if (errno == EPERM) +- { +- /* user's UID != 0 */ +- printf("probably"); +- exit (EXIT_FAILURE); +- } +- printf("no"); +- exit (EXIT_FAILURE); +- } +- printf("yes"); +- exit (EXIT_SUCCESS); +-} +-EOF +- ${CC-cc} -o pf_packet-test $CFLAGS pf_packet-test.c >/dev/null 2>&1 +- +- # Oopz 4.3 BSD doesn't have this. Sorry. +- if test ! -x ./pf_packet-test ; then +- libnet_cv_have_packet_socket=choked +- else +- libnet_cv_have_packet_socket=`./pf_packet-test`; +- fi +- if test $libnet_cv_have_packet_socket = choked; then +- AC_MSG_RESULT(test program compile choked... assuming no) +- elif test $libnet_cv_have_packet_socket = yes; then +- AC_MSG_RESULT(yes) +- elif test $libnet_cv_have_packet_socket = probably; then +- AC_MSG_RESULT(test program got EPERM... assuming yes) +- elif test $libnet_cv_have_packet_socket = no; then +- AC_MSG_RESULT(no) +- fi +- +- rm -f pf_packet-test* core core.pf_packet-test +- +- ]) +- +- if test $libnet_cv_have_packet_socket = yes -o $libnet_cv_have_packet_socket = probably; then +- AC_DEFINE(HAVE_PACKET_SOCKET, 1, +- [Define if we're running on a Linux system with PF_PACKET sockets.]) +- fi +-]) +- + dnl + dnl Looks for a previous libnet version and attempts to determine which verion + dnl it is. Version 0.8 was the first version that actually knew internally +diff --git a/configure.ac b/configure.ac +index 4751f62..ad002b9 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -51,7 +51,6 @@ AC_LIBNET_ENDIAN_CHECK + dnl AC_LBL_LIBRARY_NET + + AC_SUBST(ENDIANESS) +-AC_SUBST(HAVE_PACKET_SOCKET) + AC_SUBST(ADDITIONAL_LIBS) + AC_SUBST(LIBNET_CONFIG_DEFINES) + AC_SUBST(LIBNET_CONFIG_LIBS) +@@ -87,7 +86,6 @@ if test -n "${with_link_layer}"; then + snoop) AC_LIBOBJ([libnet_link_snoop]) ;; + dlpi) AC_LIBOBJ([libnet_link_dlpi]) ;; + linux) AC_LIBOBJ([libnet_link_linux]) +- AC_LIBNET_CHECK_PF_PACKET + AC_LIBNET_LINUX_PROCFS ;; + none) AC_LIBOBJ([libnet_link_none]) ;; + *) AC_MSG_ERROR([Invalid link type "${with_link_layer}"]) ;; +@@ -115,7 +113,6 @@ elif test "${ac_cv_header_sys_dlpi_h}" = "yes" ; then + elif test "${ac_cv_header_linux_socket_h}" = "yes" ; then + AC_LIBOBJ([libnet_link_linux]) + AC_MSG_RESULT(found link layer linux) +- AC_LIBNET_CHECK_PF_PACKET + AC_LIBNET_LINUX_PROCFS + elif test "${cross_compiling}" != "yes" -a -c /dev/bpf0 ; then # check again in case not readable + AC_LIBOBJ([libnet_link_bpf]) +diff --git a/src/libnet_link_linux.c b/src/libnet_link_linux.c +index 3c6df3c..1dd2a42 100644 +--- a/src/libnet_link_linux.c ++++ b/src/libnet_link_linux.c +@@ -33,13 +33,11 @@ + #include <netinet/if_ether.h> + #include <net/if_arp.h> + +-#if (HAVE_PACKET_SOCKET) + #ifndef SOL_PACKET + #define SOL_PACKET 263 + #endif /* SOL_PACKET */ + #include <netpacket/packet.h> + #include <net/ethernet.h> /* the L2 protocols */ +-#endif /* HAVE_PACKET_SOCKET */ + + #include "../include/libnet.h" + +@@ -69,11 +67,8 @@ libnet_open_link(libnet_t *l) + return (-1); + } + +-#if (HAVE_PACKET_SOCKET) + l->fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); +-#else +- l->fd = socket(PF_INET, SOCK_PACKET, htons(ETH_P_ALL)); +-#endif ++ + if (l->fd == -1) + { + if (errno == EPERM) { +@@ -177,7 +172,6 @@ libnet_close_link(libnet_t *l) + } + + +-#if (HAVE_PACKET_SOCKET) + static int + get_iface_index(int fd, const char *device) + { +@@ -194,18 +188,12 @@ get_iface_index(int fd, const char *device) + + return ifr.ifr_ifindex; + } +-#endif +- + + int + libnet_write_link(libnet_t *l, const uint8_t *packet, uint32_t size) + { + int c; +-#if (HAVE_PACKET_SOCKET) + struct sockaddr_ll sa; +-#else +- struct sockaddr sa; +-#endif + + if (l == NULL) + { +@@ -213,7 +201,6 @@ libnet_write_link(libnet_t *l, const uint8_t *packet, uint32_t size) + } + + memset(&sa, 0, sizeof (sa)); +-#if (HAVE_PACKET_SOCKET) + sa.sll_family = AF_PACKET; + sa.sll_ifindex = get_iface_index(l->fd, l->device); + if (sa.sll_ifindex == -1) +@@ -221,10 +208,6 @@ libnet_write_link(libnet_t *l, const uint8_t *packet, uint32_t size) + return (-1); + } + sa.sll_protocol = htons(ETH_P_ALL); +-#else +- strncpy(sa.sa_data, l->device, sizeof (sa.sa_data) - 1); +- sa.sa_data[sizeof (sa.sa_data) - 1] = 0; +-#endif + + c = sendto(l->fd, packet, size, 0, + (struct sockaddr *)&sa, sizeof (sa)); +diff --git a/win32/config.h b/win32/config.h +index 926f12f..12e1ee7 100644 +--- a/win32/config.h ++++ b/win32/config.h +@@ -11,7 +11,6 @@ + #undef HAVE_HPUX11 + #undef HAVE_SOCKADDR_SA_LEN + #undef HAVE_DLPI +-#undef HAVE_PACKET_SOCKET + #undef HAVE_STRUCT_IP_CSUM + #undef HAVE_LIB_PCAP + #undef STUPID_SOLARIS_CHECKSUM_BUG +-- +2.35.5 + diff --git a/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb b/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb index 785abf66d6..5e35fc3391 100644 --- a/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb +++ b/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb @@ -10,6 +10,7 @@ PROVIDES = "libnet-1.2rc2" SRC_URI = "${SOURCEFORGE_MIRROR}/libnet-dev/${BPN}-${PV}.tar.gz \ file://0001-Support-musl-libc-remove-support-for-glibc-2.1.patch \ + file://0001-Remove-support-for-SOCK_PACKET-sockets.patch \ " SRC_URI[md5sum] = "f051e6e5bdecddb90f77c701c2ca1804"