vxlan: vxlan/vxlan.api API cleanup
[vpp.git] / test / test_vtr.py
index 02df2ce..c3704f1 100644 (file)
@@ -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)