-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[scapy] update scapy to 2.4.5 and patch it (#10457)
Why I did it Running warm-reboot in a loop for 500 times leads to this error on 318-th iteration: Apr 2 15:56:27.346747 sonic INFO swss#/supervisord: restore_neighbors Traceback (most recent call last): Apr 2 15:56:27.346747 sonic INFO swss#/supervisord: restore_neighbors File "/usr/bin/restore_neighbors.py", line 24, in <module> Apr 2 15:56:27.346747 sonic INFO swss#/supervisord: restore_neighbors from scapy.all import conf, in6_getnsma, inet_pton, inet_ntop, in6_getnsmac, get_if_hwaddr, Ether, ARP, IPv6, ICMPv6ND_NS, ICMPv6NDOptSrcLLAddr Apr 2 15:56:27.346795 sonic INFO swss#/supervisord: restore_neighbors File "/usr/local/lib/python3.7/dist-packages/scapy/all.py", line 25, in <module> Apr 2 15:56:27.346956 sonic INFO swss#/supervisord: restore_neighbors from scapy.route import * Apr 2 15:56:27.346995 sonic INFO swss#/supervisord: restore_neighbors File "/usr/local/lib/python3.7/dist-packages/scapy/route.py", line 205, in <module> Apr 2 15:56:27.347089 sonic INFO swss#/supervisord: restore_neighbors conf.iface = get_working_if() Apr 2 15:56:27.347129 sonic INFO swss#/supervisord: restore_neighbors File "/usr/local/lib/python3.7/dist-packages/scapy/arch/linux.py", line 128, in get_working_if Apr 2 15:56:27.347213 sonic INFO swss#/supervisord: restore_neighbors ifflags = struct.unpack("16xH14x", get_if(i, SIOCGIFFLAGS))[0] Apr 2 15:56:27.347250 sonic INFO swss#/supervisord: restore_neighbors File "/usr/local/lib/python3.7/dist-packages/scapy/arch/common.py", line 31, in get_if Apr 2 15:56:27.347345 sonic INFO swss#/supervisord: restore_neighbors return ioctl(sck, cmd, struct.pack("16s16x", iff.encode("utf8"))) Apr 2 15:56:27.347365 sonic INFO swss#/supervisord: restore_neighbors OSError: [Errno 19] No such device The issue was reported to scapy devs secdev/scapy#3369, the fix is secdev/scapy#3371, however there is no released scapy version with this fix right now, thus decided to build scapy v2.4.5 from sources and apply the fix in a form of a patch. Signed-off-by: Stepan Blyschak <stepanb@nvidia.com>
- Loading branch information
1 parent
16717d2
commit 4426f77
Showing
9 changed files
with
101 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
SPATH := $($(SCAPY)_SRC_PATH) | ||
DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/scapy.mk rules/scapy.dep | ||
DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) | ||
SMDEP_FILES := $(addprefix $(SPATH)/,$(shell cd $(SPATH) && git ls-files -- ':!:doc/*')) | ||
|
||
$(SCAPY)_CACHE_MODE := GIT_CONTENT_SHA | ||
$(SCAPY)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) | ||
$(SCAPY)_DEP_FILES := $(DEP_FILES) | ||
$(SCAPY)_SMDEP_FILES := $(SMDEP_FILES) | ||
$(SCAPY)_SMDEP_PATHS := $(SPATH) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# scapy python3 wheel | ||
|
||
SCAPY = scapy-2.4.5-py2.py3-none-any.whl | ||
$(SCAPY)_SRC_PATH = $(SRC_PATH)/scapy | ||
$(SCAPY)_PYTHON_VERSION = 3 | ||
$(SCAPY)_TEST = n | ||
SONIC_PYTHON_WHEELS += $(SCAPY) |
27 changes: 27 additions & 0 deletions
27
src/scapy.patch/0001-Fix-version-string-generation-when-scapy-is-a-submod.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
From 988c808af6065b740006aef0e94496821d41fb98 Mon Sep 17 00:00:00 2001 | ||
From: Stepan Blyschak <stepanb@nvidia.com> | ||
Date: Mon, 4 Apr 2022 09:57:39 +0000 | ||
Subject: [PATCH] Fix version string generation when scapy is a submodule | ||
|
||
Signed-off-by: Stepan Blyschak <stepanb@nvidia.com> | ||
--- | ||
scapy/__init__.py | 3 --- | ||
1 file changed, 3 deletions(-) | ||
|
||
diff --git a/scapy/__init__.py b/scapy/__init__.py | ||
index f920151e..2adbea19 100644 | ||
--- a/scapy/__init__.py | ||
+++ b/scapy/__init__.py | ||
@@ -42,9 +42,6 @@ def _version_from_git_describe(): | ||
:raises CalledProcessError: if git is unavailable | ||
:return: Scapy's latest tag | ||
""" | ||
- if not os.path.isdir(os.path.join(os.path.dirname(_SCAPY_PKG_DIR), '.git')): # noqa: E501 | ||
- raise ValueError('not in scapy git repo') | ||
- | ||
def _git(cmd): | ||
# type: (str) -> str | ||
process = subprocess.Popen( | ||
-- | ||
2.14.1 | ||
|
42 changes: 42 additions & 0 deletions
42
src/scapy.patch/0002-Check-if-the-network-interface-still-exists.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
From 7ffd8101c1e535f9c3225db2c319958a64412686 Mon Sep 17 00:00:00 2001 | ||
From: Guillaume Valadon <guillaume@valadon.net> | ||
Date: Tue, 14 Sep 2021 19:34:43 +0200 | ||
Subject: [PATCH] Check if the network interface still exists | ||
|
||
Signed-off-by: Stepan Blyschak <stepanb@nvidia.com> | ||
--- | ||
scapy/arch/linux.py | 18 +++++++++++------- | ||
1 file changed, 11 insertions(+), 7 deletions(-) | ||
|
||
diff --git a/scapy/arch/linux.py b/scapy/arch/linux.py | ||
index 94fac8f0..b86e98ab 100644 | ||
--- a/scapy/arch/linux.py | ||
+++ b/scapy/arch/linux.py | ||
@@ -414,13 +414,17 @@ class LinuxInterfaceProvider(InterfaceProvider): | ||
data = {} | ||
ips = in6_getifaddr() | ||
for i in _get_if_list(): | ||
- ifflags = struct.unpack("16xH14x", get_if(i, SIOCGIFFLAGS))[0] | ||
- index = get_if_index(i) | ||
- mac = scapy.utils.str2mac( | ||
- get_if_raw_hwaddr(i, siocgifhwaddr=SIOCGIFHWADDR)[1] | ||
- ) | ||
- ip = None # type: Optional[str] | ||
- ip = inet_ntop(socket.AF_INET, get_if_raw_addr(i)) | ||
+ try: | ||
+ ifflags = struct.unpack("16xH14x", get_if(i, SIOCGIFFLAGS))[0] | ||
+ index = get_if_index(i) | ||
+ mac = scapy.utils.str2mac( | ||
+ get_if_raw_hwaddr(i, siocgifhwaddr=SIOCGIFHWADDR)[1] | ||
+ ) | ||
+ ip = None # type: Optional[str] | ||
+ ip = inet_ntop(socket.AF_INET, get_if_raw_addr(i)) | ||
+ except IOError: | ||
+ warning("Interface %s does not exist!", i) | ||
+ continue | ||
if ip == "0.0.0.0": | ||
ip = None | ||
ifflags = FlagValue(ifflags, _iff_flags) | ||
-- | ||
2.14.1 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
0001-Fix-version-string-generation-when-scapy-is-a-submod.patch | ||
0002-Check-if-the-network-interface-still-exists.patch |