From 1e8e9730d2ee1e1a219ec194a503b9248da386b9 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 15 Jan 2022 09:26:32 +0900 Subject: [PATCH] test-network: add testcases for configuring SR-IOV by .link file --- test/test-network/conf/25-sriov-udev.network | 7 ++ test/test-network/conf/25-sriov.link | 40 +++++++++ test/test-network/systemd-networkd-tests.py | 89 ++++++++++++++++++++ 3 files changed, 136 insertions(+) create mode 100644 test/test-network/conf/25-sriov-udev.network create mode 100644 test/test-network/conf/25-sriov.link diff --git a/test/test-network/conf/25-sriov-udev.network b/test/test-network/conf/25-sriov-udev.network new file mode 100644 index 00000000000..e9141310b7c --- /dev/null +++ b/test/test-network/conf/25-sriov-udev.network @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Name=eni99np1 + +[Network] +Address=192.168.100.100/24 +IPv6AcceptRA=no diff --git a/test/test-network/conf/25-sriov.link b/test/test-network/conf/25-sriov.link new file mode 100644 index 00000000000..cc195613062 --- /dev/null +++ b/test/test-network/conf/25-sriov.link @@ -0,0 +1,40 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Driver=netdevsim + +[Link] +NamePolicy=keep kernel database onboard slot path +AlternativeNamesPolicy=database onboard slot path mac +MACAddressPolicy=persistent + +[SR-IOV] +VirtualFunction=0 +VLANId=5 +VLANProtocol=802.1ad +QualityOfService=1 +MACSpoofCheck=yes +QueryReceiveSideScaling=yes +Trust=yes +LinkState=yes +MACAddress=00:11:22:33:44:55 + +[SR-IOV] +VirtualFunction=1 +VLANId=6 +VLANProtocol=802.1Q +QualityOfService=2 +MACSpoofCheck=no +QueryReceiveSideScaling=no +Trust=no +LinkState=no +MACAddress=00:11:22:33:44:56 + +[SR-IOV] +VirtualFunction=2 +VLANId=7 +QualityOfService=3 +MACSpoofCheck=no +QueryReceiveSideScaling=no +Trust=no +LinkState=auto +MACAddress=00:11:22:33:44:57 diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 709cfc120d2..0233c4dd1fd 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -3974,6 +3974,8 @@ class NetworkdBridgeTests(unittest.TestCase, Utilities): class NetworkdSRIOVTests(unittest.TestCase, Utilities): units = [ + '25-sriov-udev.network', + '25-sriov.link', '25-sriov.network', ] @@ -4010,6 +4012,93 @@ class NetworkdSRIOVTests(unittest.TestCase, Utilities): 'vf 2 .*00:11:22:33:44:57.*vlan 7, qos 3, spoof checking off, link-state auto, trust off, query_rss off' ) + @expectedFailureIfNetdevsimWithSRIOVIsNotAvailable() + def test_sriov_udev(self): + call('modprobe netdevsim', stderr=subprocess.DEVNULL) + + copy_unit_to_networkd_unit_path('25-sriov.link', '25-sriov-udev.network') + call('udevadm control --reload') + + with open('/sys/bus/netdevsim/new_device', mode='w') as f: + f.write('99 1') + + start_networkd() + self.wait_online(['eni99np1:routable']) + + output = check_output('ip link show dev eni99np1') + print(output) + self.assertRegex(output, + 'vf 0 .*00:11:22:33:44:55.*vlan 5, qos 1, vlan protocol 802.1ad, spoof checking on, link-state enable, trust on, query_rss on\n *' + 'vf 1 .*00:11:22:33:44:56.*vlan 6, qos 2, spoof checking off, link-state disable, trust off, query_rss off\n *' + 'vf 2 .*00:11:22:33:44:57.*vlan 7, qos 3, spoof checking off, link-state auto, trust off, query_rss off' + ) + self.assertNotIn('vf 3', output) + self.assertNotIn('vf 4', output) + + with open(os.path.join(network_unit_file_path, '25-sriov.link'), mode='a') as f: + f.write('[Link]\nSR-IOVVirtualFunctions=4\n') + + call('udevadm control --reload') + call('udevadm trigger --action add --settle /sys/devices/netdevsim99/net/eni99np1') + + output = check_output('ip link show dev eni99np1') + print(output) + self.assertRegex(output, + 'vf 0 .*00:11:22:33:44:55.*vlan 5, qos 1, vlan protocol 802.1ad, spoof checking on, link-state enable, trust on, query_rss on\n *' + 'vf 1 .*00:11:22:33:44:56.*vlan 6, qos 2, spoof checking off, link-state disable, trust off, query_rss off\n *' + 'vf 2 .*00:11:22:33:44:57.*vlan 7, qos 3, spoof checking off, link-state auto, trust off, query_rss off\n *' + 'vf 3' + ) + self.assertNotIn('vf 4', output) + + with open(os.path.join(network_unit_file_path, '25-sriov.link'), mode='a') as f: + f.write('[Link]\nSR-IOVVirtualFunctions=\n') + + call('udevadm control --reload') + call('udevadm trigger --action add --settle /sys/devices/netdevsim99/net/eni99np1') + + output = check_output('ip link show dev eni99np1') + print(output) + self.assertRegex(output, + 'vf 0 .*00:11:22:33:44:55.*vlan 5, qos 1, vlan protocol 802.1ad, spoof checking on, link-state enable, trust on, query_rss on\n *' + 'vf 1 .*00:11:22:33:44:56.*vlan 6, qos 2, spoof checking off, link-state disable, trust off, query_rss off\n *' + 'vf 2 .*00:11:22:33:44:57.*vlan 7, qos 3, spoof checking off, link-state auto, trust off, query_rss off\n *' + 'vf 3' + ) + self.assertNotIn('vf 4', output) + + with open(os.path.join(network_unit_file_path, '25-sriov.link'), mode='a') as f: + f.write('[Link]\nSR-IOVVirtualFunctions=2\n') + + call('udevadm control --reload') + call('udevadm trigger --action add --settle /sys/devices/netdevsim99/net/eni99np1') + + output = check_output('ip link show dev eni99np1') + print(output) + self.assertRegex(output, + 'vf 0 .*00:11:22:33:44:55.*vlan 5, qos 1, vlan protocol 802.1ad, spoof checking on, link-state enable, trust on, query_rss on\n *' + 'vf 1 .*00:11:22:33:44:56.*vlan 6, qos 2, spoof checking off, link-state disable, trust off, query_rss off' + ) + self.assertNotIn('vf 2', output) + self.assertNotIn('vf 3', output) + self.assertNotIn('vf 4', output) + + with open(os.path.join(network_unit_file_path, '25-sriov.link'), mode='a') as f: + f.write('[Link]\nSR-IOVVirtualFunctions=\n') + + call('udevadm control --reload') + call('udevadm trigger --action add --settle /sys/devices/netdevsim99/net/eni99np1') + + output = check_output('ip link show dev eni99np1') + print(output) + self.assertRegex(output, + 'vf 0 .*00:11:22:33:44:55.*vlan 5, qos 1, vlan protocol 802.1ad, spoof checking on, link-state enable, trust on, query_rss on\n *' + 'vf 1 .*00:11:22:33:44:56.*vlan 6, qos 2, spoof checking off, link-state disable, trust off, query_rss off\n *' + 'vf 2 .*00:11:22:33:44:57.*vlan 7, qos 3, spoof checking off, link-state auto, trust off, query_rss off' + ) + self.assertNotIn('vf 3', output) + self.assertNotIn('vf 4', output) + class NetworkdLLDPTests(unittest.TestCase, Utilities): links = ['veth99'] -- 2.47.3