From e5a3ae0179b807efc2202a47e11d698396dd0780 Mon Sep 17 00:00:00 2001 From: Stanislav Zaikin Date: Tue, 5 Apr 2022 19:23:12 +0200 Subject: policer: output interface policer Type: improvement Change-Id: Ibc1b5059ed51c34334340534e9eb68121f556bce Signed-off-by: Stanislav Zaikin --- test/test_ipsec_tun_if_esp.py | 18 +++++++++--------- test/test_policer_input.py | 43 +++++++++++++++++++++++++++++++++---------- test/vpp_policer.py | 16 +++++++++++++--- 3 files changed, 55 insertions(+), 22 deletions(-) (limited to 'test') diff --git a/test/test_ipsec_tun_if_esp.py b/test/test_ipsec_tun_if_esp.py index 8b6f619b47f..14c9b3e3f11 100644 --- a/test/test_ipsec_tun_if_esp.py +++ b/test/test_ipsec_tun_if_esp.py @@ -25,7 +25,7 @@ from util import ppp from vpp_papi import VppEnum from vpp_papi_provider import CliFailedCommandError from vpp_acl import AclRule, VppAcl, VppAclInterface -from vpp_policer import PolicerAction, VppPolicer +from vpp_policer import PolicerAction, VppPolicer, Dir def config_tun_params(p, encryption_type, tun_if, src=None, dst=None): @@ -513,7 +513,7 @@ class TestIpsec6TunIfEspHandoff(TemplateIpsec6TunIfEsp, policer.add_vpp_config() # Start policing on tun - policer.apply_vpp_config(p.tun_if.sw_if_index, True) + policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, True) for pol_bind in [1, 0]: policer.bind_vpp_config(pol_bind, True) @@ -557,7 +557,7 @@ class TestIpsec6TunIfEspHandoff(TemplateIpsec6TunIfEsp, stats1['conform_packets'] + stats1['violate_packets']) - policer.apply_vpp_config(p.tun_if.sw_if_index, False) + policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, False) policer.remove_vpp_config() @@ -585,7 +585,7 @@ class TestIpsec4TunIfEspHandoff(TemplateIpsec4TunIfEsp, policer.add_vpp_config() # Start policing on tun - policer.apply_vpp_config(p.tun_if.sw_if_index, True) + policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, True) for pol_bind in [1, 0]: policer.bind_vpp_config(pol_bind, True) @@ -629,7 +629,7 @@ class TestIpsec4TunIfEspHandoff(TemplateIpsec4TunIfEsp, stats1['conform_packets'] + stats1['violate_packets']) - policer.apply_vpp_config(p.tun_if.sw_if_index, False) + policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, False) policer.remove_vpp_config() @@ -2726,7 +2726,7 @@ class TestIpsecItf4(TemplateIpsec, policer.add_vpp_config() # Start policing on tun - policer.apply_vpp_config(p.tun_if.sw_if_index, True) + policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, True) self.verify_tun_44(p, count=n_pkts) self.assertEqual(p.tun_if.get_rx_stats(), n_pkts) @@ -2740,7 +2740,7 @@ class TestIpsecItf4(TemplateIpsec, self.assertGreater(stats['violate_packets'], 0) # Stop policing on tun - policer.apply_vpp_config(p.tun_if.sw_if_index, False) + policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, False) self.verify_tun_44(p, count=n_pkts) # No new policer stats @@ -3017,7 +3017,7 @@ class TestIpsecItf6(TemplateIpsec, policer.add_vpp_config() # Start policing on tun - policer.apply_vpp_config(p.tun_if.sw_if_index, True) + policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, True) self.verify_tun_66(p, count=n_pkts) self.assertEqual(p.tun_if.get_rx_stats(), n_pkts) @@ -3031,7 +3031,7 @@ class TestIpsecItf6(TemplateIpsec, self.assertGreater(stats['violate_packets'], 0) # Stop policing on tun - policer.apply_vpp_config(p.tun_if.sw_if_index, False) + policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, False) self.verify_tun_66(p, count=n_pkts) # No new policer stats diff --git a/test/test_policer_input.py b/test/test_policer_input.py index c95f6643ff2..9a4266ceb12 100644 --- a/test/test_policer_input.py +++ b/test/test_policer_input.py @@ -8,13 +8,13 @@ from scapy.layers.l2 import Ether from scapy.packet import Raw from framework import VppTestCase, VppTestRunner from vpp_papi import VppEnum -from vpp_policer import VppPolicer, PolicerAction +from vpp_policer import VppPolicer, PolicerAction, Dir NUM_PKTS = 67 class TestPolicerInput(VppTestCase): - """ Policer on an input interface """ + """ Policer on an interface """ vpp_worker_count = 2 def setUp(self): @@ -38,8 +38,7 @@ class TestPolicerInput(VppTestCase): i.admin_down() super(TestPolicerInput, self).tearDown() - def test_policer_input(self): - """ Input Policing """ + def policer_interface_test(self, dir: Dir): pkts = self.pkt * NUM_PKTS action_tx = PolicerAction( @@ -51,8 +50,12 @@ class TestPolicerInput(VppTestCase): violate_action=action_tx) policer.add_vpp_config() + sw_if_index = (self.pg0.sw_if_index + if dir == Dir.RX + else self.pg1.sw_if_index) + # Start policing on pg0 - policer.apply_vpp_config(self.pg0.sw_if_index, True) + policer.apply_vpp_config(sw_if_index, dir, True) rx = self.send_and_expect(self.pg0, pkts, self.pg1, worker=0) stats = policer.get_stats() @@ -63,7 +66,7 @@ class TestPolicerInput(VppTestCase): self.assertGreater(stats['violate_packets'], 0) # Stop policing on pg0 - policer.apply_vpp_config(self.pg0.sw_if_index, False) + policer.apply_vpp_config(sw_if_index, dir, False) rx = self.send_and_expect(self.pg0, pkts, self.pg1, worker=0) @@ -74,8 +77,15 @@ class TestPolicerInput(VppTestCase): policer.remove_vpp_config() - def test_policer_handoff(self): - """ Worker thread handoff """ + def test_policer_input(self): + """ Input Policing """ + self.policer_interface_test(Dir.RX) + + def test_policer_output(self): + """ Output Policing """ + self.policer_interface_test(Dir.TX) + + def policer_handoff_test(self, dir: Dir): pkts = self.pkt * NUM_PKTS action_tx = PolicerAction( @@ -87,11 +97,15 @@ class TestPolicerInput(VppTestCase): violate_action=action_tx) policer.add_vpp_config() + sw_if_index = (self.pg0.sw_if_index + if dir == Dir.RX + else self.pg1.sw_if_index) + # Bind the policer to worker 1 policer.bind_vpp_config(1, True) # Start policing on pg0 - policer.apply_vpp_config(self.pg0.sw_if_index, True) + policer.apply_vpp_config(sw_if_index, dir, True) for worker in [0, 1]: self.send_and_expect(self.pg0, pkts, self.pg1, worker=worker) @@ -138,9 +152,18 @@ class TestPolicerInput(VppTestCase): stats['violate_packets']) # Stop policing on pg0 - policer.apply_vpp_config(self.pg0.sw_if_index, False) + policer.apply_vpp_config(sw_if_index, dir, False) policer.remove_vpp_config() + def test_policer_handoff_input(self): + """ Worker thread handoff policer input""" + self.policer_handoff_test(Dir.RX) + + def test_policer_handoff_output(self): + """ Worker thread handoff policer output""" + self.policer_handoff_test(Dir.TX) + + if __name__ == '__main__': unittest.main(testRunner=VppTestRunner) diff --git a/test/vpp_policer.py b/test/vpp_policer.py index 2c47eed75fd..0f3b073d6e3 100644 --- a/test/vpp_policer.py +++ b/test/vpp_policer.py @@ -1,5 +1,11 @@ from vpp_object import VppObject from vpp_ip import INVALID_INDEX +from enum import Enum + + +class Dir(Enum): + RX = 0 + TX = 1 class PolicerAction(): @@ -61,9 +67,13 @@ class VppPolicer(VppObject): self._test.vapi.policer_bind(name=self.name, worker_index=worker, bind_enable=bind) - def apply_vpp_config(self, if_index, apply): - self._test.vapi.policer_input(name=self.name, sw_if_index=if_index, - apply=apply) + 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) + else: + self._test.vapi.policer_output( + name=self.name, sw_if_index=if_index, apply=apply) def query_vpp_config(self): dump = self._test.vapi.policer_dump( -- cgit 1.2.3-korg