summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-02-28 10:29:30 +0100
committerChristian Poessinger <christian@poessinger.com>2021-02-28 18:10:08 +0100
commit458e71dd7b1af3354a7643a0d26e651a9e7ccfcf (patch)
treed7dbf463a28bec9f4465783741244150da08fdd8
parent5574bd672825a87b1983cc135ae2e0bdabbe751b (diff)
downloadvyos-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.i8
-rw-r--r--interface-definitions/interfaces-vxlan.xml.in7
-rw-r--r--python/vyos/ifconfig/vxlan.py17
-rwxr-xr-xsmoketest/scripts/cli/test_interfaces_vxlan.py32
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)