diff options
author | Christian Poessinger <christian@poessinger.com> | 2021-02-28 10:29:30 +0100 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2021-02-28 18:10:08 +0100 |
commit | 458e71dd7b1af3354a7643a0d26e651a9e7ccfcf (patch) | |
tree | d7dbf463a28bec9f4465783741244150da08fdd8 | |
parent | 5574bd672825a87b1983cc135ae2e0bdabbe751b (diff) | |
download | vyos-1x-458e71dd7b1af3354a7643a0d26e651a9e7ccfcf.tar.gz vyos-1x-458e71dd7b1af3354a7643a0d26e651a9e7ccfcf.zip |
vxlan: T1513: add dont-fragment CLI option
-rw-r--r-- | interface-definitions/include/interface-parameters-dont-fragment.xml.i | 8 | ||||
-rw-r--r-- | interface-definitions/interfaces-vxlan.xml.in | 7 | ||||
-rw-r--r-- | python/vyos/ifconfig/vxlan.py | 17 | ||||
-rwxr-xr-x | smoketest/scripts/cli/test_interfaces_vxlan.py | 32 |
4 files changed, 48 insertions, 16 deletions
diff --git a/interface-definitions/include/interface-parameters-dont-fragment.xml.i b/interface-definitions/include/interface-parameters-dont-fragment.xml.i new file mode 100644 index 000000000..a16cc5dee --- /dev/null +++ b/interface-definitions/include/interface-parameters-dont-fragment.xml.i @@ -0,0 +1,8 @@ +<!-- included start from interface-parameters-df.xml.i --> +<leafNode name="dont-fragment"> + <properties> + <help>Specifies the usage of the dont fragment (DF) bit</help> + <valueless/> + </properties> +</leafNode> +<!-- included end --> diff --git a/interface-definitions/interfaces-vxlan.xml.in b/interface-definitions/interfaces-vxlan.xml.in index a2ff34186..d9d2d1033 100644 --- a/interface-definitions/interfaces-vxlan.xml.in +++ b/interface-definitions/interfaces-vxlan.xml.in @@ -52,12 +52,7 @@ <help>IPv4 specific tunnel parameters</help> </properties> <children> - <leafNode name="df"> - <properties> - <help>Specifies the usage of the do not fragment (DF) bit</help> - <valueless/> - </properties> - </leafNode> + #include <include/interface-parameters-dont-fragment.xml.i> #include <include/interface-parameters-tos.xml.i> #include <include/interface-parameters-ttl.xml.i> </children> diff --git a/python/vyos/ifconfig/vxlan.py b/python/vyos/ifconfig/vxlan.py index 291332a77..e17643aca 100644 --- a/python/vyos/ifconfig/vxlan.py +++ b/python/vyos/ifconfig/vxlan.py @@ -54,14 +54,15 @@ class VXLANIf(Interface): # arguments used by iproute2. For more information please refer to: # - https://man7.org/linux/man-pages/man8/ip-link.8.html mapping = { - 'source_address' : 'local', - 'source_interface' : 'dev', - 'remote' : 'remote', - 'group' : 'group', - 'parameters.ip.tos' : 'tos', - 'parameters.ip.ttl' : 'ttl', - 'parameters.ipv6.flowlabel' : 'flowlabel', - 'parameters.nolearning' : 'nolearning', + 'source_address' : 'local', + 'source_interface' : 'dev', + 'remote' : 'remote', + 'group' : 'group', + 'parameters.ip.dont_fragment': 'df set', + 'parameters.ip.tos' : 'tos', + 'parameters.ip.ttl' : 'ttl', + 'parameters.ipv6.flowlabel' : 'flowlabel', + 'parameters.nolearning' : 'nolearning', } cmd = 'ip link add {ifname} type {type} id {vni} dstport {port}' diff --git a/smoketest/scripts/cli/test_interfaces_vxlan.py b/smoketest/scripts/cli/test_interfaces_vxlan.py index adbe7138b..c52dc410b 100755 --- a/smoketest/scripts/cli/test_interfaces_vxlan.py +++ b/smoketest/scripts/cli/test_interfaces_vxlan.py @@ -16,7 +16,10 @@ import unittest -from vyos.configsession import ConfigSession, ConfigSessionError +from vyos.configsession import ConfigSession +from vyos.ifconfig import Interface +from vyos.util import get_json_iface_options + from base_interfaces_test import BasicInterfaceTest class VXLANInterfaceTest(BasicInterfaceTest.BaseTest): @@ -33,5 +36,30 @@ class VXLANInterfaceTest(BasicInterfaceTest.BaseTest): } cls._interfaces = list(cls._options) + def test_vxlan_parameters(self): + addr = '192.0.2.0/31' + tos = '40' + ttl = 20 + for intf in self._interfaces: + self.session.set(self._base_path + [intf, 'address', addr]) + for option in self._options.get(intf, []): + self.session.set(self._base_path + [intf] + option.split()) + + self.session.set(self._base_path + [intf, 'parameters', 'ip', 'dont-fragment']) + self.session.set(self._base_path + [intf, 'parameters', 'ip', 'tos', tos]) + self.session.set(self._base_path + [intf, 'parameters', 'ip', 'ttl', str(ttl)]) + ttl += 10 + + self.session.commit() + + ttl = 20 + for interface in self._interfaces: + options = get_json_iface_options(interface) + self.assertEqual('set', options['linkinfo']['info_data']['df']) + self.assertEqual(f'0x{tos}', options['linkinfo']['info_data']['tos']) + self.assertEqual(ttl, options['linkinfo']['info_data']['ttl']) + self.assertEqual(Interface(interface).get_admin_state(), 'up') + ttl += 10 + if __name__ == '__main__': - unittest.main(verbosity=2) + unittest.main(verbosity=2, failfast=True) |