summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@vyos.io>2026-03-24 15:26:26 +0000
committerGitHub <noreply@github.com>2026-03-24 15:26:26 +0000
commita9a75eb7dce077bceee1ae13dc943b05d8759925 (patch)
treedafec312330120450ba0de57b3f4ca51343178d1 /python
parentcb1b97548ce0cb51ee4445c2b1cdc375cd9b6121 (diff)
parent1b7b7a468cab0fd23fdeef0d0b76d9812d80980a (diff)
downloadvyos-1x-a9a75eb7dce077bceee1ae13dc943b05d8759925.tar.gz
vyos-1x-a9a75eb7dce077bceee1ae13dc943b05d8759925.zip
Merge pull request #5039 from natali-rs1985/T8355
vpp: T8355: Set MTU for vpp interfaces
Diffstat (limited to 'python')
-rw-r--r--python/vyos/ifconfig/vpp/bond.py6
-rw-r--r--python/vyos/ifconfig/vpp/gre.py6
-rw-r--r--python/vyos/ifconfig/vpp/interface.py22
-rw-r--r--python/vyos/ifconfig/vpp/ipip.py6
-rw-r--r--python/vyos/ifconfig/vpp/loopback.py5
-rw-r--r--python/vyos/ifconfig/vpp/vxlan.py5
-rw-r--r--python/vyos/utils/network.py25
-rw-r--r--python/vyos/vpp/control_vpp.py7
8 files changed, 60 insertions, 22 deletions
diff --git a/python/vyos/ifconfig/vpp/bond.py b/python/vyos/ifconfig/vpp/bond.py
index 75849a620..b3bcce449 100644
--- a/python/vyos/ifconfig/vpp/bond.py
+++ b/python/vyos/ifconfig/vpp/bond.py
@@ -143,10 +143,8 @@ class VPPBondInterface(Interface, VPPInterface):
for member in config.get('member', {}).get('interface', []):
self.add_member(interface=member)
- # Set rx-mode
- rx_mode = config.get('vpp_settings', {}).get('interface_rx_mode')
- if rx_mode:
- self.set_rx_mode(rx_mode)
+ # Apply VPP-specific interface settings
+ VPPInterface.update(self, config)
# Apply all settings to the lcp pair (kernel) interface
super().update(config)
diff --git a/python/vyos/ifconfig/vpp/gre.py b/python/vyos/ifconfig/vpp/gre.py
index 0cec5e3c9..4cdb27213 100644
--- a/python/vyos/ifconfig/vpp/gre.py
+++ b/python/vyos/ifconfig/vpp/gre.py
@@ -136,9 +136,7 @@ class VPPGREInterface(Interface, VPPInterface):
# Add gre interface
self.add_gre()
- # Set rx-mode
- rx_mode = config.get('vpp_settings', {}).get('interface_rx_mode')
- if rx_mode:
- self.set_rx_mode(rx_mode)
+ # Apply VPP-specific interface settings
+ VPPInterface.update(self, config)
super().update(config)
diff --git a/python/vyos/ifconfig/vpp/interface.py b/python/vyos/ifconfig/vpp/interface.py
index 1b87af4d2..17be83814 100644
--- a/python/vyos/ifconfig/vpp/interface.py
+++ b/python/vyos/ifconfig/vpp/interface.py
@@ -54,3 +54,25 @@ class VPPInterface:
lcp_name = lcp_pair.get('vpp_name_kernel')
if lcp_name:
self.vpp.iface_rxmode(lcp_name, rx_mode)
+
+ def set_mtu_vpp(self, mtu):
+ # Set MTU for the VPP interface
+ self.vpp.set_iface_mtu(self.vpp_ifname, mtu)
+
+ # Set MTU for the LCP pair interface
+ lcp_pair = self.vpp.lcp_pair_find(vpp_name_hw=self.vpp_ifname)
+ if lcp_pair:
+ lcp_name = lcp_pair.get('vpp_name_kernel')
+ if lcp_name:
+ self.vpp.set_iface_mtu(lcp_name, mtu)
+
+ def update(self, config):
+ # Set MTU
+ if 'mtu' in config:
+ mtu = int(config['mtu'])
+ self.set_mtu_vpp(mtu)
+
+ # Set rx-mode
+ rx_mode = config.get('vpp_settings', {}).get('interface_rx_mode')
+ if rx_mode:
+ self.set_rx_mode(rx_mode)
diff --git a/python/vyos/ifconfig/vpp/ipip.py b/python/vyos/ifconfig/vpp/ipip.py
index fff79fd43..4605cfa8f 100644
--- a/python/vyos/ifconfig/vpp/ipip.py
+++ b/python/vyos/ifconfig/vpp/ipip.py
@@ -100,10 +100,8 @@ class VPPIPIPInterface(Interface, VPPInterface):
# Add ipip interface
self.add_ipip()
- # Set rx-mode
- rx_mode = config.get('vpp_settings', {}).get('interface_rx_mode')
- if rx_mode:
- self.set_rx_mode(rx_mode)
+ # Apply VPP-specific interface settings
+ VPPInterface.update(self, config)
# Apply all settings to the lcp pair (kernel) interface
super().update(config)
diff --git a/python/vyos/ifconfig/vpp/loopback.py b/python/vyos/ifconfig/vpp/loopback.py
index 36a30cb58..4d3325820 100644
--- a/python/vyos/ifconfig/vpp/loopback.py
+++ b/python/vyos/ifconfig/vpp/loopback.py
@@ -96,10 +96,7 @@ class VPPLoopbackInterface(Interface, VPPInterface):
# Add loopback interface
self.add()
- # Set rx-mode
- rx_mode = config.get('vpp_settings', {}).get('interface_rx_mode')
- if rx_mode:
- self.set_rx_mode(rx_mode)
+ VPPInterface.update(self, config)
# Apply all settings to the lcp pair (kernel) interface
super().update(config)
diff --git a/python/vyos/ifconfig/vpp/vxlan.py b/python/vyos/ifconfig/vpp/vxlan.py
index 8ca9bee70..f09ed9be3 100644
--- a/python/vyos/ifconfig/vpp/vxlan.py
+++ b/python/vyos/ifconfig/vpp/vxlan.py
@@ -117,9 +117,6 @@ class VPPVXLANInterface(Interface, VPPInterface):
# Add vxlan interface
self.add_vxlan()
- # Set rx-mode
- rx_mode = config.get('vpp_settings', {}).get('interface_rx_mode')
- if rx_mode:
- self.set_rx_mode(rx_mode)
+ VPPInterface.update(self, config)
super().update(config)
diff --git a/python/vyos/utils/network.py b/python/vyos/utils/network.py
index 217428a21..de283e546 100644
--- a/python/vyos/utils/network.py
+++ b/python/vyos/utils/network.py
@@ -696,3 +696,28 @@ def is_valid_ipv6_address_or_range(addr: str) -> bool:
return ip_network(addr).version == 6
except:
return False
+
+
+def get_interfaces_by_ip(ip_address: str) -> list:
+ """
+ Return a list of all interface names assigned the given IP address.
+ Args:
+ ip_address (str): The IP address to search for.
+ Returns:
+ list: List of interface names (str) that have the given IP address assigned.
+ Returns an empty list if no interface has the IP assigned.
+ """
+ import netifaces
+ from vyos.template import is_ipv6
+
+ addr_type = AF_INET
+ if is_ipv6(ip_address):
+ addr_type = AF_INET6
+
+ ifaces = []
+ for interface in netifaces.interfaces():
+ addresses = netifaces.ifaddresses(interface)
+ for addr_info in addresses.get(addr_type, []):
+ if addr_info.get('addr') == ip_address:
+ ifaces.append(interface)
+ return ifaces
diff --git a/python/vyos/vpp/control_vpp.py b/python/vyos/vpp/control_vpp.py
index 2daaed423..5f3a18848 100644
--- a/python/vyos/vpp/control_vpp.py
+++ b/python/vyos/vpp/control_vpp.py
@@ -422,8 +422,11 @@ class VPPControl:
mtu (int): MTU
"""
iface_index = self.get_sw_if_index(iface_name_vpp)
- api_call_args: dict[str, str | int] = {'sw_if_index': iface_index, 'mtu': mtu}
- return self.__vpp_api_client.api.hw_interface_set_mtu(**api_call_args)
+ api_call_args: dict[str, int | list[int]] = {
+ 'sw_if_index': iface_index,
+ 'mtu': [mtu, 0, 0, 0],
+ }
+ return self.__vpp_api_client.api.sw_interface_set_mtu(**api_call_args)
@_Decorators.api_call
def get_sw_if_dev_type(self, ifname: str) -> int | None: