dpdk: fix rss configuration error issue
[vpp.git] / test / test_ipip.py
index 989330f..137e3c5 100644 (file)
@@ -8,7 +8,7 @@ from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
 from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable
 from socket import AF_INET, AF_INET6, inet_pton
-import StringIO
+from util import reassemble4
 
 """ Testipip is a subclass of  VPPTestCase classes.
 
@@ -17,21 +17,6 @@ IPIP tests.
 """
 
 
-# Replace by deframent from scapy.
-def reassemble(listoffragments):
-    buffer = StringIO.StringIO()
-    first = listoffragments[0]
-    buffer.seek(20)
-    for pkt in listoffragments:
-        buffer.seek(pkt[IP].frag*8)
-        buffer.write(pkt[IP].payload)
-    first.len = len(buffer.getvalue()) + 20
-    first.flags = 0
-    del(first.chksum)
-    header = str(first[IP])[:20]
-    return first[IP].__class__(header + buffer.getvalue())
-
-
 class TestIPIP(VppTestCase):
     """ IPIP Test Case """
 
@@ -41,6 +26,10 @@ class TestIPIP(VppTestCase):
         cls.create_pg_interfaces(range(2))
         cls.interfaces = list(cls.pg_interfaces)
 
+    @classmethod
+    def tearDownClass(cls):
+        super(TestIPIP, cls).tearDownClass()
+
     def setUp(self):
         super(TestIPIP, self).setUp()
         for i in self.interfaces:
@@ -60,7 +49,7 @@ class TestIPIP(VppTestCase):
                 i.admin_down()
 
     def validate(self, rx, expected):
-        self.assertEqual(rx, expected.__class__(str(expected)))
+        self.assertEqual(rx, expected.__class__(expected))
 
     def generate_ip4_frags(self, payload_length, fragment_size):
         p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
@@ -91,8 +80,8 @@ class TestIPIP(VppTestCase):
         # Set interface up and enable IP on it
         self.vapi.sw_interface_set_flags(sw_if_index, 1)
         self.vapi.sw_interface_set_unnumbered(
-            ip_sw_if_index=self.pg0.sw_if_index,
-            sw_if_index=sw_if_index)
+            sw_if_index=self.pg0.sw_if_index,
+            unnumbered_sw_if_index=sw_if_index)
 
         # Add IPv4 and IPv6 routes via tunnel interface
         ip4_via_tunnel = VppIpRoute(
@@ -116,7 +105,7 @@ class TestIPIP(VppTestCase):
         p6_reply = (IP(src=self.pg0.local_ip4, dst=self.pg1.remote_ip4,
                        proto='ipv6', id=0, tos=42) / p_inner_ip6 / p_payload)
         p6_reply.ttl -= 1
-        rx = self.send_and_expect(self.pg0, p6*10, self.pg1)
+        rx = self.send_and_expect(self.pg0, p6 * 10, self.pg1)
         for p in rx:
             self.validate(p[1], p6_reply)
 
@@ -129,7 +118,7 @@ class TestIPIP(VppTestCase):
                     p_ip4_inner / p_payload)
         p4_reply.ttl -= 1
         p4_reply.id = 0
-        rx = self.send_and_expect(self.pg0, p4*10, self.pg1)
+        rx = self.send_and_expect(self.pg0, p4 * 10, self.pg1)
         for p in rx:
             self.validate(p[1], p4_reply)
 
@@ -142,11 +131,11 @@ class TestIPIP(VppTestCase):
                            dst=self.pg0.local_ip4) / p_ip4 / p_payload)
         p4_reply = (p_ip4 / p_payload)
         p4_reply.ttl -= 1
-        rx = self.send_and_expect(self.pg1, p4*10, self.pg0)
+        rx = self.send_and_expect(self.pg1, p4 * 10, self.pg0)
         for p in rx:
             self.validate(p[1], p4_reply)
 
-        err = self.statistics.get_counter(
+        err = self.statistics.get_err_counter(
             '/err/ipip4-input/packets decapsulated')
         self.assertEqual(err, 10)
 
@@ -156,11 +145,11 @@ class TestIPIP(VppTestCase):
                            dst=self.pg0.local_ip4) / p_ip6 / p_payload)
         p6_reply = (p_ip6 / p_payload)
         p6_reply.hlim = 63
-        rx = self.send_and_expect(self.pg1, p6*10, self.pg0)
+        rx = self.send_and_expect(self.pg1, p6 * 10, self.pg0)
         for p in rx:
             self.validate(p[1], p6_reply)
 
-        err = self.statistics.get_counter(
+        err = self.statistics.get_err_counter(
             '/err/ipip4-input/packets decapsulated')
         self.assertEqual(err, 20)
 
@@ -171,6 +160,11 @@ class TestIPIP(VppTestCase):
             sw_if_index=self.pg1.sw_if_index,
             enable_ip4=1)
 
+        self.vapi.ip_reassembly_set(timeout_ms=1000, max_reassemblies=1000,
+                                    max_reassembly_length=1000,
+                                    expire_walk_interval_ms=10000,
+                                    is_ip6=0)
+
         # Send lots of fragments, verify reassembled packet
         frags, p4_reply = self.generate_ip4_frags(3131, 1400)
         f = []
@@ -184,7 +178,7 @@ class TestIPIP(VppTestCase):
         for p in rx:
             self.validate(p[1], p4_reply)
 
-        err = self.statistics.get_counter(
+        err = self.statistics.get_err_counter(
             '/err/ipip4-input/packets decapsulated')
         self.assertEqual(err, 1020)
 
@@ -214,7 +208,7 @@ class TestIPIP(VppTestCase):
         self.pg1.add_stream(frags)
         self.pg_start()
         rx = self.pg0.get_capture(6)
-        reass_pkt = reassemble(rx)
+        reass_pkt = reassemble4(rx)
         p4_reply.ttl -= 1
         p4_reply.id = 256
         self.validate(reass_pkt, p4_reply)
@@ -225,7 +219,7 @@ class TestIPIP(VppTestCase):
         self.pg1.add_stream(frags)
         self.pg_start()
         rx = self.pg0.get_capture(2)
-        reass_pkt = reassemble(rx)
+        reass_pkt = reassemble4(rx)
         p4_reply.ttl -= 1
         p4_reply.id = 512
         self.validate(reass_pkt, p4_reply)
@@ -263,7 +257,12 @@ class TestIPIP6(VppTestCase):
         cls.create_pg_interfaces(range(2))
         cls.interfaces = list(cls.pg_interfaces)
 
+    @classmethod
+    def tearDownClass(cls):
+        super(TestIPIP6, cls).tearDownClass()
+
     def setUp(self):
+        super(TestIPIP6, self).setUp()
         for i in self.interfaces:
             i.admin_up()
             i.config_ip4()
@@ -292,7 +291,8 @@ class TestIPIP6(VppTestCase):
         self.tunnel_if_index = sw_if_index
         self.vapi.sw_interface_set_flags(sw_if_index, 1)
         self.vapi.sw_interface_set_unnumbered(
-            ip_sw_if_index=self.pg0.sw_if_index, sw_if_index=sw_if_index)
+            sw_if_index=self.pg0.sw_if_index,
+            unnumbered_sw_if_index=sw_if_index)
 
         # Add IPv4 and IPv6 routes via tunnel interface
         ip4_via_tunnel = VppIpRoute(
@@ -320,7 +320,7 @@ class TestIPIP6(VppTestCase):
         rv = self.vapi.ipip_del_tunnel(sw_if_index=self.tunnel_if_index)
 
     def validate(self, rx, expected):
-        self.assertEqual(rx, expected.__class__(str(expected)))
+        self.assertEqual(rx, expected.__class__(expected))
 
     def generate_ip6_frags(self, payload_length, fragment_size):
         p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
@@ -362,7 +362,7 @@ class TestIPIP6(VppTestCase):
                          hlim=64, tc=42) /
                     p_ip6 / p_payload)
         p6_reply[1].hlim -= 1
-        rx = self.send_and_expect(self.pg0, p6*11, self.pg1)
+        rx = self.send_and_expect(self.pg0, p6 * 11, self.pg1)
         for p in rx:
             self.validate(p[1], p6_reply)
 
@@ -372,7 +372,7 @@ class TestIPIP6(VppTestCase):
                          dst=self.pg1.remote_ip6, hlim=64, tc=42) /
                     p_ip4 / p_payload)
         p4_reply[1].ttl -= 1
-        rx = self.send_and_expect(self.pg0, p4*11, self.pg1)
+        rx = self.send_and_expect(self.pg0, p4 * 11, self.pg1)
         for p in rx:
             self.validate(p[1], p4_reply)
 
@@ -391,7 +391,7 @@ class TestIPIP6(VppTestCase):
                              dst=self.pg0.local_ip6) / p_ip4 / p_payload)
         p4_reply = (p_ip4 / p_payload)
         p4_reply.ttl -= 1
-        rx = self.send_and_expect(self.pg1, p4*11, self.pg0)
+        rx = self.send_and_expect(self.pg1, p4 * 11, self.pg0)
         for p in rx:
             self.validate(p[1], p4_reply)
 
@@ -401,7 +401,7 @@ class TestIPIP6(VppTestCase):
                              dst=self.pg0.local_ip6) / p_ip6 / p_payload)
         p6_reply = (p_ip6 / p_payload)
         p6_reply.hlim = 63
-        rx = self.send_and_expect(self.pg1, p6*11, self.pg0)
+        rx = self.send_and_expect(self.pg1, p6 * 11, self.pg0)
         for p in rx:
             self.validate(p[1], p6_reply)
 
@@ -420,8 +420,13 @@ class TestIPIP6(VppTestCase):
             sw_if_index=self.pg1.sw_if_index,
             enable_ip6=1)
 
+        self.vapi.ip_reassembly_set(timeout_ms=1000, max_reassemblies=1000,
+                                    max_reassembly_length=1000,
+                                    expire_walk_interval_ms=10000,
+                                    is_ip6=1)
+
         # Send lots of fragments, verify reassembled packet
-        before_cnt = self.statistics.get_counter(
+        before_cnt = self.statistics.get_err_counter(
             '/err/ipip6-input/packets decapsulated')
         frags, p6_reply = self.generate_ip6_frags(3131, 1400)
         f = []
@@ -435,7 +440,7 @@ class TestIPIP6(VppTestCase):
         for p in rx:
             self.validate(p[1], p6_reply)
 
-        cnt = self.statistics.get_counter(
+        cnt = self.statistics.get_err_counter(
             '/err/ipip6-input/packets decapsulated')
         self.assertEqual(cnt, before_cnt + 1000)
 
@@ -473,7 +478,7 @@ class TestIPIP6(VppTestCase):
         rx = self.pg1.get_capture(2)
 
         # Scapy defragment doesn't deal well with multiple layers
-        # of samy type / Ethernet header first
+        # of same type / Ethernet header first
         f = [p[1] for p in rx]
         reass_pkt = defragment6(f)
         self.validate(reass_pkt, p6_reply)