From cd01fb4237b78a1805e1dd4b018bd03eb342580c Mon Sep 17 00:00:00 2001 From: Jakub Grajciar Date: Mon, 2 Mar 2020 13:16:53 +0100 Subject: policer: API cleanup Use consistent API types. Type: fix Signed-off-by: Jakub Grajciar Change-Id: Ia14f33992353b419b70b55beed63ab8ed6a2e837 Signed-off-by: Jakub Grajciar --- test/test_ip4.py | 8 +++--- test/test_ip6.py | 8 +++--- test/vpp_papi_provider.py | 37 +------------------------ test/vpp_policer.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 44 deletions(-) create mode 100644 test/vpp_policer.py (limited to 'test') diff --git a/test/test_ip4.py b/test/test_ip4.py index 46a8306815b..87059c7361b 100644 --- a/test/test_ip4.py +++ b/test/test_ip4.py @@ -21,6 +21,7 @@ from vpp_sub_interface import VppSubInterface, VppDot1QSubint, VppDot1ADSubint from vpp_papi import VppEnum from vpp_neighbor import VppNeighbor from vpp_lo_interface import VppLoInterface +from vpp_policer import VppPolicer NUM_PKTS = 67 @@ -1390,8 +1391,8 @@ class TestIPPunt(VppTestCase): # # add a policer # - policer = self.vapi.policer_add_del(b"ip4-punt", 400, 0, 10, 0, - rate_type=1) + policer = VppPolicer(self, "ip4-punt", 400, 0, 10, 0, rate_type=1) + policer.add_vpp_config() self.vapi.ip_punt_police(policer.policer_index) self.vapi.cli("clear trace") @@ -1411,8 +1412,7 @@ class TestIPPunt(VppTestCase): # remove the policer. back to full rx # self.vapi.ip_punt_police(policer.policer_index, is_add=0) - self.vapi.policer_add_del(b"ip4-punt", 400, 0, 10, 0, - rate_type=1, is_add=0) + policer.remove_vpp_config() self.send_and_expect(self.pg0, pkts, self.pg1) # diff --git a/test/test_ip6.py b/test/test_ip6.py index f4b9ef8c647..b27cfdb4fed 100644 --- a/test/test_ip6.py +++ b/test/test_ip6.py @@ -28,6 +28,7 @@ from vpp_ip_route import VppIpRoute, VppRoutePath, find_route, VppIpMRoute, \ from vpp_neighbor import find_nbr, VppNeighbor from vpp_pg_interface import is_ipv6_misc from vpp_sub_interface import VppSubInterface, VppDot1QSubint +from vpp_policer import VppPolicer from ipaddress import IPv6Network, IPv6Address AF_INET6 = socket.AF_INET6 @@ -2118,8 +2119,8 @@ class TestIP6Punt(VppTestCase): # # add a policer # - policer = self.vapi.policer_add_del(b"ip6-punt", 400, 0, 10, 0, - rate_type=1) + policer = VppPolicer(self, "ip6-punt", 400, 0, 10, 0, rate_type=1) + policer.add_vpp_config() self.vapi.ip_punt_police(policer.policer_index, is_ip6=1) self.vapi.cli("clear trace") @@ -2139,8 +2140,7 @@ class TestIP6Punt(VppTestCase): # remove the policer. back to full rx # self.vapi.ip_punt_police(policer.policer_index, is_add=0, is_ip6=1) - self.vapi.policer_add_del(b"ip6-punt", 400, 0, 10, 0, - rate_type=1, is_add=0) + policer.remove_vpp_config() self.send_and_expect(self.pg0, pkts, self.pg1) # diff --git a/test/vpp_papi_provider.py b/test/vpp_papi_provider.py index 832fd8ff93c..52ce492adbd 100644 --- a/test/vpp_papi_provider.py +++ b/test/vpp_papi_provider.py @@ -96,7 +96,7 @@ defaultmapping = { 'ip6_table_index': 4294967295, 'l2_table_index': 4294967295, }, 'pppoe_add_del_session': {'is_add': 1, }, - 'policer_add_del': {'is_add': 1, 'conform_action_type': 1, }, + 'policer_add_del': {'is_add': 1, 'conform_action': {'type': 1}, }, 'proxy_arp_add_del': {'is_add': 1, }, 'proxy_arp_intfc_enable_disable': {'is_enable': 1, }, 'set_ip_flow_hash': {'src': 1, 'dst': 1, 'sport': 1, 'dport': 1, @@ -1166,41 +1166,6 @@ class VppPapiProvider(object): return self.api( self.papi.macip_acl_dump, {'acl_index': acl_index}) - def policer_add_del(self, - name, - cir, - eir, - cb, - eb, - is_add=1, - rate_type=0, - round_type=0, - ptype=0, - color_aware=0, - conform_action_type=1, - conform_dscp=0, - exceed_action_type=0, - exceed_dscp=0, - violate_action_type=0, - violate_dscp=0): - return self.api(self.papi.policer_add_del, - {'name': name, - 'cir': cir, - 'eir': eir, - 'cb': cb, - 'eb': eb, - 'is_add': is_add, - 'rate_type': rate_type, - 'round_type': round_type, - 'type': ptype, - 'color_aware': color_aware, - 'conform_action_type': conform_action_type, - 'conform_dscp': conform_dscp, - 'exceed_action_type': exceed_action_type, - 'exceed_dscp': exceed_dscp, - 'violate_action_type': violate_action_type, - 'violate_dscp': violate_dscp}) - def ip_punt_police(self, policer_index, is_ip6=0, diff --git a/test/vpp_policer.py b/test/vpp_policer.py new file mode 100644 index 00000000000..49d11859646 --- /dev/null +++ b/test/vpp_policer.py @@ -0,0 +1,69 @@ +from vpp_object import VppObject +from vpp_ip import INVALID_INDEX + + +class PolicerAction(): + """ sse2 qos action """ + + def __init__(self, type, dscp): + self.type = type + self.dscp = dscp + + def encode(self): + return {'type': self.type, 'dscp': self.dscp} + + +class VppPolicer(VppObject): + """ Policer """ + + def __init__(self, test, name, cir, eir, commited_burst, excess_burst, + rate_type=0, round_type=0, type=0, color_aware=False, + conform_action=PolicerAction(1, 0), + exceed_action=PolicerAction(0, 0), + violate_action=PolicerAction(0, 0)): + self._test = test + self.name = name + self.cir = cir + self.eir = eir + self.commited_burst = commited_burst + self.excess_burst = excess_burst + self.rate_type = rate_type + self.round_type = round_type + self.type = type + self.color_aware = color_aware + self.conform_action = conform_action + self.exceed_action = exceed_action + self.violate_action = violate_action + self._policer_index = INVALID_INDEX + + @property + def policer_index(self): + return self._policer_index + + 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()) + self._test.registry.register(self, self._test.logger) + self._policer_index = r.policer_index + return self + + def remove_vpp_config(self): + self._test.vapi.policer_add_del(is_add=False, name=self.name) + self._policer_index = INVALID_INDEX + + def query_vpp_config(self): + dump = self._test.vapi.policer_dump( + match_name_valid=True, match_name=self.name) + for policer in dump: + if policer.name == self.name: + return True + return False + + def object_id(self): + return ("policer-%s" % (self.name)) -- cgit 1.2.3-korg