ptf/saivrf.py (2,225 lines of code) (raw):
# Copyright 2021-present Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Thrift SAI interface VRF tests
"""
import binascii
from sai_thrift.sai_headers import *
from sai_base_test import *
@group("draft")
class VrfForwardingTest(SaiHelper):
'''
Base inter-VRF forwarding tests
'''
def setUp(self):
super(VrfForwardingTest, self).setUp()
self.route_list = []
self.nbor_list = []
self.nhop_list = []
self.test_vrf = sai_thrift_create_virtual_router(self.client)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
# create and configure ingress RIF
self.iport = self.port24
self.iport_dev = self.dev_port24
self.test_irif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.test_vrf,
port_id=self.iport)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.iport_nbor_mac = "00:11:11:11:11:11"
iport_ipv4 = "10.10.10.1"
iport_ipv6 = "2001:0db8::1:1"
self.iport_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(iport_ipv4),
router_interface_id=self.test_irif,
type=SAI_NEXT_HOP_TYPE_IP)
self.nhop_list.append(self.iport_nhop)
self.iport_nhop_v6 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(iport_ipv6),
router_interface_id=self.test_irif,
type=SAI_NEXT_HOP_TYPE_IP)
self.nhop_list.append(self.iport_nhop_v6)
self.iport_nbor = sai_thrift_neighbor_entry_t(
rif_id=self.test_irif, ip_address=sai_ipaddress(iport_ipv4))
sai_thrift_create_neighbor_entry(self.client,
self.iport_nbor,
dst_mac_address=self.iport_nbor_mac)
self.nbor_list.append(self.iport_nbor)
self.iport_nbor_v6 = sai_thrift_neighbor_entry_t(
rif_id=self.test_irif, ip_address=sai_ipaddress(iport_ipv6))
sai_thrift_create_neighbor_entry(self.client,
self.iport_nbor_v6,
dst_mac_address=self.iport_nbor_mac)
self.nbor_list.append(self.iport_nbor_v6)
self.iport_route = sai_thrift_route_entry_t(
vr_id=self.test_vrf, destination=sai_ipprefix(iport_ipv4 + '/24'))
sai_thrift_create_route_entry(self.client,
self.iport_route,
next_hop_id=self.iport_nhop)
self.route_list.append(self.iport_route)
self.iport_route_v6 = sai_thrift_route_entry_t(
vr_id=self.test_vrf, destination=sai_ipprefix(iport_ipv6 + '/112'))
sai_thrift_create_route_entry(self.client,
self.iport_route_v6,
next_hop_id=self.iport_nhop_v6)
self.route_list.append(self.iport_route_v6)
# create and configure egress RIF
self.eport = self.port25
self.eport_dev = self.dev_port25
self.test_erif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.test_vrf,
port_id=self.eport)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.eport_nbor_mac = "00:22:22:22:22:22"
eport_ipv4 = "20.20.20.2"
eport_ipv6 = "2001:0db8::2:2"
self.eport_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(eport_ipv4),
router_interface_id=self.test_erif,
type=SAI_NEXT_HOP_TYPE_IP)
self.nhop_list.append(self.eport_nhop)
self.eport_nhop_v6 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(eport_ipv6),
router_interface_id=self.test_erif,
type=SAI_NEXT_HOP_TYPE_IP)
self.nhop_list.append(self.eport_nhop_v6)
self.eport_nbor = sai_thrift_neighbor_entry_t(
rif_id=self.test_erif, ip_address=sai_ipaddress(eport_ipv4))
sai_thrift_create_neighbor_entry(self.client,
self.eport_nbor,
dst_mac_address=self.eport_nbor_mac)
self.nbor_list.append(self.eport_nbor)
self.eport_nbor_v6 = sai_thrift_neighbor_entry_t(
rif_id=self.test_erif, ip_address=sai_ipaddress(eport_ipv6))
sai_thrift_create_neighbor_entry(self.client,
self.eport_nbor_v6,
dst_mac_address=self.eport_nbor_mac)
self.nbor_list.append(self.eport_nbor_v6)
self.eport_route = sai_thrift_route_entry_t(
vr_id=self.test_vrf, destination=sai_ipprefix(eport_ipv4 + '/24'))
sai_thrift_create_route_entry(self.client,
self.eport_route,
next_hop_id=self.eport_nhop)
self.route_list.append(self.eport_route)
self.eport_route_v6 = sai_thrift_route_entry_t(
vr_id=self.test_vrf, destination=sai_ipprefix(eport_ipv6 + '/112'))
sai_thrift_create_route_entry(self.client,
self.eport_route_v6,
next_hop_id=self.eport_nhop_v6)
self.route_list.append(self.eport_route_v6)
def runTest(self):
self.vrfStateTest()
self.interVrfFwdL3NhopTest()
self.interVrfFwdL3LagNhopTest()
self.interVrfFwdSviNhopTest()
self.interVrfFwdSubportNhopTest()
self.interVrfFwdEcmpNhopTest()
def tearDown(self):
for route in self.route_list:
sai_thrift_remove_route_entry(self.client, route)
for nbor in self.nbor_list:
sai_thrift_remove_neighbor_entry(self.client, nbor)
for nhop in self.nhop_list:
sai_thrift_remove_next_hop(self.client, nhop)
sai_thrift_remove_router_interface(self.client, self.test_erif)
sai_thrift_remove_router_interface(self.client, self.test_irif)
sai_thrift_remove_virtual_router(self.client, self.test_vrf)
super(VrfForwardingTest, self).tearDown()
def vrfStateTest(self):
'''
Verify forwarding for different IPv4 and IPv6 states on VRF
'''
print("\nvrfStateTest()")
src_mac = self.iport_nbor_mac
src_ip = "10.10.10.10"
src_ipv6 = "2001:0db8::1:10"
dst_ip = "20.20.20.20"
dst_ipv6 = "2001:0db8::2:20"
pkt = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=src_mac,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=64)
exp_pkt = simple_udp_packet(eth_dst=self.eport_nbor_mac,
eth_src=ROUTER_MAC,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=63)
ipv6_pkt = simple_udpv6_packet(eth_dst=ROUTER_MAC,
eth_src=src_mac,
ipv6_dst=dst_ipv6,
ipv6_src=src_ipv6,
ipv6_hlim=64)
exp_ipv6_pkt = simple_udpv6_packet(eth_dst=self.eport_nbor_mac,
eth_src=ROUTER_MAC,
ipv6_dst=dst_ipv6,
ipv6_src=src_ipv6,
ipv6_hlim=63)
try:
# IPv4 disabled, IPv6 disabled
sai_thrift_set_virtual_router_attribute(
self.client, self.test_vrf, admin_v4_state=False)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
sai_thrift_set_virtual_router_attribute(
self.client, self.test_vrf, admin_v6_state=False)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
print("IPv4 disabled, IPv6 disabled")
send_packet(self, self.iport_dev, pkt)
verify_no_other_packets(self)
print("\tIPv4 dropped")
send_packet(self, self.iport_dev, ipv6_pkt)
verify_no_other_packets(self)
print("\tIPv6 dropped")
# IPv4 enabled, IPv6 disabled
sai_thrift_set_virtual_router_attribute(
self.client, self.test_vrf, admin_v4_state=True)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
print("IPv4 enabled, IPv6 disabled")
send_packet(self, self.iport_dev, pkt)
verify_packet(self, exp_pkt, self.eport_dev)
print("\tIPv4 forwarded")
send_packet(self, self.iport_dev, ipv6_pkt)
verify_no_other_packets(self)
print("\tIPv6 dropped")
# IPv4 disabled, IPv6 enabled
sai_thrift_set_virtual_router_attribute(
self.client, self.test_vrf, admin_v4_state=False)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
sai_thrift_set_virtual_router_attribute(
self.client, self.test_vrf, admin_v6_state=True)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
print("IPv4 disabled, IPv6 enabled")
send_packet(self, self.iport_dev, pkt)
verify_no_other_packets(self)
print("\tIPv4 dropped")
send_packet(self, self.iport_dev, ipv6_pkt)
verify_packet(self, exp_ipv6_pkt, self.eport_dev)
print("\tIPv6 forwarded")
# IPv4 enabled, IPv6 enabled
sai_thrift_set_virtual_router_attribute(
self.client, self.test_vrf, admin_v4_state=True)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
print("IPv4 enabled, IPv6 enabled")
send_packet(self, self.iport_dev, pkt)
verify_packet(self, exp_pkt, self.eport_dev)
print("\tIPv4 forwarded")
send_packet(self, self.iport_dev, ipv6_pkt)
verify_packet(self, exp_ipv6_pkt, self.eport_dev)
print("\tIPv6 forwarded")
finally:
sai_thrift_flush_fdb_entries(
self.client, entry_type=SAI_FDB_FLUSH_ENTRY_TYPE_ALL)
sai_thrift_set_virtual_router_attribute(self.client,
self.test_vrf,
admin_v4_state=True)
sai_thrift_set_virtual_router_attribute(self.client,
self.test_vrf,
admin_v6_state=True)
def interVrfFwdL3NhopTest(self):
'''
Verify inter VRF forwarding with regular L3 nexthop
'''
print("\ninterVrfFwdL3NhopTest()")
test_dev_port = self.dev_port10
test_rif = self.port10_rif
test_mac = "00:33:33:33:33:33"
test_ip = "30.30.30.1"
try:
test_nbor = sai_thrift_neighbor_entry_t(
rif_id=test_rif, ip_address=sai_ipaddress(test_ip))
sai_thrift_create_neighbor_entry(self.client,
test_nbor,
dst_mac_address=test_mac)
test_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip),
router_interface_id=test_rif,
type=SAI_NEXT_HOP_TYPE_IP)
test_route = sai_thrift_route_entry_t(
vr_id=self.test_vrf, destination=sai_ipprefix(test_ip + '/24'))
sai_thrift_create_route_entry(self.client,
test_route,
next_hop_id=test_nhop)
test_route2 = sai_thrift_route_entry_t(
vr_id=self.default_vrf,
destination=sai_ipprefix(test_ip + '/24'))
sai_thrift_create_route_entry(self.client,
test_route2,
next_hop_id=test_nhop)
src_mac = self.iport_nbor_mac
src_ip = "10.10.10.10"
dst_ip = "30.30.30.30"
pkt = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=src_mac,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=64)
exp_pkt = simple_udp_packet(eth_dst=test_mac,
eth_src=ROUTER_MAC,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=63)
print("Sending inter-VRF packet to regular L3 nexthop")
send_packet(self, self.iport_dev, pkt)
verify_packet(self, exp_pkt, test_dev_port)
print("\tOK")
finally:
sai_thrift_flush_fdb_entries(
self.client, entry_type=SAI_FDB_FLUSH_ENTRY_TYPE_ALL)
sai_thrift_remove_route_entry(self.client, test_route)
sai_thrift_remove_route_entry(self.client, test_route2)
sai_thrift_remove_next_hop(self.client, test_nhop)
sai_thrift_remove_neighbor_entry(self.client, test_nbor)
def interVrfFwdL3LagNhopTest(self):
'''
Verify inter VRF forwarding with regular L3 LAG nexthop
'''
print("\ninterVrfFwdL3LagNhopTest()")
test_lag_dev_ports = [self.dev_port14, self.dev_port15,
self.dev_port16]
test_lag_rif = self.lag3_rif
test_mac = "00:33:33:33:33:33"
test_ip = "30.30.30.1"
try:
test_nbor = sai_thrift_neighbor_entry_t(
rif_id=test_lag_rif, ip_address=sai_ipaddress(test_ip))
sai_thrift_create_neighbor_entry(self.client,
test_nbor,
dst_mac_address=test_mac)
test_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip),
router_interface_id=test_lag_rif,
type=SAI_NEXT_HOP_TYPE_IP)
test_route = sai_thrift_route_entry_t(
vr_id=self.test_vrf, destination=sai_ipprefix(test_ip + '/24'))
sai_thrift_create_route_entry(self.client,
test_route,
next_hop_id=test_nhop)
test_route2 = sai_thrift_route_entry_t(
vr_id=self.default_vrf,
destination=sai_ipprefix(test_ip + '/24'))
sai_thrift_create_route_entry(self.client,
test_route2,
next_hop_id=test_nhop)
src_mac = self.iport_nbor_mac
src_ip = "10.10.10.10"
dst_ip = "30.30.30.30"
pkt = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=src_mac,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=64)
exp_pkt = simple_udp_packet(eth_dst=test_mac,
eth_src=ROUTER_MAC,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=63)
print("Sending inter-VRF packet to L3 LAG nexthop")
send_packet(self, self.iport_dev, pkt)
verify_packet_any_port(self, exp_pkt, test_lag_dev_ports)
print("\tOK")
finally:
sai_thrift_flush_fdb_entries(
self.client, entry_type=SAI_FDB_FLUSH_ENTRY_TYPE_ALL)
sai_thrift_remove_route_entry(self.client, test_route)
sai_thrift_remove_route_entry(self.client, test_route2)
sai_thrift_remove_next_hop(self.client, test_nhop)
sai_thrift_remove_neighbor_entry(self.client, test_nbor)
def interVrfFwdSviNhopTest(self):
'''
Verify inter VRF forwarding with SVI nexthop
'''
print("\ninterVrfFwdSviNhopTest()")
vlan_id = 30
test_vlan_rif = self.vlan30_rif
test_vlan_lag_dev_ports = [self.dev_port22, self.dev_port23]
test_vlan_dev_ports = [[self.dev_port20], [self.dev_port21],
test_vlan_lag_dev_ports]
test_mac = "00:33:33:33:33:33"
test_ip = "30.30.30.1"
try:
test_nbor = sai_thrift_neighbor_entry_t(
rif_id=test_vlan_rif, ip_address=sai_ipaddress(test_ip))
sai_thrift_create_neighbor_entry(self.client,
test_nbor,
dst_mac_address=test_mac)
test_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip),
router_interface_id=test_vlan_rif,
type=SAI_NEXT_HOP_TYPE_IP)
test_route = sai_thrift_route_entry_t(
vr_id=self.test_vrf, destination=sai_ipprefix(test_ip + '/24'))
sai_thrift_create_route_entry(self.client,
test_route,
next_hop_id=test_nhop)
test_route2 = sai_thrift_route_entry_t(
vr_id=self.default_vrf,
destination=sai_ipprefix(test_ip + '/24'))
sai_thrift_create_route_entry(self.client,
test_route2,
next_hop_id=test_nhop)
src_mac = self.iport_nbor_mac
src_ip = "10.10.10.10"
dst_ip = "30.30.30.30"
pkt = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=src_mac,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=64,
pktlen=100)
exp_pkt = simple_udp_packet(eth_dst=test_mac,
eth_src=ROUTER_MAC,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=63,
pktlen=100)
exp_tag_pkt = simple_udp_packet(eth_dst=test_mac,
eth_src=ROUTER_MAC,
ip_dst=dst_ip,
ip_src=src_ip,
dl_vlan_enable=True,
vlan_vid=vlan_id,
ip_ttl=63,
pktlen=104)
exp_pkt_list = [exp_pkt, exp_tag_pkt, exp_tag_pkt]
print("Sending inter-VRF packet to SVI nexthop")
send_packet(self, self.iport_dev, pkt)
verify_each_packet_on_multiple_port_lists(self, exp_pkt_list,
test_vlan_dev_ports)
print("\tOK")
finally:
sai_thrift_flush_fdb_entries(
self.client, entry_type=SAI_FDB_FLUSH_ENTRY_TYPE_ALL)
sai_thrift_remove_route_entry(self.client, test_route)
sai_thrift_remove_route_entry(self.client, test_route2)
sai_thrift_remove_next_hop(self.client, test_nhop)
sai_thrift_remove_neighbor_entry(self.client, test_nbor)
def interVrfFwdSubportNhopTest(self):
'''
Verify inter VRF forwarding with subport nexthop
'''
print("\ninterVrfFwdSubportNhopTest()")
test_port = self.port26
test_dev_port = self.dev_port26
test_mac1 = "00:33:33:33:33:1"
test_ip1 = "30.30.10.1"
vlan_id1 = 100
test_mac2 = "00:33:33:33:33:2"
test_ip2 = "30.30.20.2"
vlan_id2 = 200
try:
subport1_rif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_SUB_PORT,
virtual_router_id=self.default_vrf,
port_id=test_port,
outer_vlan_id=vlan_id1,
admin_v4_state=True)
test_nbor1 = sai_thrift_neighbor_entry_t(
rif_id=subport1_rif, ip_address=sai_ipaddress(test_ip1))
sai_thrift_create_neighbor_entry(self.client,
test_nbor1,
dst_mac_address=test_mac1)
test_nhop1 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip1),
router_interface_id=subport1_rif,
type=SAI_NEXT_HOP_TYPE_IP)
test_route11 = sai_thrift_route_entry_t(
vr_id=self.test_vrf,
destination=sai_ipprefix(test_ip1 + '/24'))
sai_thrift_create_route_entry(self.client,
test_route11,
next_hop_id=test_nhop1)
test_route12 = sai_thrift_route_entry_t(
vr_id=self.default_vrf,
destination=sai_ipprefix(test_ip1 + '/24'))
sai_thrift_create_route_entry(self.client,
test_route12,
next_hop_id=test_nhop1)
subport2_rif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_SUB_PORT,
virtual_router_id=self.default_vrf,
port_id=test_port,
outer_vlan_id=vlan_id2,
admin_v4_state=True)
test_nbor2 = sai_thrift_neighbor_entry_t(
rif_id=subport2_rif, ip_address=sai_ipaddress(test_ip2))
sai_thrift_create_neighbor_entry(self.client,
test_nbor2,
dst_mac_address=test_mac2)
test_nhop2 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip2),
router_interface_id=subport2_rif,
type=SAI_NEXT_HOP_TYPE_IP)
test_route21 = sai_thrift_route_entry_t(
vr_id=self.test_vrf,
destination=sai_ipprefix(test_ip2 + '/24'))
sai_thrift_create_route_entry(self.client,
test_route21,
next_hop_id=test_nhop2)
test_route22 = sai_thrift_route_entry_t(
vr_id=self.default_vrf,
destination=sai_ipprefix(test_ip2 + '/24'))
sai_thrift_create_route_entry(self.client,
test_route22,
next_hop_id=test_nhop2)
src_mac = self.iport_nbor_mac
src_ip = "10.10.10.10"
dst_ip1 = "30.30.10.10"
dst_ip2 = "30.30.20.20"
pkt1 = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=src_mac,
ip_dst=dst_ip1,
ip_src=src_ip,
ip_ttl=64,
pktlen=100)
exp_pkt1 = simple_udp_packet(eth_dst=test_mac1,
eth_src=ROUTER_MAC,
ip_dst=dst_ip1,
ip_src=src_ip,
dl_vlan_enable=True,
vlan_vid=vlan_id1,
ip_ttl=63,
pktlen=104)
pkt2 = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=src_mac,
ip_dst=dst_ip2,
ip_src=src_ip,
ip_ttl=64,
pktlen=100)
exp_pkt2 = simple_udp_packet(eth_dst=test_mac2,
eth_src=ROUTER_MAC,
ip_dst=dst_ip2,
ip_src=src_ip,
dl_vlan_enable=True,
vlan_vid=vlan_id2,
ip_ttl=63,
pktlen=104)
print("Sending inter-VRF packets to 2 subport nexthops")
send_packet(self, self.iport_dev, pkt1)
verify_packet(self, exp_pkt1, test_dev_port)
send_packet(self, self.iport_dev, pkt2)
verify_packet(self, exp_pkt2, test_dev_port)
print("\tOK")
finally:
sai_thrift_flush_fdb_entries(
self.client, entry_type=SAI_FDB_FLUSH_ENTRY_TYPE_ALL)
sai_thrift_remove_route_entry(self.client, test_route11)
sai_thrift_remove_route_entry(self.client, test_route12)
sai_thrift_remove_route_entry(self.client, test_route21)
sai_thrift_remove_route_entry(self.client, test_route22)
sai_thrift_remove_neighbor_entry(self.client, test_nbor1)
sai_thrift_remove_neighbor_entry(self.client, test_nbor2)
sai_thrift_remove_next_hop(self.client, test_nhop1)
sai_thrift_remove_next_hop(self.client, test_nhop2)
sai_thrift_remove_router_interface(self.client, subport1_rif)
sai_thrift_remove_router_interface(self.client, subport2_rif)
def interVrfFwdEcmpNhopTest(self):
'''
Verify inter VRF forwarding with ECMP nexthop
'''
print("\ninterVrfFwdEcmpNhopTest()")
test_dev_ports = [self.dev_port10, self.dev_port11, self.dev_port12]
test_rifs = [self.port10_rif, self.port11_rif, self.port12_rif]
test_mac1 = "00:33:33:33:33:11"
test_mac2 = "00:33:33:33:33:22"
test_mac3 = "00:33:33:33:33:33"
test_ip1 = "30.30.30.1"
test_ip2 = "30.30.30.2"
test_ip3 = "30.30.30.3"
try:
test_nbor1 = sai_thrift_neighbor_entry_t(
rif_id=test_rifs[0], ip_address=sai_ipaddress(test_ip1))
sai_thrift_create_neighbor_entry(self.client,
test_nbor1,
dst_mac_address=test_mac1)
test_nbor2 = sai_thrift_neighbor_entry_t(
rif_id=test_rifs[1], ip_address=sai_ipaddress(test_ip2))
sai_thrift_create_neighbor_entry(self.client,
test_nbor2,
dst_mac_address=test_mac2)
test_nbor3 = sai_thrift_neighbor_entry_t(
rif_id=test_rifs[2], ip_address=sai_ipaddress(test_ip3))
sai_thrift_create_neighbor_entry(self.client,
test_nbor3,
dst_mac_address=test_mac3)
test_nhop1 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip1),
router_interface_id=test_rifs[0],
type=SAI_NEXT_HOP_TYPE_IP)
test_nhop2 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip2),
router_interface_id=test_rifs[1],
type=SAI_NEXT_HOP_TYPE_IP)
test_nhop3 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip3),
router_interface_id=test_rifs[2],
type=SAI_NEXT_HOP_TYPE_IP)
test_nhop_group = sai_thrift_create_next_hop_group(
self.client, type=SAI_NEXT_HOP_GROUP_TYPE_ECMP)
nhop_group_mmbr1 = sai_thrift_create_next_hop_group_member(
self.client,
next_hop_group_id=test_nhop_group,
next_hop_id=test_nhop1)
nhop_group_mmbr2 = sai_thrift_create_next_hop_group_member(
self.client,
next_hop_group_id=test_nhop_group,
next_hop_id=test_nhop2)
nhop_group_mmbr3 = sai_thrift_create_next_hop_group_member(
self.client,
next_hop_group_id=test_nhop_group,
next_hop_id=test_nhop3)
test_ecmp_route = sai_thrift_route_entry_t(
vr_id=self.test_vrf,
destination=sai_ipprefix(test_ip1 + '/24'))
sai_thrift_create_route_entry(self.client,
test_ecmp_route,
next_hop_id=test_nhop_group)
src_mac = "00:aa:aa:aa:aa:aa"
src_ip_addr = "10.10.10.1"
dst_ip_addr = "30.30.30.30"
print("Sending set of inter-VRF packets to ECMP nexthop")
max_iter = 100
count = [0, 0, 0]
src_ip_addr = int(
binascii.hexlify(
socket.inet_aton(src_ip_addr)), 16)
dst_ip_addr = int(
binascii.hexlify(
socket.inet_aton(dst_ip_addr)), 16)
for _ in range(max_iter):
src_ip = socket.inet_ntoa(
binascii.unhexlify(format(src_ip_addr, 'x').zfill(8)))
dst_ip = socket.inet_ntoa(
binascii.unhexlify(format(dst_ip_addr, 'x').zfill(8)))
pkt = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=src_mac,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=64)
exp_pkt1 = simple_udp_packet(eth_dst=test_mac1,
eth_src=ROUTER_MAC,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=63)
exp_pkt2 = simple_udp_packet(eth_dst=test_mac2,
eth_src=ROUTER_MAC,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=63)
exp_pkt3 = simple_udp_packet(eth_dst=test_mac3,
eth_src=ROUTER_MAC,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=63)
send_packet(self, self.iport_dev, pkt)
rcv_idx = verify_any_packet_any_port(
self, [exp_pkt1, exp_pkt2, exp_pkt3], test_dev_ports)
count[rcv_idx] += 1
src_ip_addr += 1
dst_ip_addr += 1
print("\tOK")
for _ in range(len(count)):
self.assertTrue(count[1] >= ((max_iter / len(count)) * 0.7),
"Ecmp paths are not equally balanced")
finally:
sai_thrift_remove_route_entry(self.client, test_ecmp_route)
sai_thrift_remove_next_hop_group_member(
self.client, nhop_group_mmbr1)
sai_thrift_remove_next_hop_group_member(
self.client, nhop_group_mmbr2)
sai_thrift_remove_next_hop_group_member(
self.client, nhop_group_mmbr3)
sai_thrift_remove_next_hop_group(self.client, test_nhop_group)
sai_thrift_remove_next_hop(self.client, test_nhop1)
sai_thrift_remove_next_hop(self.client, test_nhop2)
sai_thrift_remove_next_hop(self.client, test_nhop3)
sai_thrift_remove_neighbor_entry(self.client, test_nbor1)
sai_thrift_remove_neighbor_entry(self.client, test_nbor2)
sai_thrift_remove_neighbor_entry(self.client, test_nbor3)
@group("draft")
class VrfIsolationTest(SaiHelper):
'''
Verify forwarding with overlapping IP addresses - when the same
addresses in different VRFs point to different nexthops
'''
def setUp(self):
super(VrfIsolationTest, self).setUp()
self.rif_list = []
self.test_vrf = sai_thrift_create_virtual_router(self.client)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.iport_ipv4 = "10.10.10.1"
self.iport_ipv6 = "2001:0db8::1:1"
self.eport_ipv4 = "20.20.20.2"
self.eport_ipv6 = "2001:0db8::2:2"
self.def_iport_mac = "00:aa:aa:11:11:11"
self.def_eport_mac = "00:aa:aa:22:22:22"
self.test_iport_mac = "00:bb:bb:11:11:11"
self.test_eport_mac = "00:bb:bb:22:22:22"
# ports in default VRF (24 and 25)
self.def_iport = self.port24
self.def_iport_dev = self.dev_port24
self.def_irif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.default_vrf,
port_id=self.def_iport)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.def_irif)
self.def_eport = self.port25
self.def_eport_dev = self.dev_port25
self.def_erif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.default_vrf,
port_id=self.def_eport)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.def_erif)
# ports in test VRF (26 and 27)
self.test_iport = self.port26
self.test_iport_dev = self.dev_port26
self.test_irif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.test_vrf,
port_id=self.test_iport)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.test_irif)
self.test_eport = self.port27
self.test_eport_dev = self.dev_port27
self.test_erif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.test_vrf,
port_id=self.test_eport)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.test_erif)
def runTest(self):
self.overlappingIPv4LpmTest()
self.overlappingIPv4HostTest()
self.overlappingIPv6LpmTest()
self.overlappingIPv6HostTest()
def tearDown(self):
for rif in self.rif_list:
sai_thrift_remove_router_interface(self.client, rif)
sai_thrift_remove_virtual_router(self.client, self.test_vrf)
super(VrfIsolationTest, self).tearDown()
def overlappingIPv4LpmTest(self):
'''
Verify overlapping IPv4 address with LPM match
'''
print("\noverlappingIPv4LpmTest()")
src_ipv4 = "10.10.10.10"
dst_ipv4 = "20.20.20.20"
def_v4_pkt = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=self.def_iport_mac,
ip_dst=dst_ipv4,
ip_src=src_ipv4,
ip_ttl=64)
def_v4_exp_pkt = simple_udp_packet(eth_dst=self.def_eport_mac,
eth_src=ROUTER_MAC,
ip_dst=dst_ipv4,
ip_src=src_ipv4,
ip_ttl=63)
test_v4_pkt = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=self.test_iport_mac,
ip_dst=dst_ipv4,
ip_src=src_ipv4,
ip_ttl=64)
test_v4_exp_pkt = simple_udp_packet(eth_dst=self.test_eport_mac,
eth_src=ROUTER_MAC,
ip_dst=dst_ipv4,
ip_src=src_ipv4,
ip_ttl=63)
try:
# configure default VRF nexthop
def_eport_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(self.eport_ipv4),
router_interface_id=self.def_erif,
type=SAI_NEXT_HOP_TYPE_IP)
def_eport_nbor = sai_thrift_neighbor_entry_t(
rif_id=self.def_erif,
ip_address=sai_ipaddress(self.eport_ipv4))
sai_thrift_create_neighbor_entry(
self.client,
def_eport_nbor,
dst_mac_address=self.def_eport_mac)
def_eport_route = sai_thrift_route_entry_t(
vr_id=self.default_vrf,
destination=sai_ipprefix(self.eport_ipv4 + '/24'))
sai_thrift_create_route_entry(self.client,
def_eport_route,
next_hop_id=def_eport_nhop)
# configure test VRF nexthop
test_eport_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(self.eport_ipv4),
router_interface_id=self.test_erif,
type=SAI_NEXT_HOP_TYPE_IP)
test_eport_nbor = sai_thrift_neighbor_entry_t(
rif_id=self.test_erif,
ip_address=sai_ipaddress(self.eport_ipv4))
sai_thrift_create_neighbor_entry(
self.client,
test_eport_nbor,
dst_mac_address=self.test_eport_mac)
test_eport_route = sai_thrift_route_entry_t(
vr_id=self.test_vrf,
destination=sai_ipprefix(self.eport_ipv4 + '/24'))
sai_thrift_create_route_entry(self.client,
test_eport_route,
next_hop_id=test_eport_nhop)
print("Verifying forwarding within default VRF")
send_packet(self, self.def_iport_dev, def_v4_pkt)
verify_packet(self, def_v4_exp_pkt, self.def_eport_dev)
print("\tOK")
print("Verifying forwarding within test VRF")
send_packet(self, self.test_iport_dev, test_v4_pkt)
verify_packet(self, test_v4_exp_pkt, self.test_eport_dev)
print("\tOK")
finally:
sai_thrift_remove_route_entry(self.client, test_eport_route)
sai_thrift_remove_neighbor_entry(self.client, test_eport_nbor)
sai_thrift_remove_next_hop(self.client, test_eport_nhop)
sai_thrift_remove_route_entry(self.client, def_eport_route)
sai_thrift_remove_neighbor_entry(self.client, def_eport_nbor)
sai_thrift_remove_next_hop(self.client, def_eport_nhop)
def overlappingIPv4HostTest(self):
'''
Verify overlapping IPv4 address with exact match
'''
print("\noverlappingIPv4HostTest()")
def_v4_pkt = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=self.def_iport_mac,
ip_dst=self.eport_ipv4,
ip_src=self.iport_ipv4,
ip_ttl=64)
def_v4_exp_pkt = simple_udp_packet(eth_dst=self.def_eport_mac,
eth_src=ROUTER_MAC,
ip_dst=self.eport_ipv4,
ip_src=self.iport_ipv4,
ip_ttl=63)
test_v4_pkt = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=self.test_iport_mac,
ip_dst=self.eport_ipv4,
ip_src=self.iport_ipv4,
ip_ttl=64)
test_v4_exp_pkt = simple_udp_packet(eth_dst=self.test_eport_mac,
eth_src=ROUTER_MAC,
ip_dst=self.eport_ipv4,
ip_src=self.iport_ipv4,
ip_ttl=63)
try:
def_eport_nbor = sai_thrift_neighbor_entry_t(
rif_id=self.def_erif,
ip_address=sai_ipaddress(self.eport_ipv4))
sai_thrift_create_neighbor_entry(
self.client,
def_eport_nbor,
dst_mac_address=self.def_eport_mac)
test_eport_nbor = sai_thrift_neighbor_entry_t(
rif_id=self.test_erif,
ip_address=sai_ipaddress(self.eport_ipv4))
sai_thrift_create_neighbor_entry(
self.client,
test_eport_nbor,
dst_mac_address=self.test_eport_mac)
print("Verifying forwarding within default VRF")
send_packet(self, self.def_iport_dev, def_v4_pkt)
verify_packet(self, def_v4_exp_pkt, self.def_eport_dev)
print("\tOK")
print("Verifying forwarding within test VRF")
send_packet(self, self.test_iport_dev, test_v4_pkt)
verify_packet(self, test_v4_exp_pkt, self.test_eport_dev)
print("\tOK")
finally:
sai_thrift_remove_neighbor_entry(self.client, test_eport_nbor)
sai_thrift_remove_neighbor_entry(self.client, def_eport_nbor)
def overlappingIPv6LpmTest(self):
'''
Verify overlapping IPv6 address with LPM match
'''
print("\noverlappingIPv6LpmTest()")
src_ipv6 = "2001:0db8::1:10"
dst_ipv6 = "2001:0db8::2:20"
def_v6_pkt = simple_udpv6_packet(eth_dst=ROUTER_MAC,
eth_src=self.def_iport_mac,
ipv6_dst=dst_ipv6,
ipv6_src=src_ipv6,
ipv6_hlim=64)
def_v6_exp_pkt = simple_udpv6_packet(eth_dst=self.def_eport_mac,
eth_src=ROUTER_MAC,
ipv6_dst=dst_ipv6,
ipv6_src=src_ipv6,
ipv6_hlim=63)
test_v6_pkt = simple_udpv6_packet(eth_dst=ROUTER_MAC,
eth_src=self.test_iport_mac,
ipv6_dst=dst_ipv6,
ipv6_src=src_ipv6,
ipv6_hlim=64)
test_v6_exp_pkt = simple_udpv6_packet(eth_dst=self.test_eport_mac,
eth_src=ROUTER_MAC,
ipv6_dst=dst_ipv6,
ipv6_src=src_ipv6,
ipv6_hlim=63)
try:
# configure default VRF nexthop
def_eport_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(self.eport_ipv6),
router_interface_id=self.def_erif,
type=SAI_NEXT_HOP_TYPE_IP)
def_eport_nbor = sai_thrift_neighbor_entry_t(
rif_id=self.def_erif,
ip_address=sai_ipaddress(self.eport_ipv6))
sai_thrift_create_neighbor_entry(
self.client,
def_eport_nbor,
dst_mac_address=self.def_eport_mac)
def_eport_route = sai_thrift_route_entry_t(
vr_id=self.default_vrf,
destination=sai_ipprefix(self.eport_ipv6 + '/112'))
sai_thrift_create_route_entry(self.client,
def_eport_route,
next_hop_id=def_eport_nhop)
# configure test VRF nexthop
test_eport_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(self.eport_ipv6),
router_interface_id=self.test_erif,
type=SAI_NEXT_HOP_TYPE_IP)
test_eport_nbor = sai_thrift_neighbor_entry_t(
rif_id=self.test_erif,
ip_address=sai_ipaddress(self.eport_ipv6))
sai_thrift_create_neighbor_entry(
self.client,
test_eport_nbor,
dst_mac_address=self.test_eport_mac)
test_eport_route = sai_thrift_route_entry_t(
vr_id=self.test_vrf,
destination=sai_ipprefix(self.eport_ipv6 + '/112'))
sai_thrift_create_route_entry(self.client,
test_eport_route,
next_hop_id=test_eport_nhop)
print("Verifying forwarding within default VRF")
send_packet(self, self.def_iport_dev, def_v6_pkt)
verify_packet(self, def_v6_exp_pkt, self.def_eport_dev)
print("\tOK")
print("Verifying forwarding within test VRF")
send_packet(self, self.test_iport_dev, test_v6_pkt)
verify_packet(self, test_v6_exp_pkt, self.test_eport_dev)
print("\tOK")
finally:
sai_thrift_remove_route_entry(self.client, test_eport_route)
sai_thrift_remove_neighbor_entry(self.client, test_eport_nbor)
sai_thrift_remove_next_hop(self.client, test_eport_nhop)
sai_thrift_remove_route_entry(self.client, def_eport_route)
sai_thrift_remove_neighbor_entry(self.client, def_eport_nbor)
sai_thrift_remove_next_hop(self.client, def_eport_nhop)
def overlappingIPv6HostTest(self):
'''
Verify overlapping IPv6 address with exact match
'''
print("\noverlappingIPv6HostTest()")
def_v6_pkt = simple_udpv6_packet(eth_dst=ROUTER_MAC,
eth_src=self.def_iport_mac,
ipv6_dst=self.eport_ipv6,
ipv6_src=self.iport_ipv6,
ipv6_hlim=64)
def_v6_exp_pkt = simple_udpv6_packet(eth_dst=self.def_eport_mac,
eth_src=ROUTER_MAC,
ipv6_dst=self.eport_ipv6,
ipv6_src=self.iport_ipv6,
ipv6_hlim=63)
test_v6_pkt = simple_udpv6_packet(eth_dst=ROUTER_MAC,
eth_src=self.test_iport_mac,
ipv6_dst=self.eport_ipv6,
ipv6_src=self.iport_ipv6,
ipv6_hlim=64)
test_v6_exp_pkt = simple_udpv6_packet(eth_dst=self.test_eport_mac,
eth_src=ROUTER_MAC,
ipv6_dst=self.eport_ipv6,
ipv6_src=self.iport_ipv6,
ipv6_hlim=63)
try:
# configure default VRF nexthop
def_eport_nbor = sai_thrift_neighbor_entry_t(
rif_id=self.def_erif,
ip_address=sai_ipaddress(self.eport_ipv6))
sai_thrift_create_neighbor_entry(
self.client,
def_eport_nbor,
dst_mac_address=self.def_eport_mac)
# configure test VRF nexthop
test_eport_nbor = sai_thrift_neighbor_entry_t(
rif_id=self.test_erif,
ip_address=sai_ipaddress(self.eport_ipv6))
sai_thrift_create_neighbor_entry(
self.client,
test_eport_nbor,
dst_mac_address=self.test_eport_mac)
print("Verifying forwarding within default VRF")
send_packet(self, self.def_iport_dev, def_v6_pkt)
verify_packet(self, def_v6_exp_pkt, self.def_eport_dev)
print("\tOK")
print("Verifying forwarding within test VRF")
send_packet(self, self.test_iport_dev, test_v6_pkt)
verify_packet(self, test_v6_exp_pkt, self.test_eport_dev)
print("\tOK")
finally:
sai_thrift_remove_neighbor_entry(self.client, test_eport_nbor)
sai_thrift_remove_neighbor_entry(self.client, def_eport_nbor)
@group("draft")
class VrfMultipleRifCreationTest(SaiHelper):
'''
Verify multiple RIF creation of type PORT, LAG, VLAN (with tagged
and untagged members), SUB_PORT and LOOPBACK for three different VRFs,
with routes pointing to each RIF type
'''
def setUp(self):
super(VrfMultipleRifCreationTest, self).setUp()
self.route_list = []
self.nhop_list = []
self.nbor_list = []
self.rif_list = []
# VRF 1 configuration
self.vrf1 = sai_thrift_create_virtual_router(self.client)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.port_rif1 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.vrf1,
port_id=self.port24)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.port_rif1)
self.lag_rif1 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.vrf1,
port_id=self.lag1)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.lag_rif1)
self.sub_port_rif1 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_SUB_PORT,
virtual_router_id=self.vrf1,
port_id=self.port10,
outer_vlan_id=100,
admin_v4_state=True)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.sub_port_rif1)
self.lpb_rif1 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_LOOPBACK,
virtual_router_id=self.vrf1)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.lpb_rif1)
self.svi_rif1 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_VLAN,
virtual_router_id=self.vrf1,
vlan_id=self.vlan10)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.svi_rif1)
self.ip_addr11 = "10.10.1.1"
self.mac11 = "00:11:11:11:11:11"
self.port_nbor1 = sai_thrift_neighbor_entry_t(
rif_id=self.port_rif1, ip_address=sai_ipaddress(self.ip_addr11))
sai_thrift_create_neighbor_entry(self.client,
self.port_nbor1,
dst_mac_address=self.mac11)
self.nbor_list.append(self.port_nbor1)
self.port_nhop1 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(self.ip_addr11),
router_interface_id=self.port_rif1,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.port_nhop1)
self.port_route1 = sai_thrift_route_entry_t(
vr_id=self.vrf1, destination=sai_ipprefix(self.ip_addr11 + '/24'))
sai_thrift_create_route_entry(self.client,
self.port_route1,
next_hop_id=self.port_nhop1)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.port_route1)
self.ip_addr12 = "10.10.2.1"
self.mac12 = "00:11:11:11:11:22"
self.lag_nbor1 = sai_thrift_neighbor_entry_t(
rif_id=self.lag_rif1, ip_address=sai_ipaddress(self.ip_addr12))
sai_thrift_create_neighbor_entry(self.client,
self.lag_nbor1,
dst_mac_address=self.mac12)
self.nbor_list.append(self.lag_nbor1)
self.lag_nhop1 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(self.ip_addr12),
router_interface_id=self.lag_rif1,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.lag_nhop1)
self.lag_route1 = sai_thrift_route_entry_t(
vr_id=self.vrf1, destination=sai_ipprefix(self.ip_addr12 + '/24'))
sai_thrift_create_route_entry(self.client,
self.lag_route1,
next_hop_id=self.lag_nhop1)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.lag_route1)
self.ip_addr13 = "10.10.3.1"
self.mac13 = "00:11:11:11:11:33"
self.sub_port_nbor1 = sai_thrift_neighbor_entry_t(
rif_id=self.sub_port_rif1,
ip_address=sai_ipaddress(self.ip_addr13))
sai_thrift_create_neighbor_entry(self.client,
self.sub_port_nbor1,
dst_mac_address=self.mac13)
self.nbor_list.append(self.sub_port_nbor1)
self.sub_port_nhop1 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(self.ip_addr13),
router_interface_id=self.sub_port_rif1,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.sub_port_nhop1)
self.sub_port_route1 = sai_thrift_route_entry_t(
vr_id=self.vrf1, destination=sai_ipprefix(self.ip_addr13 + '/24'))
sai_thrift_create_route_entry(self.client,
self.sub_port_route1,
next_hop_id=self.sub_port_nhop1)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.sub_port_route1)
self.ip_addr14 = "10.10.4.1"
self.lpb_nhop1 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(self.ip_addr14),
router_interface_id=self.lpb_rif1,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.lpb_nhop1)
self.lpb_route1 = sai_thrift_route_entry_t(
vr_id=self.vrf1, destination=sai_ipprefix(self.ip_addr14 + '/24'))
sai_thrift_create_route_entry(self.client,
self.lpb_route1,
next_hop_id=self.lpb_nhop1)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.lpb_route1)
self.ip_addr15 = "10.10.5.1"
self.mac15 = "00:11:11:11:11:55"
self.svi_nbor1 = sai_thrift_neighbor_entry_t(
rif_id=self.svi_rif1, ip_address=sai_ipaddress(self.ip_addr15))
sai_thrift_create_neighbor_entry(self.client,
self.svi_nbor1,
dst_mac_address=self.mac15)
self.nbor_list.append(self.svi_nbor1)
self.svi_nhop1 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(self.ip_addr15),
router_interface_id=self.svi_rif1,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.svi_nhop1)
self.svi_route1 = sai_thrift_route_entry_t(
vr_id=self.vrf1, destination=sai_ipprefix(self.ip_addr15 + '/24'))
sai_thrift_create_route_entry(self.client,
self.svi_route1,
next_hop_id=self.svi_nhop1)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.svi_route1)
# VRF 2 configuration
self.vrf2 = sai_thrift_create_virtual_router(self.client)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.port_rif2 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.vrf2,
port_id=self.port25)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.port_rif2)
self.lag_rif2 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.vrf2,
port_id=self.lag2)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.lag_rif2)
self.sub_port_rif2 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_SUB_PORT,
virtual_router_id=self.vrf2,
port_id=self.port10,
outer_vlan_id=200,
admin_v4_state=True)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.sub_port_rif2)
self.lpb_rif2 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_LOOPBACK,
virtual_router_id=self.vrf2)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.lpb_rif2)
self.svi_rif2 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_VLAN,
virtual_router_id=self.vrf2,
vlan_id=self.vlan20)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.svi_rif2)
ip_addr21 = "10.20.1.1"
self.port_nhop2 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(ip_addr21),
router_interface_id=self.port_rif2,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.port_nhop2)
self.port_route2 = sai_thrift_route_entry_t(
vr_id=self.vrf2, destination=sai_ipprefix(ip_addr21 + '/24'))
sai_thrift_create_route_entry(self.client,
self.port_route2,
next_hop_id=self.port_nhop2)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.port_route2)
ip_addr22 = "10.20.2.1"
self.lag_nhop2 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(ip_addr22),
router_interface_id=self.lag_rif2,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.lag_nhop2)
self.lag_route2 = sai_thrift_route_entry_t(
vr_id=self.vrf2, destination=sai_ipprefix(ip_addr22 + '/24'))
sai_thrift_create_route_entry(self.client,
self.lag_route2,
next_hop_id=self.lag_nhop2)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.lag_route2)
ip_addr23 = "10.20.3.1"
self.sub_port_nhop2 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(ip_addr23),
router_interface_id=self.sub_port_rif2,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.sub_port_nhop2)
self.sub_port_route2 = sai_thrift_route_entry_t(
vr_id=self.vrf2, destination=sai_ipprefix(ip_addr23 + '/24'))
sai_thrift_create_route_entry(self.client,
self.sub_port_route2,
next_hop_id=self.sub_port_nhop2)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.sub_port_route2)
ip_addr24 = "10.20.4.1"
self.lpb_nhop2 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(ip_addr24),
router_interface_id=self.lpb_rif2,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.lpb_nhop2)
self.lpb_route2 = sai_thrift_route_entry_t(
vr_id=self.vrf2, destination=sai_ipprefix(ip_addr24 + '/24'))
sai_thrift_create_route_entry(self.client,
self.lpb_route2,
next_hop_id=self.lpb_nhop2)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.lpb_route2)
ip_addr25 = "10.20.5.1"
self.svi_nhop2 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(ip_addr25),
router_interface_id=self.svi_rif2,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.svi_nhop2)
self.svi_route2 = sai_thrift_route_entry_t(
vr_id=self.vrf2, destination=sai_ipprefix(ip_addr25 + '/24'))
sai_thrift_create_route_entry(self.client,
self.svi_route2,
next_hop_id=self.svi_nhop2)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.svi_route2)
# VRF 3 configuration
self.vrf3 = sai_thrift_create_virtual_router(self.client)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.port_rif3 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.vrf3,
port_id=self.port26)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.port_rif3)
# additional LAG
self.lag10 = sai_thrift_create_lag(self.client)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.lag10_member1 = sai_thrift_create_lag_member(self.client,
lag_id=self.lag10,
port_id=self.port27)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.lag10_member2 = sai_thrift_create_lag_member(self.client,
lag_id=self.lag10,
port_id=self.port28)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.lag10_bp = sai_thrift_create_bridge_port(
self.client,
bridge_id=self.default_1q_bridge,
port_id=self.lag10,
type=SAI_BRIDGE_PORT_TYPE_PORT)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.lag_rif3 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.vrf3,
port_id=self.lag10)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.lag_rif3)
self.sub_port_rif3 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_SUB_PORT,
virtual_router_id=self.vrf3,
port_id=self.port10,
outer_vlan_id=300,
admin_v4_state=True)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.sub_port_rif3)
self.lpb_rif3 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_LOOPBACK,
virtual_router_id=self.vrf3)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.lpb_rif3)
# additional VLAN
self.vlan100 = sai_thrift_create_vlan(self.client, vlan_id=100)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.port29_bp = sai_thrift_create_bridge_port(
self.client,
bridge_id=self.default_1q_bridge,
port_id=self.port29,
type=SAI_BRIDGE_PORT_TYPE_PORT)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.vlan100_member0 = sai_thrift_create_vlan_member(
self.client,
vlan_id=self.vlan100,
bridge_port_id=self.port29_bp,
vlan_tagging_mode=SAI_VLAN_TAGGING_MODE_UNTAGGED)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
sai_thrift_set_port_attribute(self.client,
self.port29,
port_vlan_id=100)
self.port30_bp = sai_thrift_create_bridge_port(
self.client,
bridge_id=self.default_1q_bridge,
port_id=self.port30,
type=SAI_BRIDGE_PORT_TYPE_PORT)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.vlan100_member1 = sai_thrift_create_vlan_member(
self.client,
vlan_id=self.vlan100,
bridge_port_id=self.port30_bp,
vlan_tagging_mode=SAI_VLAN_TAGGING_MODE_TAGGED)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.svi_rif3 = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_VLAN,
virtual_router_id=self.vrf3,
vlan_id=self.vlan100)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.rif_list.append(self.svi_rif3)
ip_addr31 = "10.30.1.1"
self.port_nhop3 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(ip_addr31),
router_interface_id=self.port_rif3,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.port_nhop3)
self.port_route3 = sai_thrift_route_entry_t(
vr_id=self.vrf3, destination=sai_ipprefix(ip_addr31 + '/24'))
sai_thrift_create_route_entry(self.client,
self.port_route3,
next_hop_id=self.port_nhop3)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.port_route3)
ip_addr32 = "10.30.2.1"
self.lag_nhop3 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(ip_addr32),
router_interface_id=self.lag_rif3,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.lag_nhop3)
self.lag_route3 = sai_thrift_route_entry_t(
vr_id=self.vrf3, destination=sai_ipprefix(ip_addr32 + '/24'))
sai_thrift_create_route_entry(self.client,
self.lag_route3,
next_hop_id=self.lag_nhop3)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.lag_route3)
ip_addr33 = "10.30.3.1"
self.sub_port_nhop3 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(ip_addr33),
router_interface_id=self.sub_port_rif3,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.sub_port_nhop3)
self.sub_port_route3 = sai_thrift_route_entry_t(
vr_id=self.vrf3, destination=sai_ipprefix(ip_addr33 + '/24'))
sai_thrift_create_route_entry(self.client,
self.sub_port_route3,
next_hop_id=self.sub_port_nhop3)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.sub_port_route3)
ip_addr34 = "10.30.4.1"
self.lpb_nhop3 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(ip_addr34),
router_interface_id=self.lpb_rif3,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.lpb_nhop3)
self.lpb_route3 = sai_thrift_route_entry_t(
vr_id=self.vrf3, destination=sai_ipprefix(ip_addr34 + '/24'))
sai_thrift_create_route_entry(self.client,
self.lpb_route3,
next_hop_id=self.lpb_nhop3)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.lpb_route3)
ip_addr35 = "10.30.5.1"
self.svi_nhop3 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(ip_addr35),
router_interface_id=self.svi_rif3,
type=SAI_NEXT_HOP_TYPE_IP)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.nhop_list.append(self.svi_nhop3)
self.svi_route3 = sai_thrift_route_entry_t(
vr_id=self.vrf3, destination=sai_ipprefix(ip_addr35 + '/24'))
sai_thrift_create_route_entry(self.client,
self.svi_route3,
next_hop_id=self.svi_nhop3)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.route_list.append(self.svi_route3)
def runTest(self):
self.vrfInterfacesTest()
def tearDown(self):
for route in self.route_list:
sai_thrift_remove_route_entry(self.client, route)
for nhop in self.nhop_list:
sai_thrift_remove_next_hop(self.client, nhop)
for nbor in self.nbor_list:
sai_thrift_remove_neighbor_entry(self.client, nbor)
for rif in self.rif_list:
sai_thrift_remove_router_interface(self.client, rif)
sai_thrift_remove_vlan_member(self.client, self.vlan100_member1)
sai_thrift_remove_bridge_port(self.client, self.port30_bp)
sai_thrift_set_port_attribute(self.client, self.port29, port_vlan_id=0)
sai_thrift_remove_vlan_member(self.client, self.vlan100_member0)
sai_thrift_remove_bridge_port(self.client, self.port29_bp)
sai_thrift_remove_vlan(self.client, self.vlan100)
sai_thrift_remove_bridge_port(self.client, self.lag10_bp)
sai_thrift_remove_lag_member(self.client, self.lag10_member1)
sai_thrift_remove_lag_member(self.client, self.lag10_member2)
sai_thrift_remove_lag(self.client, self.lag10)
sai_thrift_remove_virtual_router(self.client, self.vrf3)
sai_thrift_remove_virtual_router(self.client, self.vrf2)
sai_thrift_remove_virtual_router(self.client, self.vrf1)
super(VrfMultipleRifCreationTest, self).tearDown()
def vrfInterfacesTest(self):
'''
Verify VRF basic forwarding between different types of RIFs
within one of created VRF (VRF1)
'''
print("\nvrfInterfacesTest()")
test_port = self.dev_port24
test_lag_ports = [self.dev_port4, self.dev_port5, self.dev_port6]
test_subport = self.dev_port10
test_vlan_ports = [[self.dev_port0], [self.dev_port1], test_lag_ports]
src_mac = "00:aa:aa:aa:aa:aa"
src_ip = "20.20.20.20"
vlan_id = 10
subport_vlan_id = 100
pkt = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=src_mac,
ip_src=src_ip,
ip_id=105,
ip_ttl=64,
pktlen=100)
exp_pkt = simple_udp_packet(eth_src=ROUTER_MAC,
ip_src=src_ip,
ip_id=105,
ip_ttl=63,
pktlen=100)
exp_tag_pkt = simple_udp_packet(eth_src=ROUTER_MAC,
ip_src=src_ip,
dl_vlan_enable=True,
ip_id=105,
ip_ttl=63,
pktlen=104)
try:
# port -> LAG (10.10.2.0/24)
pkt[IP].dst = "10.10.2.10"
exp_pkt[IP].dst = pkt[IP].dst
exp_pkt[Ether].dst = self.mac12
print("Sending packet port->LAG in the same VRF")
send_packet(self, test_port, pkt)
verify_packet_any_port(self, exp_pkt, test_lag_ports)
print("\tOK")
# port -> subport (10.10.3.0/24)
pkt[IP].dst = "10.10.3.10"
exp_tag_pkt[IP].dst = pkt[IP].dst
exp_tag_pkt[Ether].dst = self.mac13
exp_tag_pkt[Ether][Dot1Q].vlan = subport_vlan_id
print("Sending packet port->subport in the same VRF")
send_packet(self, test_port, pkt)
verify_packet(self, exp_tag_pkt, test_subport)
print("\tOK")
# port -> SVI (10.10.5.0/24)
pkt[IP].dst = "10.10.5.10"
exp_pkt[IP].dst = pkt[IP].dst
exp_tag_pkt[IP].dst = pkt[IP].dst
exp_pkt[Ether].dst = self.mac15
exp_tag_pkt[Ether].dst = self.mac15
exp_tag_pkt[Ether][Dot1Q].vlan = vlan_id
exp_pkt_list = [exp_pkt, exp_tag_pkt, exp_pkt]
print("Sending packet port->SVI in the same VRF")
send_packet(self, test_port, pkt)
verify_each_packet_on_multiple_port_lists(self, exp_pkt_list,
test_vlan_ports)
print("\tOK")
finally:
sai_thrift_flush_fdb_entries(
self.client, entry_type=SAI_FDB_FLUSH_ENTRY_TYPE_ALL)
@group("draft")
class VrfAclRedirectTest(SaiHelper):
'''
Verify inter-VRF ACL redirection
'''
def setUp(self):
super(VrfAclRedirectTest, self).setUp()
self.test_vrf = sai_thrift_create_virtual_router(self.client)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
# create and configure ingress RIF
self.iport = self.port24
self.iport_dev = self.dev_port24
self.test_irif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.test_vrf,
port_id=self.iport)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.iport_mac = "00:11:11:11:11:11"
iport_ipv4 = "10.10.10.1"
iport_ipv6 = "2001:0db8::1:1"
self.iport_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(iport_ipv4),
router_interface_id=self.test_irif,
type=SAI_NEXT_HOP_TYPE_IP)
self.iport_nhop_v6 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(iport_ipv6),
router_interface_id=self.test_irif,
type=SAI_NEXT_HOP_TYPE_IP)
def runTest(self):
self.aclFwdL3NhopTest()
self.aclFwdL3LagNhopTest()
self.aclFwdSviNhopTest()
self.aclFwdSubportNhopTest()
self.aclFwdEcmpNhopTest()
def tearDown(self):
sai_thrift_remove_next_hop(self.client, self.iport_nhop)
sai_thrift_remove_next_hop(self.client, self.iport_nhop_v6)
sai_thrift_remove_router_interface(self.client, self.test_irif)
sai_thrift_remove_virtual_router(self.client, self.test_vrf)
super(VrfAclRedirectTest, self).tearDown()
def aclFwdL3NhopTest(self):
'''
Verify ACL redirect to regular L3 nexthop in different VRF
'''
print("\naclFwdL3NhopTest()")
test_dev_port = self.dev_port10
test_rif = self.port10_rif
test_mac = "00:33:33:33:33:33"
test_ip = "30.30.30.1"
ip_mask = "255.255.255.0"
bind_points = [SAI_ACL_BIND_POINT_TYPE_ROUTER_INTERFACE]
action_types = [SAI_ACL_ACTION_TYPE_REDIRECT]
try:
test_nbor = sai_thrift_neighbor_entry_t(
rif_id=test_rif, ip_address=sai_ipaddress(test_ip))
sai_thrift_create_neighbor_entry(self.client,
test_nbor,
dst_mac_address=test_mac)
test_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip),
router_interface_id=test_rif,
type=SAI_NEXT_HOP_TYPE_IP)
bind_points_list = sai_thrift_s32_list_t(count=len(bind_points),
int32list=bind_points)
action_types_list = sai_thrift_s32_list_t(count=len(action_types),
int32list=action_types)
acl_table = sai_thrift_create_acl_table(
self.client,
acl_stage=SAI_ACL_STAGE_INGRESS,
acl_bind_point_type_list=bind_points_list,
acl_action_type_list=action_types_list,
field_dst_ip=True)
acl_action = sai_thrift_acl_action_data_t(
parameter=sai_thrift_acl_action_parameter_t(oid=test_nhop))
ip_addr = sai_thrift_acl_field_data_t(
data=sai_thrift_acl_field_data_data_t(ip4=test_ip),
mask=sai_thrift_acl_field_data_mask_t(ip4=ip_mask))
acl_entry = sai_thrift_create_acl_entry(self.client,
table_id=acl_table,
action_redirect=acl_action,
field_dst_ip=ip_addr)
sai_thrift_set_router_interface_attribute(self.client,
self.test_irif,
ingress_acl=acl_table)
src_mac = "00:aa:aa:aa:aa:aa"
src_ip = "10.10.10.10"
dst_ip = "30.30.30.30"
pkt = simple_udp_packet(eth_dst=test_mac,
eth_src=src_mac,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=64)
print("Sending packet with ACL action: "
"redirect to regular L3 nexthop")
send_packet(self, self.iport_dev, pkt)
verify_packet(self, pkt, test_dev_port)
print("\tOK")
finally:
sai_thrift_set_router_interface_attribute(self.client,
self.test_irif,
ingress_acl=0)
sai_thrift_remove_acl_entry(self.client, acl_entry)
sai_thrift_remove_acl_table(self.client, acl_table)
sai_thrift_remove_next_hop(self.client, test_nhop)
sai_thrift_remove_neighbor_entry(self.client, test_nbor)
def aclFwdL3LagNhopTest(self):
'''
Verify ACL redirect to regular L3 nexthop in different VRF
'''
print("\naclFwdL3LagNhopTest()")
test_lag_dev_ports = [
self.dev_port14, self.dev_port15, self.dev_port16
]
test_lag_rif = self.lag3_rif
test_mac = "00:33:33:33:33:33"
test_ip = "30.30.30.1"
ip_mask = "255.255.255.0"
bind_points = [SAI_ACL_BIND_POINT_TYPE_ROUTER_INTERFACE]
action_types = [SAI_ACL_ACTION_TYPE_REDIRECT]
try:
test_nbor = sai_thrift_neighbor_entry_t(
rif_id=test_lag_rif, ip_address=sai_ipaddress(test_ip))
sai_thrift_create_neighbor_entry(self.client,
test_nbor,
dst_mac_address=test_mac)
test_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip),
router_interface_id=test_lag_rif,
type=SAI_NEXT_HOP_TYPE_IP)
bind_points_list = sai_thrift_s32_list_t(count=len(bind_points),
int32list=bind_points)
action_types_list = sai_thrift_s32_list_t(count=len(action_types),
int32list=action_types)
acl_table = sai_thrift_create_acl_table(
self.client,
acl_stage=SAI_ACL_STAGE_INGRESS,
acl_bind_point_type_list=bind_points_list,
acl_action_type_list=action_types_list,
field_dst_ip=True)
acl_action = sai_thrift_acl_action_data_t(
parameter=sai_thrift_acl_action_parameter_t(oid=test_nhop))
ip_addr = sai_thrift_acl_field_data_t(
data=sai_thrift_acl_field_data_data_t(ip4=test_ip),
mask=sai_thrift_acl_field_data_mask_t(ip4=ip_mask))
acl_entry = sai_thrift_create_acl_entry(self.client,
table_id=acl_table,
action_redirect=acl_action,
field_dst_ip=ip_addr)
sai_thrift_set_router_interface_attribute(self.client,
self.test_irif,
ingress_acl=acl_table)
src_mac = "00:aa:aa:aa:aa:aa"
src_ip = "10.10.10.10"
dst_ip = "30.30.30.30"
pkt = simple_udp_packet(eth_dst=test_mac,
eth_src=src_mac,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=64)
print("Sending packet with ACL action: redirect to L3 LAG nexthop")
send_packet(self, self.iport_dev, pkt)
verify_packet_any_port(self, pkt, test_lag_dev_ports)
print("\tOK")
finally:
sai_thrift_set_router_interface_attribute(self.client,
self.test_irif,
ingress_acl=0)
sai_thrift_remove_acl_entry(self.client, acl_entry)
sai_thrift_remove_acl_table(self.client, acl_table)
sai_thrift_remove_next_hop(self.client, test_nhop)
sai_thrift_remove_neighbor_entry(self.client, test_nbor)
def aclFwdSviNhopTest(self):
'''
Verify ACL redirect to SVI nexthop in different VRF
'''
print("\naclFwdSviNhopTest()")
test_vlan_rif = self.vlan30_rif
test_vlan_lag_dev_ports = [self.dev_port21, self.dev_port22]
test_vlan_dev_ports = [[self.dev_port20], [self.dev_port21],
test_vlan_lag_dev_ports]
test_mac = "00:33:33:33:33:33"
test_ip = "30.30.30.1"
ip_mask = "255.255.255.0"
bind_points = [SAI_ACL_BIND_POINT_TYPE_ROUTER_INTERFACE]
action_types = [SAI_ACL_ACTION_TYPE_REDIRECT]
try:
test_nbor = sai_thrift_neighbor_entry_t(
rif_id=test_vlan_rif, ip_address=sai_ipaddress(test_ip))
sai_thrift_create_neighbor_entry(self.client,
test_nbor,
dst_mac_address=test_mac)
test_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip),
router_interface_id=test_vlan_rif,
type=SAI_NEXT_HOP_TYPE_IP)
bind_points_list = sai_thrift_s32_list_t(count=len(bind_points),
int32list=bind_points)
action_types_list = sai_thrift_s32_list_t(count=len(action_types),
int32list=action_types)
acl_table = sai_thrift_create_acl_table(
self.client,
acl_stage=SAI_ACL_STAGE_INGRESS,
acl_bind_point_type_list=bind_points_list,
acl_action_type_list=action_types_list,
field_dst_ip=True)
acl_action = sai_thrift_acl_action_data_t(
parameter=sai_thrift_acl_action_parameter_t(oid=test_nhop))
ip_addr = sai_thrift_acl_field_data_t(
data=sai_thrift_acl_field_data_data_t(ip4=test_ip),
mask=sai_thrift_acl_field_data_mask_t(ip4=ip_mask))
acl_entry = sai_thrift_create_acl_entry(self.client,
table_id=acl_table,
action_redirect=acl_action,
field_dst_ip=ip_addr)
sai_thrift_set_router_interface_attribute(self.client,
self.test_irif,
ingress_acl=acl_table)
src_mac = "00:aa:aa:aa:aa:aa"
src_ip = "10.10.10.10"
dst_ip = "30.30.30.30"
pkt = simple_udp_packet(eth_dst=test_mac,
eth_src=src_mac,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=64)
exp_pkt_list = [pkt, pkt, pkt]
print("Sending packet with ACL action: redirect to SVI nexthop")
send_packet(self, self.iport_dev, pkt)
verify_each_packet_on_multiple_port_lists(self, exp_pkt_list,
test_vlan_dev_ports)
print("\tOK")
finally:
sai_thrift_set_router_interface_attribute(self.client,
self.test_irif,
ingress_acl=0)
sai_thrift_remove_acl_entry(self.client, acl_entry)
sai_thrift_remove_acl_table(self.client, acl_table)
sai_thrift_remove_next_hop(self.client, test_nhop)
sai_thrift_remove_neighbor_entry(self.client, test_nbor)
def aclFwdSubportNhopTest(self):
'''
Verify ACL redirect to SVI nexthop in different VRF
'''
print("\naclFwdSubportNhopTest()")
test_port = self.port10
test_dev_port = self.dev_port10
test_mac1 = "00:33:33:33:33:1"
test_ip1 = "30.30.10.1"
vlan_id1 = 100
test_mac2 = "00:33:33:33:33:2"
test_ip2 = "30.30.20.2"
vlan_id2 = 200
ip_mask = "255.255.255.0"
bind_points = [SAI_ACL_BIND_POINT_TYPE_ROUTER_INTERFACE]
action_types = [SAI_ACL_ACTION_TYPE_REDIRECT]
try:
subport1_rif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_SUB_PORT,
virtual_router_id=self.default_vrf,
port_id=test_port,
outer_vlan_id=vlan_id1,
admin_v4_state=True)
test_nbor1 = sai_thrift_neighbor_entry_t(
rif_id=subport1_rif, ip_address=sai_ipaddress(test_ip1))
sai_thrift_create_neighbor_entry(self.client,
test_nbor1,
dst_mac_address=test_mac1)
test_nhop1 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip1),
router_interface_id=subport1_rif,
type=SAI_NEXT_HOP_TYPE_IP)
subport2_rif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_SUB_PORT,
virtual_router_id=self.default_vrf,
port_id=test_port,
outer_vlan_id=vlan_id2,
admin_v4_state=True)
test_nbor2 = sai_thrift_neighbor_entry_t(
rif_id=subport2_rif, ip_address=sai_ipaddress(test_ip2))
sai_thrift_create_neighbor_entry(self.client,
test_nbor2,
dst_mac_address=test_mac2)
test_nhop2 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip2),
router_interface_id=subport2_rif,
type=SAI_NEXT_HOP_TYPE_IP)
bind_points_list = sai_thrift_s32_list_t(count=len(bind_points),
int32list=bind_points)
action_types_list = sai_thrift_s32_list_t(count=len(action_types),
int32list=action_types)
acl_table = sai_thrift_create_acl_table(
self.client,
acl_stage=SAI_ACL_STAGE_INGRESS,
acl_bind_point_type_list=bind_points_list,
acl_action_type_list=action_types_list,
field_dst_ip=True)
acl_action = sai_thrift_acl_action_data_t(
parameter=sai_thrift_acl_action_parameter_t(oid=test_nhop1))
ip_addr = sai_thrift_acl_field_data_t(
data=sai_thrift_acl_field_data_data_t(ip4=test_ip1),
mask=sai_thrift_acl_field_data_mask_t(ip4=ip_mask))
acl_entry1 = sai_thrift_create_acl_entry(
self.client,
table_id=acl_table,
action_redirect=acl_action,
field_dst_ip=ip_addr)
acl_action = sai_thrift_acl_action_data_t(
parameter=sai_thrift_acl_action_parameter_t(oid=test_nhop2))
ip_addr = sai_thrift_acl_field_data_t(
data=sai_thrift_acl_field_data_data_t(ip4=test_ip2),
mask=sai_thrift_acl_field_data_mask_t(ip4=ip_mask))
acl_entry2 = sai_thrift_create_acl_entry(
self.client,
table_id=acl_table,
action_redirect=acl_action,
field_dst_ip=ip_addr)
sai_thrift_set_router_interface_attribute(self.client,
self.test_irif,
ingress_acl=acl_table)
src_mac = "00:aa:aa:aa:aa:aa"
src_ip = "10.10.10.10"
dst_ip1 = "30.30.10.10"
dst_ip2 = "30.30.20.20"
pkt1 = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=src_mac,
ip_dst=dst_ip1,
ip_src=src_ip,
ip_ttl=64)
pkt2 = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=src_mac,
ip_dst=dst_ip2,
ip_src=src_ip,
ip_ttl=64)
print("Sending packest with ACL action: "
"redirect to 2 subport nexthops")
send_packet(self, self.iport_dev, pkt1)
verify_packet(self, pkt1, test_dev_port)
send_packet(self, self.iport_dev, pkt2)
verify_packet(self, pkt2, test_dev_port)
print("\tOK")
finally:
sai_thrift_set_router_interface_attribute(self.client,
self.test_irif,
ingress_acl=0)
sai_thrift_remove_acl_entry(self.client, acl_entry1)
sai_thrift_remove_acl_entry(self.client, acl_entry2)
sai_thrift_remove_acl_table(self.client, acl_table)
sai_thrift_remove_next_hop(self.client, test_nhop1)
sai_thrift_remove_next_hop(self.client, test_nhop2)
sai_thrift_remove_neighbor_entry(self.client, test_nbor1)
sai_thrift_remove_neighbor_entry(self.client, test_nbor2)
sai_thrift_remove_router_interface(self.client, subport1_rif)
sai_thrift_remove_router_interface(self.client, subport2_rif)
def aclFwdEcmpNhopTest(self):
'''
Verify ACL redirect to ECMP nexthop in different VRF
'''
print("\naclFwdEcmpNhopTest()")
test_dev_ports = [self.dev_port10, self.dev_port11, self.dev_port12]
test_rifs = [self.port10_rif, self.port11_rif, self.port12_rif]
test_mac1 = "00:33:33:33:33:11"
test_mac2 = "00:33:33:33:33:22"
test_mac3 = "00:33:33:33:33:33"
test_ip1 = "30.30.30.1"
test_ip2 = "30.30.30.2"
test_ip3 = "30.30.30.3"
ip_mask = "255.255.255.0"
bind_points = [SAI_ACL_BIND_POINT_TYPE_ROUTER_INTERFACE]
action_types = [SAI_ACL_ACTION_TYPE_REDIRECT]
try:
test_nbor1 = sai_thrift_neighbor_entry_t(
rif_id=test_rifs[0], ip_address=sai_ipaddress(test_ip1))
sai_thrift_create_neighbor_entry(self.client,
test_nbor1,
dst_mac_address=test_mac1)
test_nbor2 = sai_thrift_neighbor_entry_t(
rif_id=test_rifs[1], ip_address=sai_ipaddress(test_ip2))
sai_thrift_create_neighbor_entry(self.client,
test_nbor2,
dst_mac_address=test_mac2)
test_nbor3 = sai_thrift_neighbor_entry_t(
rif_id=test_rifs[2], ip_address=sai_ipaddress(test_ip3))
sai_thrift_create_neighbor_entry(self.client,
test_nbor3,
dst_mac_address=test_mac3)
test_nhop1 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip1),
router_interface_id=test_rifs[0],
type=SAI_NEXT_HOP_TYPE_IP)
test_nhop2 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip2),
router_interface_id=test_rifs[1],
type=SAI_NEXT_HOP_TYPE_IP)
test_nhop3 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(test_ip3),
router_interface_id=test_rifs[2],
type=SAI_NEXT_HOP_TYPE_IP)
test_nhop_group = sai_thrift_create_next_hop_group(
self.client, type=SAI_NEXT_HOP_GROUP_TYPE_ECMP)
nhop_group_mmbr1 = sai_thrift_create_next_hop_group_member(
self.client,
next_hop_group_id=test_nhop_group,
next_hop_id=test_nhop1)
nhop_group_mmbr2 = sai_thrift_create_next_hop_group_member(
self.client,
next_hop_group_id=test_nhop_group,
next_hop_id=test_nhop2)
nhop_group_mmbr3 = sai_thrift_create_next_hop_group_member(
self.client,
next_hop_group_id=test_nhop_group,
next_hop_id=test_nhop3)
bind_points_list = sai_thrift_s32_list_t(count=len(bind_points),
int32list=bind_points)
action_types_list = sai_thrift_s32_list_t(count=len(action_types),
int32list=action_types)
acl_table = sai_thrift_create_acl_table(
self.client,
acl_stage=SAI_ACL_STAGE_INGRESS,
acl_bind_point_type_list=bind_points_list,
acl_action_type_list=action_types_list,
field_dst_ip=True)
acl_action = sai_thrift_acl_action_data_t(
parameter=sai_thrift_acl_action_parameter_t(
oid=test_nhop_group))
ip_addr = sai_thrift_acl_field_data_t(
data=sai_thrift_acl_field_data_data_t(ip4=test_ip1),
mask=sai_thrift_acl_field_data_mask_t(ip4=ip_mask))
acl_entry = sai_thrift_create_acl_entry(self.client,
table_id=acl_table,
action_redirect=acl_action,
field_dst_ip=ip_addr)
sai_thrift_set_router_interface_attribute(self.client,
self.test_irif,
ingress_acl=acl_table)
src_mac = "00:aa:aa:aa:aa:aa"
src_ip_addr = "10.10.10.1"
dst_ip_addr = "30.30.30.30"
print("Sending packet with ACL action: redirect to ECMP nexthop")
max_iter = 100
count = [0, 0, 0]
src_ip_addr = int(
binascii.hexlify(
socket.inet_aton(src_ip_addr)), 16)
dst_ip_addr = int(
binascii.hexlify(
socket.inet_aton(dst_ip_addr)), 16)
for _ in range(max_iter):
src_ip = socket.inet_ntoa(
binascii.unhexlify(format(src_ip_addr, 'x').zfill(8)))
dst_ip = socket.inet_ntoa(
binascii.unhexlify(format(dst_ip_addr, 'x').zfill(8)))
pkt = simple_udp_packet(eth_dst=ROUTER_MAC,
eth_src=src_mac,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=64)
send_packet(self, self.iport_dev, pkt)
rcv_idx = verify_packet_any_port(self, pkt, test_dev_ports)
count[rcv_idx[0]] += 1
src_ip_addr += 1
dst_ip_addr += 1
print("\tOK")
for value in count:
self.assertTrue(value >= ((max_iter / len(count)) * 0.7),
"Ecmp paths are not equally balanced")
finally:
sai_thrift_set_router_interface_attribute(self.client,
self.test_irif,
ingress_acl=0)
sai_thrift_remove_acl_entry(self.client, acl_entry)
sai_thrift_remove_acl_table(self.client, acl_table)
sai_thrift_remove_next_hop_group_member(self.client,
nhop_group_mmbr1)
sai_thrift_remove_next_hop_group_member(self.client,
nhop_group_mmbr2)
sai_thrift_remove_next_hop_group_member(self.client,
nhop_group_mmbr3)
sai_thrift_remove_next_hop_group(self.client, test_nhop_group)
sai_thrift_remove_next_hop(self.client, test_nhop1)
sai_thrift_remove_next_hop(self.client, test_nhop2)
sai_thrift_remove_next_hop(self.client, test_nhop3)
sai_thrift_remove_neighbor_entry(self.client, test_nbor1)
sai_thrift_remove_neighbor_entry(self.client, test_nbor2)
sai_thrift_remove_neighbor_entry(self.client, test_nbor3)
@group("draft")
class VrfScaleTest(SaiHelper):
'''
Verify if it is possible to create the number of VRFs declared as
maximum allowed
'''
def runTest(self):
'''
Verify if VRF Scale matches maximum number of VRF entries
available on switch and if it is possible to add routes to them
'''
print("\nVrfScaleTest")
try:
sw_attr = sai_thrift_get_switch_attribute(
self.client, max_virtual_routers=True)
max_vr_no = sw_attr['max_virtual_routers']
ip_addr = "10.10.10.1"
ipv6_addr = "2001:0db8::1"
nexthop_v4 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(ip_addr),
router_interface_id=self.port10_rif,
type=SAI_NEXT_HOP_TYPE_IP)
nexthop_v6 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(ipv6_addr),
router_interface_id=self.port10_rif,
type=SAI_NEXT_HOP_TYPE_IP)
vrf_list = []
lpm_route_v4_list = []
lpm_route_v6_list = []
host_route_v4_list = []
host_route_v6_list = []
print("Creating %d virtual routers with routes added" % max_vr_no)
for _ in range(max_vr_no - 2):
vrf = sai_thrift_create_virtual_router(self.client)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
vrf_list.append(vrf)
lpm_route_v4 = sai_thrift_route_entry_t(
vr_id=vrf, destination=sai_ipprefix(ip_addr + '/24'))
sai_thrift_create_route_entry(self.client,
lpm_route_v4,
next_hop_id=nexthop_v4)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
lpm_route_v4_list.append(lpm_route_v4)
host_route_v4 = sai_thrift_route_entry_t(
vr_id=vrf, destination=sai_ipprefix(ip_addr + '/32'))
sai_thrift_create_route_entry(self.client,
host_route_v4,
next_hop_id=nexthop_v4)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
host_route_v4_list.append(host_route_v4)
lpm_route_v6 = sai_thrift_route_entry_t(
vr_id=vrf, destination=sai_ipprefix(ipv6_addr + '/48'))
sai_thrift_create_route_entry(self.client,
lpm_route_v6,
next_hop_id=nexthop_v6)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
lpm_route_v6_list.append(lpm_route_v6)
host_route_v6 = sai_thrift_route_entry_t(
vr_id=vrf, destination=sai_ipprefix(ipv6_addr + '/128'))
sai_thrift_create_route_entry(self.client,
host_route_v6,
next_hop_id=nexthop_v6)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
host_route_v6_list.append(host_route_v6)
print("\tOK")
print("Checking if no more virtual routers can be created")
vrf = sai_thrift_create_virtual_router(self.client)
self.assertEgual(vrf, 0)
finally:
for i, _ in enumerate(vrf_list):
sai_thrift_remove_route_entry(
self.client, host_route_v6_list[i])
sai_thrift_remove_route_entry(
self.client, lpm_route_v6_list[i])
sai_thrift_remove_route_entry(
self.client, host_route_v4_list[i])
sai_thrift_remove_route_entry(
self.client, lpm_route_v4_list[i])
sai_thrift_remove_virtual_router(self.client, vrf_list[i])
sai_thrift_remove_next_hop(self.client, nexthop_v4)
sai_thrift_remove_next_hop(self.client, nexthop_v6)
@group("draft")
class VrfSMACTest(SaiHelper):
'''
VRF SMAC test
'''
def setUp(self):
super(VrfSMACTest, self).setUp()
self.vrf_mac_create = '00:44:55:66:77:00'
self.vrf_mac_set = '00:77:55:33:22:11'
# to be set using tested VRF
self.iport_dev = None
self.iport_route = None
self.iport = None
self.test_erif = None
self.eport_route = None
self.eport_nbor_mac = None
self.iport_nbor = None
self.eport_dev = None
self.iport_nhop = None
self.iport_nbor_mac = None
self.eport_nbor = None
self.eport_nhop = None
self.test_vrf = None
self.test_vrf = None
self.test_irif = None
self.eport = None
def runTest(self):
self.testSMACCreateSet()
self.testSMACSet()
def _configureRifs(self, vrf):
# create and configure ingress RIF
self.iport = self.port24
self.iport_dev = self.dev_port24
self.test_irif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=vrf,
port_id=self.iport)
self.iport_nbor_mac = "00:11:11:11:11:11"
iport_ipv4 = "10.10.10.1"
self.iport_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(iport_ipv4),
router_interface_id=self.test_irif,
type=SAI_NEXT_HOP_TYPE_IP)
self.iport_nbor = sai_thrift_neighbor_entry_t(
rif_id=self.test_irif, ip_address=sai_ipaddress(iport_ipv4))
sai_thrift_create_neighbor_entry(self.client,
self.iport_nbor,
dst_mac_address=self.iport_nbor_mac)
self.iport_route = sai_thrift_route_entry_t(
vr_id=self.test_vrf, destination=sai_ipprefix(iport_ipv4 + '/24'))
sai_thrift_create_route_entry(self.client,
self.iport_route,
next_hop_id=self.iport_nhop)
# create and configure egress RIF
self.eport = self.port25
self.eport_dev = self.dev_port25
self.eport_nbor_mac = "00:22:22:22:22:22"
eport_ipv4 = "20.20.20.2"
self.test_erif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.test_vrf,
port_id=self.eport)
self.eport_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(eport_ipv4),
router_interface_id=self.test_erif,
type=SAI_NEXT_HOP_TYPE_IP)
self.eport_nbor = sai_thrift_neighbor_entry_t(
rif_id=self.test_erif, ip_address=sai_ipaddress(eport_ipv4))
sai_thrift_create_neighbor_entry(self.client,
self.eport_nbor,
dst_mac_address=self.eport_nbor_mac)
self.eport_route = sai_thrift_route_entry_t(
vr_id=self.test_vrf, destination=sai_ipprefix(eport_ipv4 + '/24'))
sai_thrift_create_route_entry(self.client,
self.eport_route,
next_hop_id=self.eport_nhop)
def _runTraffic(self, vrf_mac):
src_mac = self.iport_nbor_mac
src_ip = "10.10.10.10"
dst_ip = "20.20.20.20"
pkt = simple_udp_packet(eth_dst=vrf_mac,
eth_src=src_mac,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=64)
exp_pkt = simple_udp_packet(eth_dst=self.eport_nbor_mac,
eth_src=vrf_mac,
ip_dst=dst_ip,
ip_src=src_ip,
ip_ttl=63)
try:
send_packet(self, self.iport_dev, pkt)
verify_packet(self, exp_pkt, self.eport_dev)
print("\tIPv4 forwarded")
except Exception as e:
self._removeRifs()
raise e
finally:
sai_thrift_flush_fdb_entries(
self.client, entry_type=SAI_FDB_FLUSH_ENTRY_TYPE_ALL)
def _removeRifs(self):
sai_thrift_remove_route_entry(self.client, self.eport_route)
sai_thrift_remove_neighbor_entry(self.client, self.eport_nbor)
sai_thrift_remove_next_hop(self.client, self.eport_nhop)
sai_thrift_remove_router_interface(self.client, self.test_erif)
sai_thrift_remove_route_entry(self.client, self.iport_route)
sai_thrift_remove_neighbor_entry(self.client, self.iport_nbor)
sai_thrift_remove_next_hop(self.client, self.iport_nhop)
sai_thrift_remove_router_interface(self.client, self.test_irif)
def testSMACCreateSet(self):
'''
Verify SMAC configuration on VRF create
'''
print("\ntestSMACCreateSet()")
self.test_vrf = sai_thrift_create_virtual_router(
self.client, src_mac_address=self.vrf_mac_create)
attrs = sai_thrift_get_virtual_router_attribute(
self.client, self.test_vrf, src_mac_address=True)
self.assertEqual(attrs["src_mac_address"], self.vrf_mac_create)
self._configureRifs(self.test_vrf)
print("Create VRF test")
self._runTraffic(self.vrf_mac_create)
sai_thrift_set_virtual_router_attribute(
self.client, self.test_vrf, src_mac_address=self.vrf_mac_set)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
attrs = sai_thrift_get_virtual_router_attribute(
self.client, self.test_vrf, src_mac_address=True)
self.assertEqual(attrs["src_mac_address"], self.vrf_mac_set)
print("Set VRF src_mac test. src_mac of existing RIF's "
"should not change")
self._runTraffic(self.vrf_mac_create)
self._removeRifs()
print("Set VRF src_mac test. New RIF.")
self._configureRifs(self.test_vrf)
self._runTraffic(self.vrf_mac_set)
self._removeRifs()
sai_thrift_remove_virtual_router(self.client, self.test_vrf)
def testSMACSet(self):
'''
Verify SMAC configuration on VRF creted with default mac
'''
print("\ntestSMACSet()")
self.test_vrf = sai_thrift_create_virtual_router(self.client)
attrs = sai_thrift_get_virtual_router_attribute(
self.client, self.test_vrf, src_mac_address=True)
self.assertEqual(attrs["src_mac_address"], ROUTER_MAC)
self._configureRifs(self.test_vrf)
print("Creaete VRF test")
self._runTraffic(ROUTER_MAC)
sai_thrift_set_virtual_router_attribute(
self.client, self.test_vrf, src_mac_address=self.vrf_mac_set)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
attrs = sai_thrift_get_virtual_router_attribute(
self.client, self.test_vrf, src_mac_address=True)
self.assertEqual(attrs["src_mac_address"], self.vrf_mac_set)
print("Set VRF src_mac test. src_mac of existing RIF's "
"should not change")
self._runTraffic(ROUTER_MAC)
self._removeRifs()
print("Set VRF src_mac test. New RIF.")
self._configureRifs(self.test_vrf)
self._runTraffic(self.vrf_mac_set)
self._removeRifs()
sai_thrift_remove_virtual_router(self.client, self.test_vrf)