IPSEC: Pass the algorithm salt (used in GCM) over the API
[vpp.git] / test / vpp_ipsec.py
index 1218c4b..77a9d74 100644 (file)
@@ -1,4 +1,4 @@
-from vpp_object import *
+from vpp_object import VppObject
 from ipaddress import ip_address
 from vpp_papi import VppEnum
 
@@ -24,9 +24,6 @@ class VppIpsecSpd(VppObject):
     def remove_vpp_config(self):
         self.test.vapi.ipsec_spd_add_del(self.id, is_add=0)
 
-    def __str__(self):
-        return self.object_id()
-
     def object_id(self):
         return "ipsec-spd-%d" % self.id
 
@@ -41,7 +38,7 @@ class VppIpsecSpd(VppObject):
 class VppIpsecSpdItfBinding(VppObject):
     """
     VPP SPD DB to interface binding
-    (i.e. this SPD is used on this interfce)
+    (i.e. this SPD is used on this interface)
     """
 
     def __init__(self, test, spd, itf):
@@ -59,9 +56,6 @@ class VppIpsecSpdItfBinding(VppObject):
                                                    self.itf.sw_if_index,
                                                    is_add=0)
 
-    def __str__(self):
-        return self.object_id()
-
     def object_id(self):
         return "bind-%s-to-%s" % (self.spd.id, self.itf)
 
@@ -111,7 +105,7 @@ class VppIpsecSpdEntry(VppObject):
         self.remote_port_stop = remote_port_stop
 
     def add_vpp_config(self):
-        self.test.vapi.ipsec_spd_entry_add_del(
+        rv = self.test.vapi.ipsec_spd_entry_add_del(
             self.spd.id,
             self.sa_id,
             self.local_start,
@@ -127,6 +121,7 @@ class VppIpsecSpdEntry(VppObject):
             local_port_stop=self.local_port_stop,
             remote_port_start=self.remote_port_start,
             remote_port_stop=self.remote_port_stop)
+        self.stat_index = rv.stat_index
         self.test.registry.register(self, self.test.logger)
 
     def remove_vpp_config(self):
@@ -148,9 +143,6 @@ class VppIpsecSpdEntry(VppObject):
             remote_port_stop=self.remote_port_stop,
             is_add=0)
 
-    def __str__(self):
-        return self.object_id()
-
     def object_id(self):
         return "spd-entry-%d-%d-%d-%d-%d-%d" % (self.spd.id,
                                                 self.priority,
@@ -171,6 +163,10 @@ class VppIpsecSpdEntry(VppObject):
                 return True
         return False
 
+    def get_stats(self):
+        c = self.test.statistics.get_counter("/net/ipsec/policy")
+        return c[0][self.stat_index]
+
 
 class VppIpsecSA(VppObject):
     """
@@ -182,7 +178,7 @@ class VppIpsecSA(VppObject):
                  crypto_alg, crypto_key,
                  proto,
                  tun_src=None, tun_dst=None,
-                 flags=None):
+                 flags=None, salt=0):
         e = VppEnum.vl_api_ipsec_sad_flags_t
         self.test = test
         self.id = id
@@ -192,6 +188,7 @@ class VppIpsecSA(VppObject):
         self.crypto_alg = crypto_alg
         self.crypto_key = crypto_key
         self.proto = proto
+        self.salt = salt
 
         self.tun_src = tun_src
         self.tun_dst = tun_dst
@@ -208,7 +205,7 @@ class VppIpsecSA(VppObject):
             self.tun_dst = ip_address(text_type(tun_dst))
 
     def add_vpp_config(self):
-        self.test.vapi.ipsec_sad_entry_add_del(
+        r = self.test.vapi.ipsec_sad_entry_add_del(
             self.id,
             self.spi,
             self.integ_alg,
@@ -218,7 +215,9 @@ class VppIpsecSA(VppObject):
             self.proto,
             (self.tun_src if self.tun_src else []),
             (self.tun_dst if self.tun_dst else []),
-            flags=self.flags)
+            flags=self.flags,
+            salt=self.salt)
+        self.stat_index = r.stat_index
         self.test.registry.register(self, self.test.logger)
 
     def remove_vpp_config(self):
@@ -235,15 +234,16 @@ class VppIpsecSA(VppObject):
             flags=self.flags,
             is_add=0)
 
-    def __str__(self):
-        return self.object_id()
-
     def object_id(self):
         return "ipsec-sa-%d" % self.id
 
     def query_vpp_config(self):
         bs = self.test.vapi.ipsec_sa_dump()
         for b in bs:
-            if b.sa_id == self.id:
+            if b.entry.sad_id == self.id:
                 return True
         return False
+
+    def get_stats(self):
+        c = self.test.statistics.get_counter("/net/ipsec/sa")
+        return c[0][self.stat_index]