mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-10-15 06:17:16 +00:00
python3-scapy: fix libpcap loading and ptests on musl
- ctypes.util.find_library() relies on "ldconfig -p", gcc or ld, none of
which exist on a musl target, so find_library("pcap") returns None
and scapy raises "Cannot find libpcap.so library" even with libpcap
installed. That disabled conf.use_pcap and BPF filter compilation and
failed ten ptests (offline sniff() with filters, tcpdump(), tdecode(),
traceroute). Fall back to loading libpcap.so.1/libpcap.so by name.
- The NetBSD read_routes6() test compares IPv4-compatible IPv6 prefixes
as strings, but musl's inet_ntop() prints ::127.0.0.0 as ::7f00:0.
Normalise the expected values with in6_ptop().
Tested with meta-networking-image-ptest-python3-scapy on qemux86-64
with yoe-musl-systemd-wayland: TOTAL: 1 FAIL: 0.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
This commit is contained in:
3 files changed
+91
No files matched your search
+52
@@ -0,0 +1,52 @@
|
||||
From 6ee4ddc1b53f792d4e2a7826d65cebeeb9d9eb79 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <khem.raj@oss.qualcomm.com>
|
||||
Date: Sun, 27 Sep 2026 15:54:57 -0700
|
||||
Subject: [PATCH 3/4] libpcap: load libpcap even when find_library() cannot
|
||||
locate it
|
||||
|
||||
ctypes.util.find_library() finds libraries through "ldconfig -p", gcc
|
||||
or ld. A target system may have none of them; on musl-based systems
|
||||
there is no ldconfig cache at all, so find_library("pcap") returns None
|
||||
even with libpcap installed, and scapy reports
|
||||
|
||||
OSError: Cannot find libpcap.so library
|
||||
|
||||
which disables conf.use_pcap and BPF filter compilation (sniff() with a
|
||||
filter, tcpdump(), tdecode(), ...). Fall back to loading libpcap.so.1 or
|
||||
libpcap.so by name and let the dynamic loader search its default paths.
|
||||
|
||||
Upstream-Status: Pending
|
||||
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
|
||||
---
|
||||
scapy/libs/winpcapy.py | 18 +++++++++++++++---
|
||||
1 file changed, 15 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/scapy/libs/winpcapy.py b/scapy/libs/winpcapy.py
|
||||
index 42bfa850..c537b22b 100644
|
||||
--- a/scapy/libs/winpcapy.py
|
||||
+++ b/scapy/libs/winpcapy.py
|
||||
@@ -36,9 +36,21 @@ else:
|
||||
# Try to load libpcap
|
||||
SOCKET = c_int
|
||||
_lib_name = find_library("pcap")
|
||||
- if not _lib_name:
|
||||
- raise OSError("Cannot find libpcap.so library")
|
||||
- _lib = CDLL(_lib_name)
|
||||
+ if _lib_name:
|
||||
+ _lib = CDLL(_lib_name)
|
||||
+ else:
|
||||
+ # ctypes.util.find_library() relies on ldconfig, gcc or ld to
|
||||
+ # locate libraries, none of which may exist on the target (e.g.
|
||||
+ # musl-based systems have no "ldconfig -p"). Fall back to letting
|
||||
+ # the dynamic loader search its default paths.
|
||||
+ for _lib_name in ("libpcap.so.1", "libpcap.so"):
|
||||
+ try:
|
||||
+ _lib = CDLL(_lib_name)
|
||||
+ break
|
||||
+ except OSError:
|
||||
+ pass
|
||||
+ else:
|
||||
+ raise OSError("Cannot find libpcap.so library")
|
||||
|
||||
|
||||
##
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
From 7602260f82f54cf9b179549c5b03866ec16f68d5 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <khem.raj@oss.qualcomm.com>
|
||||
Date: Sun, 27 Sep 2026 15:54:57 -0700
|
||||
Subject: [PATCH 4/4] test: don't depend on libc formatting of IPv4-compatible
|
||||
addresses
|
||||
|
||||
The NetBSD read_routes6() test compares route prefixes such as
|
||||
::127.0.0.0 as strings, but scapy formats them with the libc's
|
||||
inet_ntop(). glibc prints IPv4-compatible addresses in dotted form,
|
||||
while musl only does so for IPv4-mapped (::ffff:a.b.c.d) addresses and
|
||||
prints ::7f00:0, ::e000:0 and ::ff00:0, so the test fails on musl.
|
||||
Both forms denote the same address; normalise the expected values with
|
||||
in6_ptop() so they match whatever the libc produces.
|
||||
|
||||
Upstream-Status: Pending
|
||||
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
|
||||
---
|
||||
test/regression.uts | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/test/regression.uts b/test/regression.uts
|
||||
index 4c972fa1..b6bb9d6e 100644
|
||||
--- a/test/regression.uts
|
||||
+++ b/test/regression.uts
|
||||
@@ -3134,9 +3134,9 @@ assert routes == [
|
||||
('::', 104, '::1', 'lo0', ['::1'], 1),
|
||||
('::', 96, '::1', 'lo0', ['::1'], 1),
|
||||
('::1', 128, '::', 'lo0', ['::1'], 1),
|
||||
- ('::127.0.0.0', 104, '::1', 'lo0', ['::1'], 1),
|
||||
- ('::224.0.0.0', 100, '::1', 'lo0', ['::1'], 1),
|
||||
- ('::255.0.0.0', 104, '::1', 'lo0', ['::1'], 1),
|
||||
+ (in6_ptop('::127.0.0.0'), 104, '::1', 'lo0', ['::1'], 1),
|
||||
+ (in6_ptop('::224.0.0.0'), 100, '::1', 'lo0', ['::1'], 1),
|
||||
+ (in6_ptop('::255.0.0.0'), 104, '::1', 'lo0', ['::1'], 1),
|
||||
('::ffff:0.0.0.0', 96, '::1', 'lo0', ['::1'], 1),
|
||||
('2001:db8::', 32, '::1', 'lo0', ['::1'], 1),
|
||||
('2002::', 24, '::1', 'lo0', ['::1'], 1),
|
||||
@@ -20,6 +20,8 @@ SRCREV = "1de09fe85fe5c9d60ea5c6de130374e170b5bc28"
|
||||
SRC_URI = "git://github.com/secdev/scapy.git;branch=master;protocol=https;tag=v${PV} \
|
||||
file://0001-python3-scapy-skip-ICMP-regression-tests-in-ptest.patch \
|
||||
file://0002-main-initialize-banner-for-the-default-Python-shell.patch \
|
||||
file://0003-libpcap-load-libpcap-even-when-find_library-cannot-l.patch \
|
||||
file://0004-test-don-t-depend-on-libc-formatting-of-IPv4-compati.patch \
|
||||
file://run-ptest"
|
||||
|
||||
UPSTREAM_CHECK_COMMITS = "1"
|
||||
|
||||
Reference in new issue
Block a user