diff options
author | Christian Poessinger <christian@poessinger.com> | 2021-02-04 17:30:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-04 17:30:46 +0100 |
commit | 8413278c90132d2a1eb5e4322d14f207ab485fa4 (patch) | |
tree | 77171e2375ec0a3753195b8b9e08c823a5849022 /smoketest/scripts/cli/test_interfaces_erspan.py | |
parent | 7650ba287273eb0072b272bad171ddcfe13aa0fd (diff) | |
parent | c7d0865455c9bbf078765b7a53811286cf3dfb8b (diff) | |
download | vyos-1x-8413278c90132d2a1eb5e4322d14f207ab485fa4.tar.gz vyos-1x-8413278c90132d2a1eb5e4322d14f207ab485fa4.zip |
Merge pull request #620 from jack9603301/T3030
tunnel: T3030: Add erspan protocol support
Diffstat (limited to 'smoketest/scripts/cli/test_interfaces_erspan.py')
-rwxr-xr-x | smoketest/scripts/cli/test_interfaces_erspan.py | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/smoketest/scripts/cli/test_interfaces_erspan.py b/smoketest/scripts/cli/test_interfaces_erspan.py new file mode 100755 index 000000000..c180f0a34 --- /dev/null +++ b/smoketest/scripts/cli/test_interfaces_erspan.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2020 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import unittest +import json + +from vyos.configsession import ConfigSession +from vyos.configsession import ConfigSessionError +from vyos.util import cmd + +from base_interfaces_test import BasicInterfaceTest + +mtu = 1500 + +def erspan_conf(interface): + tmp = cmd(f'ip -d -j link show {interface}') + ''' + [ + { + "ifindex": 17, + "link": null, + "ifname": "ersp0", + "flags": [ + "BROADCAST", + "MULTICAST" + ], + "mtu": 1450, + "qdisc": "noop", + "operstate": "DOWN", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "22:27:14:7b:0d:79", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 0, + "min_mtu": 68, + "max_mtu": 0, + "linkinfo": { + "info_kind": "erspan", + "info_data": { + "remote": "10.2.2.2", + "local": "10.1.1.1", + "ttl": 0, + "pmtudisc": true, + "ikey": "0.0.0.123", + "okey": "0.0.0.123", + "iseq": true, + "oseq": true, + "erspan_index": 0, + "erspan_ver": 1 + } + }, + "inet6_addr_gen_mode": "eui64", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535 + } + ] + ''' + return json.loads(tmp)[0] + +class ERSPanTunnelInterfaceTest(BasicInterfaceTest.BaseTest): + def setUp(self): + super().setUp() + + self._base_path = ['interfaces', 'erspan'] + self._test_mtu = True + + self.local_v4 = '10.1.1.1' + self.local_v6 = '2001:db8::1' + self.remote_v4 = '10.2.2.2' + self.remote_v6 = '2001:db9::1' + + def tearDown(self): + self.session.delete(['interfaces', 'erspan']) + super().tearDown() + + def test_erspan_ipv4(self): + interface = 'ersp100' + encapsulation = 'erspan' + key = 123 + + self.session.set(self._base_path + [interface, 'encapsulation', encapsulation]) + self.session.set(self._base_path + [interface, 'local-ip', self.local_v4]) + self.session.set(self._base_path + [interface, 'remote-ip', self.remote_v4]) + self.session.set(self._base_path + [interface, 'parameters', 'ip' , 'key', str(key)]) + + self.session.commit() + + conf = erspan_conf(interface) + self.assertEqual(interface, conf['ifname']) + self.assertEqual(encapsulation, conf['linkinfo']['info_kind']) + self.assertEqual(mtu, conf['mtu']) + + self.assertEqual(self.local_v4, conf['linkinfo']['info_data']['local']) + self.assertEqual(self.remote_v4, conf['linkinfo']['info_data']['remote']) + + + def test_erspan_ipv6(self): + interface = 'ersp1000' + encapsulation = 'ip6erspan' + key = 123 + + self.session.set(self._base_path + [interface, 'encapsulation', encapsulation]) + self.session.set(self._base_path + [interface, 'local-ip', self.local_v6]) + self.session.set(self._base_path + [interface, 'remote-ip', self.remote_v6]) + self.session.set(self._base_path + [interface, 'parameters', 'ip' , 'key', str(key)]) + + self.session.commit() + + conf = erspan_conf(interface) + self.assertEqual(interface, conf['ifname']) + self.assertEqual(encapsulation, conf['linkinfo']['info_kind']) + self.assertEqual(mtu, conf['mtu']) + + self.assertEqual(self.local_v6, conf['linkinfo']['info_data']['local']) + self.assertEqual(self.remote_v6, conf['linkinfo']['info_data']['remote']) + +if __name__ == '__main__': + unittest.main(verbosity=2) |