from config import config from framework import VppTestCase from asfframework import VppTestRunner import unittest from scapy.layers.l2 import Ether from scapy.layers.inet import UDP from scapy.layers.inet6 import IPv6 from random import randint # TODO: get an actual output from "show ip6 connection-tracker" @unittest.skipIf("ct6" in config.excluded_plugins, "Exclude CT6 plugin tests") class TestCt6(VppTestCase): """CT6 plugin tests""" @classmethod def setUpClass(cls): super(TestCt6, cls).setUpClass() try: cls.create_pg_interfaces(range(2)) for i in cls.pg_interfaces: i.config_ip6().resolve_ndp() i.admin_up() except Exception: cls.tearDownClass() raise @classmethod def tearDownClass(cls): super(TestCt6, cls).tearDownClass() def create_stream(self, src_if, dst_if, count): packets = [] for i in range(count): p = ( Ether(src=src_if.remote_mac, dst=src_if.local_mac) / IPv6(src=src_if.remote_ip6, dst=dst_if.remote_ip6) / UDP(sport=randint(49152, 65535), dport=5678, chksum=0) ) packets.append(p) return packets def test_ct6_vapi(self): self.vapi.ct6_enable_disable(enable_disable=True, is_inside=True, sw_if_index=1) self.vapi.ct6_enable_disable( enable_disable=True, is_inside=False, sw_if_index=1 ) packets = self.create_stream(self.pg0, self.pg1, 5) self.pg0.add_stream(packets) self.pg_start() self.vapi.ct6_enable_disable(1234, 567, True, True, "pg0", "disable") def test_ct6_cli(self): self.vapi.cli("set ct6 outside pg1") self.vapi.cli("set ct6 inside pg1") packets = self.create_stream(self.pg0, self.pg1, 5) self.pg0.add_stream(packets) self.pg_start() reply = self.vapi.cli("show ip6 connection-tracker") self.assertIn("Thread 0", reply) reply = self.vapi.cli("test ip6 connection-tracker") self.assertIn("End state", reply) self.vapi.cli("set ct6 inside pg1 disable") if __name__ == "__main__": unittest.main(testRunner=VppTestRunner)