session: API cleanup
[vpp.git] / test / test_punt.py
index e947529..ecd34f6 100644 (file)
@@ -706,6 +706,7 @@ class TestExceptionPuntSocket(TestPuntSocket):
     def setUp(self):
         super(TestExceptionPuntSocket, self).setUp()
 
+        self.create_pg_interfaces(range(2))
         for i in self.pg_interfaces:
             i.config_ip4()
             i.resolve_arp()
@@ -792,37 +793,17 @@ class TestExceptionPuntSocket(TestPuntSocket):
             }
         }
 
-        #
-        # we need an IPSec tunnels for this to work otherwise ESP gets dropped
-        # due to unknown IP proto
-        #
-        VppIpsecTunInterface(self, self.pg0, 1000, 1000,
-                             (VppEnum.vl_api_ipsec_crypto_alg_t.
-                              IPSEC_API_CRYPTO_ALG_AES_CBC_128),
-                             b"0123456701234567",
-                             b"0123456701234567",
-                             (VppEnum.vl_api_ipsec_integ_alg_t.
-                              IPSEC_API_INTEG_ALG_SHA1_96),
-                             b"0123456701234567",
-                             b"0123456701234567").add_vpp_config()
-        VppIpsecTunInterface(self, self.pg0, 1001, 1001,
-                             (VppEnum.vl_api_ipsec_crypto_alg_t.
-                              IPSEC_API_CRYPTO_ALG_AES_CBC_128),
-                             b"0123456701234567",
-                             b"0123456701234567",
-                             (VppEnum.vl_api_ipsec_integ_alg_t.
-                              IPSEC_API_INTEG_ALG_SHA1_96),
-                             b"0123456701234567",
-                             b"0123456701234567",
-                             udp_encap=True).add_vpp_config()
-
         #
         # we're dealing with IPSec tunnels punting for no-such-tunnel
         # adn SPI=0
         #
         cfgs = dict()
-        cfgs['ipsec4-no-such-tunnel'] = {'spi': 99, 'udp': False}
-        cfgs['ipsec4-spi-o-udp-0'] = {'spi': 0, 'udp': True}
+        cfgs['ipsec4-no-such-tunnel'] = {'spi': 99,
+                                         'udp': False,
+                                         'itf': self.pg0}
+        cfgs['ipsec4-spi-o-udp-0'] = {'spi': 0,
+                                      'udp': True,
+                                      'itf': self.pg1}
 
         #
         # find the VPP ID for these punt exception reasin
@@ -830,6 +811,8 @@ class TestExceptionPuntSocket(TestPuntSocket):
         rs = self.vapi.punt_reason_dump()
         for key in cfgs:
             for r in rs:
+                print(r.reason.name)
+                print(key)
                 if r.reason.name == key:
                     cfgs[key]['id'] = r.reason.id
                     cfgs[key]['vpp'] = copy.deepcopy(
@@ -850,9 +833,10 @@ class TestExceptionPuntSocket(TestPuntSocket):
         # create packet streams for 'no-such-tunnel' exception
         #
         for cfg in cfgs.values():
-            pkt = (Ether(src=self.pg0.remote_mac,
-                         dst=self.pg0.local_mac) /
-                   IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4))
+            pkt = (Ether(src=cfg['itf'].remote_mac,
+                         dst=cfg['itf'].local_mac) /
+                   IP(src=cfg['itf'].remote_ip4,
+                      dst=cfg['itf'].local_ip4))
             if (cfg['udp']):
                 pkt = pkt / UDP(sport=666, dport=4500)
             pkt = (pkt / ESP(spi=cfg['spi'], seq=3) /
@@ -863,7 +847,7 @@ class TestExceptionPuntSocket(TestPuntSocket):
         # send packets for each SPI we expect to be punted
         #
         for cfg in cfgs.values():
-            self.send_and_assert_no_replies(self.pg0, cfg['pkts'])
+            self.send_and_assert_no_replies(cfg['itf'], cfg['pkts'])
 
         #
         # verify the punted packets arrived on the associated socket
@@ -874,6 +858,42 @@ class TestExceptionPuntSocket(TestPuntSocket):
                                  cfg['spi'], cfg['udp'])
 
         #
+        # add some tunnels, make sure it still punts
+        #
+        VppIpsecTunInterface(self, self.pg0, 1000, 1000,
+                             (VppEnum.vl_api_ipsec_crypto_alg_t.
+                              IPSEC_API_CRYPTO_ALG_AES_CBC_128),
+                             b"0123456701234567",
+                             b"0123456701234567",
+                             (VppEnum.vl_api_ipsec_integ_alg_t.
+                              IPSEC_API_INTEG_ALG_SHA1_96),
+                             b"0123456701234567",
+                             b"0123456701234567").add_vpp_config()
+        VppIpsecTunInterface(self, self.pg1, 1000, 1000,
+                             (VppEnum.vl_api_ipsec_crypto_alg_t.
+                              IPSEC_API_CRYPTO_ALG_AES_CBC_128),
+                             b"0123456701234567",
+                             b"0123456701234567",
+                             (VppEnum.vl_api_ipsec_integ_alg_t.
+                              IPSEC_API_INTEG_ALG_SHA1_96),
+                             b"0123456701234567",
+                             b"0123456701234567",
+                             udp_encap=True).add_vpp_config()
+
+        #
+        # send packets for each SPI we expect to be punted
+        #
+        for cfg in cfgs.values():
+            self.send_and_assert_no_replies(cfg['itf'], cfg['pkts'])
+
+        #
+        # verify the punted packets arrived on the associated socket
+        #
+        for cfg in cfgs.values():
+            rx = cfg['sock'].close()
+            self.verify_esp_pkts(rx, len(cfg['pkts']),
+                                 cfg['spi'], cfg['udp'])
+        #
         # socket deregister
         #
         for cfg in cfgs.values():
@@ -1051,7 +1071,6 @@ class TestPunt(VppTestCase):
         for i in self.pg_interfaces:
             i.unconfig_ip4()
             i.unconfig_ip6()
-            i.ip6_disable()
             i.admin_down()
         super(TestPunt, self).tearDown()