text_type = str
+def mk_counter():
+ return {'packets': 0, 'bytes': 0}
+
+
class VppIpsecSpd(VppObject):
"""
VPP SPD DB
return True
return False
- def get_stats(self):
+ def get_stats(self, worker=None):
c = self.test.statistics.get_counter("/net/ipsec/policy")
- return c[0][self.stat_index]
+ if worker is None:
+ total = mk_counter()
+ for t in c:
+ total['packets'] += t[self.stat_index]['packets']
+ return total
+ else:
+ # +1 to skip main thread
+ return c[worker+1][self.stat_index]
class VppIpsecSA(VppObject):
return True
return False
- def get_stats(self):
+ def get_stats(self, worker=None):
c = self.test.statistics.get_counter("/net/ipsec/sa")
- return c[0][self.stat_index]
+ if worker is None:
+ total = mk_counter()
+ for t in c:
+ total['packets'] += t[self.stat_index]['packets']
+ return total
+ else:
+ # +1 to skip main thread
+ return c[worker+1][self.stat_index]
class VppIpsecTunProtect(VppObject):
VPP IPSEC tunnel protection
"""
- def __init__(self, test, itf, sa_out, sas_in):
+ def __init__(self, test, itf, sa_out, sas_in, nh=None):
self.test = test
self.itf = itf
self.sas_in = []
for sa in sas_in:
self.sas_in.append(sa.id)
self.sa_out = sa_out.id
+ self.nh = nh
+ if not self.nh:
+ self.nh = "0.0.0.0"
def update_vpp_config(self, sa_out, sas_in):
self.sas_in = []
'sw_if_index': self.itf._sw_if_index,
'n_sa_in': len(self.sas_in),
'sa_out': self.sa_out,
- 'sa_in': self.sas_in})
+ 'sa_in': self.sas_in,
+ 'nh': self.nh})
def object_id(self):
- return "ipsec-tun-protect-%s" % self.itf
+ return "ipsec-tun-protect-%s-%s" % (self.itf, self.nh)
def add_vpp_config(self):
self.test.vapi.ipsec_tunnel_protect_update(
'sw_if_index': self.itf._sw_if_index,
'n_sa_in': len(self.sas_in),
'sa_out': self.sa_out,
- 'sa_in': self.sas_in})
+ 'sa_in': self.sas_in,
+ 'nh': self.nh})
self.test.registry.register(self, self.test.logger)
def remove_vpp_config(self):
self.test.vapi.ipsec_tunnel_protect_del(
- sw_if_index=self.itf.sw_if_index)
+ sw_if_index=self.itf.sw_if_index,
+ nh=self.nh)
def query_vpp_config(self):
bs = self.test.vapi.ipsec_tunnel_protect_dump(
sw_if_index=self.itf.sw_if_index)
for b in bs:
- if b.tun.sw_if_index == self.itf.sw_if_index:
+ if b.tun.sw_if_index == self.itf.sw_if_index and \
+ self.nh == str(b.tun.nh):
return True
return False