From 2d1a62bfddbba92a0aeec5c68e9b0a7903b178da Mon Sep 17 00:00:00 2001 From: Maxime Peim Date: Fri, 6 Jan 2023 11:57:38 +0000 Subject: policer: API policer selection by index Policer API calls were only by policer name. It is now possible to select a policer by its index. Some functionalities are also added to allow updating a policer configuration and to refill its token buckets. Some dead codes are being removed, and small fixes made. Type: improvement Signed-off-by: Maxime Peim Change-Id: I4cc8fda0fc7c635a4110da3e757356b150f9b606 --- test/vpp_policer.py | 59 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 22 deletions(-) (limited to 'test/vpp_policer.py') diff --git a/test/vpp_policer.py b/test/vpp_policer.py index b0097b370e5..b48f4c6af1c 100644 --- a/test/vpp_policer.py +++ b/test/vpp_policer.py @@ -57,46 +57,54 @@ class VppPolicer(VppObject): def policer_index(self): return self._policer_index + @property + def config(self): + return { + "cir": self.cir, + "eir": self.eir, + "cb": self.commited_burst, + "eb": self.excess_burst, + "rate_type": self.rate_type, + "round_type": self.round_type, + "type": self.type, + "color_aware": self.color_aware, + "conform_action": self.conform_action.encode(), + "exceed_action": self.exceed_action.encode(), + "violate_action": self.violate_action.encode(), + } + def add_vpp_config(self): - r = self._test.vapi.policer_add_del( - name=self.name, - cir=self.cir, - eir=self.eir, - cb=self.commited_burst, - eb=self.excess_burst, - rate_type=self.rate_type, - round_type=self.round_type, - type=self.type, - color_aware=self.color_aware, - conform_action=self.conform_action.encode(), - exceed_action=self.exceed_action.encode(), - violate_action=self.violate_action.encode(), - ) + r = self._test.vapi.policer_add(name=self.name, infos=self.config) self._test.registry.register(self, self._test.logger) self._policer_index = r.policer_index return self + def update(self): + self._test.vapi.policer_update( + policer_index=self._policer_index, infos=self.config + ) + def remove_vpp_config(self): - self._test.vapi.policer_add_del(is_add=False, name=self.name) + self._test.vapi.policer_del(policer_index=self._policer_index) self._policer_index = INVALID_INDEX def bind_vpp_config(self, worker, bind): - self._test.vapi.policer_bind( - name=self.name, worker_index=worker, bind_enable=bind + self._test.vapi.policer_bind_v2( + policer_index=self._policer_index, worker_index=worker, bind_enable=bind ) def apply_vpp_config(self, if_index, dir: Dir, apply): if dir == Dir.RX: - self._test.vapi.policer_input( - name=self.name, sw_if_index=if_index, apply=apply + self._test.vapi.policer_input_v2( + policer_index=self._policer_index, sw_if_index=if_index, apply=apply ) else: - self._test.vapi.policer_output( - name=self.name, sw_if_index=if_index, apply=apply + self._test.vapi.policer_output_v2( + policer_index=self._policer_index, sw_if_index=if_index, apply=apply ) def query_vpp_config(self): - dump = self._test.vapi.policer_dump(match_name_valid=True, match_name=self.name) + dump = self._test.vapi.policer_dump_v2(policer_index=self._policer_index) for policer in dump: if policer.name == self.name: return True @@ -105,6 +113,13 @@ class VppPolicer(VppObject): def object_id(self): return "policer-%s" % (self.name) + def get_details(self): + dump = self._test.vapi.policer_dump_v2(policer_index=self._policer_index) + for policer in dump: + if policer.name == self.name: + return policer + raise self._test.vapi.VPPValueError("Missing policer") + def get_stats(self, worker=None): conform = self._test.statistics.get_counter("/net/policer/conform") exceed = self._test.statistics.get_counter("/net/policer/exceed") -- cgit 1.2.3-korg