summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2024-06-26 20:18:59 +0200
committerGitHub <noreply@github.com>2024-06-26 20:18:59 +0200
commit679c474e22373d0801459c57fcde8c8c298fe21d (patch)
tree1b82f8594d824a0695d7a557e0da570137049117
parent621dd08a7c3bb0972ec176be1bb8397d06717e52 (diff)
parentb9fb91699b9af7a8ea375d4662a50363004eacfd (diff)
downloadvyos-1x-679c474e22373d0801459c57fcde8c8c298fe21d.tar.gz
vyos-1x-679c474e22373d0801459c57fcde8c8c298fe21d.zip
Merge pull request #3725 from vyos/mergify/bp/sagitta/pr-3724
interfaces: T6519: harden config migration if ethernet interface is missing (backport #3724)
-rw-r--r--python/vyos/ethtool.py4
-rwxr-xr-xsrc/migration-scripts/interfaces/20-to-217
2 files changed, 10 insertions, 1 deletions
diff --git a/python/vyos/ethtool.py b/python/vyos/ethtool.py
index d45c9c272..80bb56fa2 100644
--- a/python/vyos/ethtool.py
+++ b/python/vyos/ethtool.py
@@ -16,6 +16,7 @@
import re
from json import loads
+from vyos.utils.network import interface_exists
from vyos.utils.process import popen
# These drivers do not support using ethtool to change the speed, duplex, or
@@ -64,6 +65,9 @@ class Ethtool:
def __init__(self, ifname):
# Get driver used for interface
+ if not interface_exists(ifname):
+ raise ValueError(f'Interface "{ifname}" does not exist!')
+
out, _ = popen(f'ethtool --driver {ifname}')
driver = re.search(r'driver:\s(\w+)', out)
if driver:
diff --git a/src/migration-scripts/interfaces/20-to-21 b/src/migration-scripts/interfaces/20-to-21
index 14ad0fe4d..05a0c7237 100755
--- a/src/migration-scripts/interfaces/20-to-21
+++ b/src/migration-scripts/interfaces/20-to-21
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (C) 2021 VyOS maintainers and contributors
+# Copyright (C) 2021-2024 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
@@ -22,6 +22,7 @@ from sys import argv
from vyos.ethtool import Ethtool
from vyos.configtree import ConfigTree
+from vyos.utils.network import interface_exists
if len(argv) < 2:
print("Must specify file name!")
@@ -38,6 +39,10 @@ if not config.exists(base):
exit(0)
for ifname in config.list_nodes(base):
+ # Bail out early if interface vanished from system
+ if not interface_exists(ifname):
+ continue
+
eth = Ethtool(ifname)
# If GRO is enabled by the Kernel - we reflect this on the CLI. If GRO is