summaryrefslogtreecommitdiff
path: root/tests/generator/test_ethernets.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/generator/test_ethernets.py')
-rw-r--r--tests/generator/test_ethernets.py160
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')