X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_vtr.py;h=c3704f1e7b6def2a4199588e61559a5e34884243;hb=7c0eb56f4;hp=02df2ce2c4bc3f020ede0af21410f1e6df12e91d;hpb=284293a3ff4ba6508f8d02b644cfd1a60966382c;p=vpp.git diff --git a/test/test_vtr.py b/test/test_vtr.py index 02df2ce2c4b..c3704f1e7b6 100644 --- a/test/test_vtr.py +++ b/test/test_vtr.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest import random @@ -9,8 +9,7 @@ from scapy.layers.inet import IP, UDP from util import Host from framework import VppTestCase, VppTestRunner -from vpp_sub_interface import VppDot1QSubint, VppDot1ADSubint -from vpp_papi_provider import L2_VTR_OP +from vpp_sub_interface import L2_VTR_OP, VppDot1QSubint, VppDot1ADSubint from collections import namedtuple Tag = namedtuple('Tag', ['dot1', 'vlan']) @@ -49,7 +48,7 @@ class TestVtr(VppTestCase): for pg_if in cls.pg_interfaces: sw_if_index = pg_if.sub_if.sw_if_index \ if hasattr(pg_if, 'sub_if') else pg_if.sw_if_index - cls.vapi.sw_interface_set_l2_bridge(sw_if_index, + cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=sw_if_index, bd_id=cls.bd_id) # setup all interfaces @@ -68,6 +67,10 @@ class TestVtr(VppTestCase): super(TestVtr, cls).tearDownClass() raise + @classmethod + def tearDownClass(cls): + super(TestVtr, cls).tearDownClass() + def setUp(self): """ Clear trace and packet infos before running each test. @@ -80,10 +83,11 @@ class TestVtr(VppTestCase): Show various debug prints after each test. """ super(TestVtr, self).tearDown() - if not self.vpp_dead: - self.logger.info(self.vapi.ppcli("show l2fib verbose")) - self.logger.info(self.vapi.ppcli("show bridge-domain %s detail" % - self.bd_id)) + + def show_commands_at_teardown(self): + self.logger.info(self.vapi.ppcli("show l2fib verbose")) + self.logger.info(self.vapi.ppcli("show bridge-domain %s detail" % + self.bd_id)) @classmethod def create_hosts_and_learn(cls, count): @@ -168,8 +172,8 @@ class TestVtr(VppTestCase): return i = VppDot1QSubint(self, self.pg0, tags[0].vlan) - self.vapi.sw_interface_set_l2_bridge( - i.sw_if_index, bd_id=self.bd_id, enable=1) + self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index, + bd_id=self.bd_id, enable=1) i.admin_up() p = self.create_packet(self.pg0, swif, do_dot1=False) @@ -181,8 +185,8 @@ class TestVtr(VppTestCase): swif.sub_if.remove_dot1_layer(rx[0]) self.assertTrue(Dot1Q not in rx[0]) - self.vapi.sw_interface_set_l2_bridge( - i.sw_if_index, bd_id=self.bd_id, enable=0) + self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index, + bd_id=self.bd_id, enable=0) i.remove_vpp_config() def test_1ad_vtr_pop_1(self): @@ -327,6 +331,56 @@ class TestVtr(VppTestCase): self.vtr_test(self.pg2, [Tag(dot1=DOT1AD, vlan=400), Tag(dot1=DOT1Q, vlan=300)]) + def test_if_vtr_disable(self): + """ Disable VTR on non-sub-interfaces + """ + # First set the VTR fields to junk + self.vapi.l2_interface_vlan_tag_rewrite( + sw_if_index=self.pg0.sw_if_index, vtr_op=L2_VTR_OP.L2_PUSH_2, + push_dot1q=1, tag1=19, tag2=630) + + if_state = self.vapi.sw_interface_dump( + sw_if_index=self.pg0.sw_if_index) + self.assertEqual(if_state[0].sw_if_index, self.pg0.sw_if_index) + self.assertNotEqual(if_state[0].vtr_op, L2_VTR_OP.L2_DISABLED) + + # Then ensure that a request to disable VTR is honored. + self.vapi.l2_interface_vlan_tag_rewrite( + sw_if_index=self.pg0.sw_if_index, vtr_op=L2_VTR_OP.L2_DISABLED) + + if_state = self.vapi.sw_interface_dump( + sw_if_index=self.pg0.sw_if_index) + self.assertEqual(if_state[0].sw_if_index, self.pg0.sw_if_index) + self.assertEqual(if_state[0].vtr_op, L2_VTR_OP.L2_DISABLED) + + def test_if_vtr_push_1q(self): + """ 1Q VTR push 1 on non-sub-interfaces + """ + self.vapi.l2_interface_vlan_tag_rewrite( + sw_if_index=self.pg0.sw_if_index, vtr_op=L2_VTR_OP.L2_PUSH_1, + push_dot1q=1, tag1=150) + + if_state = self.vapi.sw_interface_dump( + sw_if_index=self.pg0.sw_if_index) + self.assertEqual(if_state[0].sw_if_index, self.pg0.sw_if_index) + self.assertEqual(if_state[0].vtr_op, L2_VTR_OP.L2_PUSH_1) + self.assertEqual(if_state[0].vtr_tag1, 150) + self.assertNotEqual(if_state[0].vtr_push_dot1q, 0) + + def test_if_vtr_push_2ad(self): + """ 1AD VTR push 2 on non-sub-interfaces + """ + self.vapi.l2_interface_vlan_tag_rewrite( + sw_if_index=self.pg0.sw_if_index, vtr_op=L2_VTR_OP.L2_PUSH_2, + push_dot1q=0, tag1=450, tag2=350) + + if_state = self.vapi.sw_interface_dump( + sw_if_index=self.pg0.sw_if_index) + self.assertEqual(if_state[0].sw_if_index, self.pg0.sw_if_index) + self.assertEqual(if_state[0].vtr_op, L2_VTR_OP.L2_PUSH_2) + self.assertEqual(if_state[0].vtr_tag1, 450) # outer + self.assertEqual(if_state[0].vtr_tag2, 350) # inner + self.assertEqual(if_state[0].vtr_push_dot1q, 0) if __name__ == '__main__': unittest.main(testRunner=VppTestRunner)