2.26. test_classify_l2_acl module

Classifier-based L2 ACL Test Case HLD:

class test_classify_l2_acl.TestClassifyAcl(methodName='runTest')

Bases: framework.VppTestCase

Classifier-based L2 input and output ACL Test Case

DENY = 0
ICMP = 1
ICMPv4 = 0
ICMPv6 = 1
IP = 0
IPRANDOM = -1
IPV4 = 0
IPV6 = 1
PERMIT = 1
PORTS_ALL = -1
PORTS_RANGE = 0
PORTS_RANGE_2 = 1
PROTO_ALL = 0
TCP = 0
UDP = 1
bd_id = 1
build_classify_table(src_mac='', dst_mac='', ether_type='', etype='', key='mac', hit_next_index=4294967295)
static build_mac_mask(dst_mac='', src_mac='', ether_type='')

Build MAC ACL mask data with hexstring format

Parameters:
  • dst_mac (str) – source MAC address <0-ffffffffffff>
  • src_mac (str) – destination MAC address <0-ffffffffffff>
  • ether_type (str) – ethernet type <0-ffff>
static build_mac_match(dst_mac='', src_mac='', ether_type='')

Build MAC ACL match data with hexstring format

Parameters:
  • dst_mac (str) – source MAC address <x:x:x:x:x:x>
  • src_mac (str) – destination MAC address <x:x:x:x:x:x>
  • ether_type (str) – ethernet type <0-ffff>
create_classify_session(intf, table_index, match, hit_next_index=4294967295, is_add=1)

Create Classify Session

Parameters:
  • intf (VppInterface) – Interface to apply classify session.
  • table_index (int) – table index to identify classify table.
  • match (str) – matched value for interested traffic.
  • pbr_action (int) – enable/disable PBR feature.
  • vrfid (int) – VRF id.
  • is_add (int) – option to configure classify session. - create(1) or delete(0)
create_classify_table(key, mask, data_offset=0, is_add=1)

Create Classify Table

Parameters:
  • key (str) – key for classify table (ex, ACL name).
  • mask (str) – mask value for interested traffic.
  • match_n_vectors (int) –
  • is_add (int) – option to configure classify table. - create(1) or delete(0)
create_hosts(count, start=0)

Create required number of host MAC addresses and distribute them among interfaces. Create host IPv4 address for every host MAC address.

Parameters:
  • count (int) – Number of hosts to create MAC/IPv4 addresses for.
  • start (int) – Number to start numbering from.
create_stream(src_if, packet_sizes, traffic_type=0, ipv6=0, proto=-1, ports=0, fragments=False, pkt_raw=True, etype=-1)

Create input packet stream for defined interface using hosts or deleted_hosts list.

Parameters:
  • src_if (object) – Interface to create packet stream for.
  • packet_sizes (list) – List of required packet sizes.
  • traffic_type – 1: ICMP packet, 2: IPv6 with EH, 0: otherwise.
Returns:

Stream of packets.

create_upper_layer(packet_index, proto, ports=0)
icmp4_code = 3
icmp4_code_from_2 = 5
icmp4_code_to_2 = 20
icmp4_type = 8
icmp4_type_2 = 8
icmp6_code = 3
icmp6_code_from_2 = 8
icmp6_code_to_2 = 42
icmp6_type = 128
icmp6_type_2 = 128
input_acl_set_interface(intf, table_index, is_add=1)

Configure Input ACL interface

Parameters:
  • intf (VppInterface) – Interface to apply Input ACL feature.
  • table_index (int) – table index to identify classify table.
  • is_add (int) – option to configure classify session. - enable(1) or disable(0)
output_acl_set_interface(intf, table_index, is_add=1)

Configure Output ACL interface

Parameters:
  • intf (VppInterface) – Interface to apply Output ACL feature.
  • table_index (int) – table index to identify classify table.
  • is_add (int) – option to configure classify session. - enable(1) or disable(0)
proto = [[6, 17], [1, 58]]
proto_map = {1: 'ICMP', 6: 'TCP', 17: 'UDP', 58: 'ICMPv6EchoRequest'}
run_traffic_no_check()
run_verify_negat_test(traffic_type=0, ip_type=0, proto=-1, ports=0, frags=False, etype=-1)
run_verify_test(traffic_type=0, ip_type=0, proto=-1, ports=0, frags=False, pkt_raw=True, etype=-1)
setUp()

Clear trace before running each test

classmethod setUpClass()

Perform standard class setup (defined by class method setUpClass in class VppTestCase) before running the test case, set test case related variables and configure VPP.

tcp_dport_from = 40000
tcp_dport_from_2 = 20000
tcp_dport_to = 45000
tcp_dport_to_2 = 25000
tcp_sport_from = 30
tcp_sport_from_2 = 130
tcp_sport_to = 35
tcp_sport_to_2 = 135
tearDown()

Show various debug prints after each test.

test_0000_warmup_test()

Learn the MAC addresses

test_0010_inacl_permit_src_mac()

Input L2 ACL test - permit source MAC

Test scenario for basic IP ACL with source IP
  • Create IPv4 stream for pg0 -> pg1 interface.
  • Create ACL with source MAC address.
  • Send and verify received packets on pg1 interface.
test_0011_inacl_permit_dst_mac()

Input L2 ACL test - permit destination MAC

Test scenario for basic IP ACL with source IP
  • Create IPv4 stream for pg0 -> pg1 interface.
  • Create ACL with destination MAC address.
  • Send and verify received packets on pg1 interface.
test_0012_inacl_permit_src_dst_mac()

Input L2 ACL test - permit source and destination MAC

Test scenario for basic IP ACL with source IP
  • Create IPv4 stream for pg0 -> pg1 interface.
  • Create ACL with source and destination MAC addresses.
  • Send and verify received packets on pg1 interface.
test_0013_inacl_permit_ether_type()

Input L2 ACL test - permit ether_type

Test scenario for basic IP ACL with source IP
  • Create IPv4 stream for pg0 -> pg1 interface.
  • Create ACL with destination MAC address.
  • Send and verify received packets on pg1 interface.
test_0015_inacl_deny()

Input L2 ACL test - deny

Test scenario for basic IP ACL with source IP
  • Create IPv4 stream for pg0 -> pg1 interface.
  • Create ACL with source MAC address.
  • Send and verify no received packets on pg1 interface.
test_0020_outacl_permit()

Output L2 ACL test - permit

Test scenario for basic IP ACL with source IP
  • Create IPv4 stream for pg0 -> pg1 interface.
  • Create ACL with source MAC address.
  • Send and verify received packets on pg1 interface.
test_0025_outacl_deny()

Output L2 ACL test - deny

Test scenario for basic IP ACL with source IP
  • Create IPv4 stream for pg0 -> pg1 interface.
  • Create ACL with source MAC address.
  • Send and verify no received packets on pg1 interface.
test_0030_inoutacl_permit()

Input+Output L2 ACL test - permit

Test scenario for basic IP ACL with source IP
  • Create IPv4 stream for pg0 -> pg1 interface.
  • Create ACLs with source MAC address.
  • Send and verify received packets on pg1 interface.
udp_dport_from = 20000
udp_dport_from_2 = 30000
udp_dport_to = 25000
udp_dport_to_2 = 35000
udp_sport_from = 10
udp_sport_from_2 = 90
udp_sport_to = 15
udp_sport_to_2 = 95
verify_capture(pg_if, capture, traffic_type=0, ip_type=0, etype=-1)

Verify captured input packet stream for defined interface.

Parameters:
  • pg_if (object) – Interface to verify captured packet stream for.
  • capture (list) – Captured packet stream.
  • traffic_type – 1: ICMP packet, 2: IPv6 with EH, 0: otherwise.