Skip to content

Commit

Permalink
smoketest: T6592: verify no interface stalls in conntrack ct_iface_ma…
Browse files Browse the repository at this point in the history
…p on deletion

Now that interfaces are deleted from ct_iface_map during deletion it's time to
also add a smoketest ensuring there is no entry in the ct_iface_map once an
interface was deleted from the CLI.

(cherry picked from commit 1c42ee9)
  • Loading branch information
c-po authored and mergify[bot] committed Jul 24, 2024
1 parent 9274009 commit 28fedd4
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
28 changes: 28 additions & 0 deletions python/vyos/utils/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -569,3 +569,31 @@ def ipv6_prefix_length(low, high):
return plen + i + 1

return None

def get_nft_vrf_zone_mapping() -> dict:
"""
Retrieve current nftables conntrack mapping list from Kernel
returns: [{'interface': 'red', 'vrf_tableid': 1000},
{'interface': 'eth2', 'vrf_tableid': 1000},
{'interface': 'blue', 'vrf_tableid': 2000}]
"""
from json import loads
from jmespath import search
from vyos.utils.process import cmd
output = []
tmp = loads(cmd('sudo nft -j list table inet vrf_zones'))
# {'nftables': [{'metainfo': {'json_schema_version': 1,
# 'release_name': 'Old Doc Yak #3',
# 'version': '1.0.9'}},
# {'table': {'family': 'inet', 'handle': 6, 'name': 'vrf_zones'}},
# {'map': {'elem': [['eth0', 666],
# ['dum0', 666],
# ['wg500', 666],
# ['bond10.666', 666]],
vrf_list = search('nftables[].map.elem | [0]', tmp)
if not vrf_list:
return output
for (vrf_name, vrf_id) in vrf_list:
output.append({'interface' : vrf_name, 'vrf_tableid' : vrf_id})
return output
10 changes: 7 additions & 3 deletions smoketest/scripts/cli/base_interfaces_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
from netifaces import AF_INET
from netifaces import AF_INET6
from netifaces import ifaddresses
from netifaces import interfaces

from base_vyostest_shim import VyOSUnitTestSHIM

Expand All @@ -25,13 +24,15 @@
from vyos.ifconfig import Section
from vyos.utils.file import read_file
from vyos.utils.dict import dict_search
from vyos.utils.process import cmd
from vyos.utils.process import process_named_running
from vyos.utils.network import get_interface_config
from vyos.utils.network import get_interface_vrf
from vyos.utils.network import get_vrf_tableid
from vyos.utils.process import cmd
from vyos.utils.network import interface_exists
from vyos.utils.network import is_intf_addr_assigned
from vyos.utils.network import is_ipv6_link_local
from vyos.utils.network import get_nft_vrf_zone_mapping
from vyos.xml_ref import cli_defined

dhclient_base_dir = directories['isc_dhclient_dir']
Expand Down Expand Up @@ -117,8 +118,11 @@ def tearDown(self):
self.cli_commit()

# Verify that no previously interface remained on the system
ct_map = get_nft_vrf_zone_mapping()
for intf in self._interfaces:
self.assertNotIn(intf, interfaces())
self.assertFalse(interface_exists(intf))
for map_entry in ct_map:
self.assertNotEqual(intf, map_entry['interface'])

# No daemon started during tests should remain running
for daemon in ['dhcp6c', 'dhclient']:
Expand Down

0 comments on commit 28fedd4

Please sign in to comment.