diff options
Diffstat (limited to 'tests/generator/test_ethernets.py')
-rw-r--r-- | tests/generator/test_ethernets.py | 160 |
1 files changed, 114 insertions, 46 deletions
diff --git a/tests/generator/test_ethernets.py b/tests/generator/test_ethernets.py index 46bf764..520ebdd 100644 --- a/tests/generator/test_ethernets.py +++ b/tests/generator/test_ethernets.py @@ -18,7 +18,9 @@ import os -from .base import TestBase, ND_DHCP4, UDEV_MAC_RULE, UDEV_NO_MAC_RULE, UDEV_SRIOV_RULE +from .base import TestBase, ND_DHCP4, UDEV_MAC_RULE, UDEV_NO_MAC_RULE, UDEV_SRIOV_RULE, \ + NM_MANAGED, NM_UNMANAGED, NM_MANAGED_MAC, NM_UNMANAGED_MAC, \ + NM_MANAGED_DRIVER, NM_UNMANAGED_DRIVER class TestNetworkd(TestBase): @@ -39,10 +41,8 @@ Name=eth0 LinkLocalAddressing=ipv6 '''}) self.assert_networkd_udev(None) - self.assert_nm(None, '''[keyfile] -# devices managed by networkd -unmanaged-devices+=interface-name:eth0,''') - self.assert_nm_udev(None) + self.assert_nm(None) + self.assert_nm_udev(NM_UNMANAGED % 'eth0') # should not allow NM to manage everything self.assertFalse(os.path.exists(self.nm_enable_all_conf)) @@ -140,8 +140,8 @@ LinkLocalAddressing=ipv6 '''}) self.assert_networkd_udev({'def1.rules': (UDEV_NO_MAC_RULE % ('ixgbe', 'lom1'))}) # NM cannot match by driver, so blacklisting needs to happen via udev - self.assert_nm(None, None) - self.assert_nm_udev('ACTION=="add|change", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ENV{NM_UNMANAGED}="1"\n') + self.assert_nm(None) + self.assert_nm_udev(NM_UNMANAGED % 'lom1' + NM_UNMANAGED_DRIVER % 'ixgbe') def test_eth_match_by_mac_rename(self): self.generate('''network: @@ -161,10 +161,36 @@ Name=lom1 LinkLocalAddressing=ipv6 '''}) self.assert_networkd_udev({'def1.rules': (UDEV_MAC_RULE % ('?*', '11:22:33:44:55:66', 'lom1'))}) - self.assert_nm(None, '''[keyfile] -# devices managed by networkd -unmanaged-devices+=mac:11:22:33:44:55:66,interface-name:lom1,''') - self.assert_nm_udev(None) + self.assert_nm(None) + self.assert_nm_udev(NM_UNMANAGED % 'lom1' + NM_UNMANAGED_MAC % '11:22:33:44:55:66') + + # https://bugs.launchpad.net/netplan/+bug/1848474 + def test_eth_match_by_mac_infiniband(self): + self.generate('''network: + version: 2 + ethernets: + ib0: + match: + macaddress: 11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66:77:88:99:00 + dhcp4: true + infiniband-mode: connected''') + + self.assert_networkd({'ib0.network': '''[Match] +MACAddress=11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66:77:88:99:00 + +[Network] +DHCP=ipv4 +LinkLocalAddressing=ipv6 + +[DHCP] +RouteMetric=100 +UseMTU=true + +[IPoIB] +Mode=connected +'''}) + self.assert_nm(None) + self.assert_nm_udev(NM_UNMANAGED_MAC % '11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66:77:88:99:00') def test_eth_implicit_name_match_dhcp4(self): self.generate('''network: @@ -197,7 +223,7 @@ RouteMetric=100 UseMTU=true '''}) self.assert_networkd_udev(None) - self.assert_nm_udev('ACTION=="add|change", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ENV{NM_UNMANAGED}="1"\n') + self.assert_nm_udev(NM_UNMANAGED_DRIVER % 'ixgbe') def test_eth_match_name(self): self.generate('''network: @@ -210,10 +236,8 @@ UseMTU=true self.assert_networkd({'def1.network': ND_DHCP4 % 'green'}) self.assert_networkd_udev(None) - self.assert_nm(None, '''[keyfile] -# devices managed by networkd -unmanaged-devices+=interface-name:green,''') - self.assert_nm_udev(None) + self.assert_nm(None) + self.assert_nm_udev(NM_UNMANAGED % 'green') def test_eth_set_mac(self): self.generate('''network: @@ -247,9 +271,8 @@ unmanaged-devices+=interface-name:green,''') # The udev rules engine does support renaming by name self.assert_networkd_udev(None) - self.assert_nm(None, '''[keyfile] -# devices managed by networkd -unmanaged-devices+=interface-name:blue,''') + self.assert_nm(None) + self.assert_nm_udev(NM_UNMANAGED % 'blue' + NM_UNMANAGED % 'green') def test_eth_match_all_names(self): self.generate('''network: @@ -261,10 +284,8 @@ unmanaged-devices+=interface-name:blue,''') self.assert_networkd({'def1.network': ND_DHCP4 % '*'}) self.assert_networkd_udev(None) - self.assert_nm(None, '''[keyfile] -# devices managed by networkd -unmanaged-devices+=interface-name:*,''') - self.assert_nm_udev(None) + self.assert_nm(None) + self.assert_nm_udev(NM_UNMANAGED % '*') def test_eth_match_all(self): self.generate('''network: @@ -277,9 +298,9 @@ unmanaged-devices+=interface-name:*,''') self.assert_networkd({'def1.network': '[Match]\n\n[Network]\nDHCP=ipv4\nLinkLocalAddressing=ipv6\n\n' '[DHCP]\nRouteMetric=100\nUseMTU=true\n'}) self.assert_networkd_udev(None) - self.assert_nm(None, '''[keyfile] -# devices managed by networkd -unmanaged-devices+=type:ethernet,''') + self.assert_nm(None, '''[device-netplan.ethernets.def1] +match-device=type:ethernet +managed=0\n\n''') self.assert_nm_udev(None) def test_match_multiple(self): @@ -303,9 +324,9 @@ LinkLocalAddressing=ipv6 RouteMetric=100 UseMTU=true '''}) - self.assert_nm(None, '''[keyfile] -# devices managed by networkd -unmanaged-devices+=mac:00:11:22:33:44:55,interface-name:en1s*,''') + self.assert_nm(None) + self.assert_nm_udev('SUBSYSTEM=="net", ACTION=="add|change|move", ENV{ID_NET_NAME}=="en1s*", ' + 'ATTR{address}=="00:11:22:33:44:55", ENV{NM_UNMANAGED}="1"\n') class TestNetworkManager(TestBase): @@ -335,7 +356,7 @@ method=ignore # should allow NM to manage everything else self.assertTrue(os.path.exists(self.nm_enable_all_conf)) self.assert_networkd({'eth0.link': '[Match]\nOriginalName=eth0\n\n[Link]\nWakeOnLan=magic\n'}) - self.assert_nm_udev(None) + self.assert_nm_udev(NM_MANAGED % 'eth0') def test_eth_mtu(self): self.generate('''network: @@ -547,7 +568,7 @@ method=link-local [ipv6] method=ignore '''}) - self.assert_nm_udev(None) + self.assert_nm_udev(NM_MANAGED % 'lom1' + NM_MANAGED_DRIVER % 'ixgbe') def test_eth_match_by_mac_rename(self): self.generate('''network: @@ -575,7 +596,7 @@ method=link-local [ipv6] method=ignore '''}) - self.assert_nm_udev(None) + self.assert_nm_udev(NM_MANAGED % 'lom1' + NM_MANAGED_MAC % '11:22:33:44:55:66') def test_eth_implicit_name_match_dhcp4(self): self.generate('''network: @@ -652,7 +673,7 @@ method=auto method=ignore '''}) self.assert_networkd({}) - self.assert_nm_udev(None) + self.assert_nm_udev(NM_MANAGED % 'green') def test_eth_match_name_rename(self): self.generate('''network: @@ -685,7 +706,7 @@ method=ignore '''}) # ... while udev renames it self.assert_networkd({'def1.link': '[Match]\nOriginalName=green\n\n[Link]\nName=blue\nWakeOnLan=off\n'}) - self.assert_nm_udev(None) + self.assert_nm_udev(NM_MANAGED % 'blue' + NM_MANAGED % 'green') def test_eth_match_name_glob(self): self.generate('''network: @@ -735,7 +756,10 @@ method=auto [ipv6] method=ignore -'''}) +'''}, '''[device-netplan.ethernets.def1] +match-device=type:ethernet +managed=1\n\n''') + self.assert_nm_udev(None) self.assert_networkd({}) def test_match_multiple(self): @@ -764,7 +788,8 @@ method=auto method=ignore '''}) self.assert_networkd({}) - self.assert_nm_udev(None) + self.assert_nm_udev('SUBSYSTEM=="net", ACTION=="add|change|move", ENV{ID_NET_NAME}=="engreen", ' + 'ATTR{address}=="00:11:22:33:44:55", ENV{NM_UNMANAGED}="0"\n') def test_offload(self): self.generate('''network: @@ -772,11 +797,11 @@ method=ignore ethernets: eth1: receive-checksum-offload: true - transmit-checksum-offload: true + transmit-checksum-offload: off tcp-segmentation-offload: true - tcp6-segmentation-offload: true + tcp6-segmentation-offload: false generic-segmentation-offload: true - generic-receive-offload: true + generic-receive-offload: no large-receive-offload: true''') self.assert_networkd({'eth1.link': '''[Match] @@ -784,13 +809,13 @@ OriginalName=eth1 [Link] WakeOnLan=off -ReceiveChecksumOffload=1 -TransmitChecksumOffload=1 -TCPSegmentationOffload=1 -TCP6SegmentationOffload=1 -GenericSegmentationOffload=1 -GenericReceiveOffload=1 -LargeReceiveOffload=1 +ReceiveChecksumOffload=true +TransmitChecksumOffload=false +TCPSegmentationOffload=true +TCP6SegmentationOffload=false +GenericSegmentationOffload=true +GenericReceiveOffload=false +LargeReceiveOffload=true ''', 'eth1.network': '''[Match] Name=eth1 @@ -799,3 +824,46 @@ Name=eth1 LinkLocalAddressing=ipv6 '''}) self.assert_networkd_udev(None) + + def test_offload_invalid(self): + err = self.generate('''network: + version: 2 + ethernets: + eth1: + generic-receive-offload: n + receive-checksum-offload: true + tcp-segmentation-offload: true + tcp6-segmentation-offload: false + generic-segmentation-offload: true + transmit-checksum-offload: xx + large-receive-offload: true''', expect_fail=True) + self.assertIn('invalid boolean value \'xx\'', err) + + # https://bugs.launchpad.net/netplan/+bug/1848474 + def test_eth_match_by_mac_infiniband(self): + self.generate('''network: + version: 2 + renderer: NetworkManager + ethernets: + ib0: + match: + macaddress: 11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66:77:88:99:00 + dhcp4: true + infiniband-mode: datagram''') + + self.assert_networkd(None) + self.assert_nm({'ib0': '''[connection] +id=netplan-ib0 +type=infiniband + +[infiniband] +mac-address=11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66:77:88:99:00 +transport-mode=datagram + +[ipv4] +method=auto + +[ipv6] +method=ignore +'''}) + self.assert_nm_udev(NM_MANAGED_MAC % '11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66:77:88:99:00') |