Skip to content

Commit 9991377

Browse files
nathanjrobertsonsonicaj
authored andcommitted
NAS-106037 / 12.0 / Make MTU of VNet interfaces configurable (iocage#1095)
* Add configuration parameters for default MTU on VNet device creation, as well as specific MTU for each VNet device. Default behaviour is the old behaviour (default of 1500, or whatever the bridge we're connecting to is set to) * Add a space after a comma (travis fussiness) * Mock a hard code variable for unit test use only * More travis fussiness * Update ioc_json.py Remove a couple of f-strings that didn't have variables within them. * Remove self.unit_test hack for vnet_default_mtu - Instead of having dummy data in the implementation, hack the test to implement the needed IOCStart.get() method fragment we need to test. - Also upgrade the cirrus.yml to use FreeBSD 11.3 rather than 11.2 - hopefully this fixes the failing unit test * Update cirrus-ci to FreeBSD 11.3-STABLE * Revert "Update cirrus-ci to FreeBSD 11.3-STABLE" This reverts commit 3473e6b. * Lets see if the latest 11.3 snapshot works with CirrusCI According to https://cirrus-ci.org/guide/FreeBSD/ the 11.3-RELEASE doesn't work with Cirrus-CI / gCloud. But apparently the stable snapshots do. Lets see. * 11.2 is EOL. Use 11.3 in jail. * Use the latest 11-STABLE family image, not a specific dated snapshot (thanks to asomers for the tip)
1 parent e90c0bd commit 9991377

File tree

5 files changed

+35
-7
lines changed

5 files changed

+35
-7
lines changed

.cirrus.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
freebsd_instance:
2-
image: freebsd-11-2-release-amd64
2+
image_family: freebsd-11-3-snap
33

44
iocage_tests_task:
55
create_pool_script:

iocage_lib/ioc_json.py

+18-1
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ def __init__(self, location, checking_datasets, silent, callback):
434434
@staticmethod
435435
def get_version():
436436
"""Sets the iocage configuration version."""
437-
version = '27'
437+
version = '28'
438438

439439
return version
440440

@@ -898,6 +898,13 @@ def check_config(self, conf, default=False):
898898
if not conf.get('min_dyn_devfs_ruleset'):
899899
conf['min_dyn_devfs_ruleset'] = '1000'
900900

901+
# Version 28 keys
902+
for x in range(0, 4):
903+
if not conf.get(f"vnet{x}_mtu"):
904+
conf[f"vnet{x}_mtu"] = 'auto'
905+
if not conf.get("vnet_default_mtu"):
906+
conf["vnet_default_mtu"] = '1500'
907+
901908
if not default:
902909
conf.update(jail_conf)
903910

@@ -1236,6 +1243,11 @@ def retrieve_default_props():
12361243
'plugin_name': 'none',
12371244
'plugin_repository': 'none',
12381245
'min_dyn_devfs_ruleset': '1000',
1246+
'vnet0_mtu': 'auto',
1247+
'vnet1_mtu': 'auto',
1248+
'vnet2_mtu': 'auto',
1249+
'vnet3_mtu': 'auto',
1250+
'vnet_default_mtu': '1500',
12391251
}
12401252

12411253
def check_default_config(self):
@@ -2152,6 +2164,11 @@ def json_check_prop(self, key, value, conf, default=False):
21522164
'plugin_name': ('string', ),
21532165
'plugin_repository': ('string', ),
21542166
'min_dyn_devfs_ruleset': ('string', ),
2167+
"vnet0_mtu": ("string", ),
2168+
"vnet1_mtu": ("string", ),
2169+
"vnet2_mtu": ("string", ),
2170+
"vnet3_mtu": ("string", ),
2171+
"vnet_default_mtu": ("string", ),
21552172
}
21562173

21572174
zfs_props = {

iocage_lib/ioc_start.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -1180,10 +1180,12 @@ def start_network_interface_vnet(
11801180
nic, bridge = nic_def.split(":")
11811181

11821182
try:
1183-
if not nat_addr:
1183+
if self.get(f"{nic}_mtu") != 'auto':
1184+
membermtu = self.get(f"{nic}_mtu")
1185+
elif not nat_addr:
11841186
membermtu = self.find_bridge_mtu(bridge)
11851187
else:
1186-
membermtu = '1500'
1188+
membermtu = self.get('vnet_default_mtu')
11871189

11881190
dhcp = self.get('dhcp')
11891191

@@ -1571,7 +1573,7 @@ def find_bridge_mtu(self, bridge):
15711573

15721574
memberif = self.get_bridge_members(bridge)
15731575
if not memberif:
1574-
return '1500'
1576+
return self.get('vnet_default_mtu')
15751577

15761578
membermtu = iocage_lib.ioc_common.checkoutput(
15771579
["ifconfig", memberif[0]]

tests/conftest.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def pytest_addoption(parser):
3838
help='Specify a zpool to use.'
3939
)
4040
parser.addoption(
41-
'--release', action='store', default='11.2-RELEASE',
41+
'--release', action='store', default='11.3-RELEASE',
4242
help='Specify a RELEASE to use.'
4343
)
4444
parser.addoption(

tests/unit_tests/1000_lib_start_test.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,16 @@ def test_should_return_default_mtu_if_no_members(mock_checkoutput):
5252
mock_checkoutput.side_effect = [bridge_with_no_members_if_config,
5353
member_if_config]
5454

55-
mtu = ioc_start.IOCStart("", "", unit_test=True).find_bridge_mtu('bridge0')
55+
# IOCStart.get() is not implemented in test mode. We need it for this test.
56+
# So provide a dummy implementation which gives us the default MTU.
57+
def _mock_iocstart_get(prop):
58+
if prop=='vnet_default_mtu':
59+
return "1500"
60+
raise AttributeError(prop)
61+
62+
iocs = ioc_start.IOCStart("", "", unit_test=True)
63+
iocs.get = _mock_iocstart_get
64+
mtu = iocs.find_bridge_mtu('bridge0')
5665
assert mtu == '1500'
5766
mock_checkoutput.called_with(["ifconfig", "bridge0"])
5867

0 commit comments

Comments
 (0)