in ptf/sairif.py [0:0]
def runTest(self):
print("rifCreateOrUpdateRmacTest()")
irif = e1_rif = e2_rif = None
iport_route = e1_port_route = e2_port_route = None
iport_nbor = e1_port_nbor = e2_port_nbor = None
iport_nbor_nhop = e1_port_nbor_nhop = e2_port_nbor_nhop = None
iport = self.port0
dev_iport = self.dev_port0
iport_nbor_mac = '00:11:ab:ab:ab:ab'
iport_ipv4_nbor = '10.1.1.2'
iport_ipv4 = '10.1.1.1'
e1_port = self.port1
dev_e1_port = self.dev_port1
e1_port_nbor_mac = '00:11:ac:ac:ac:ac'
e1_port_ipv4 = '10.2.2.1'
e1_port_ipv4_nbor = '10.2.2.2'
e2_port = self.port2
dev_e2_port = self.dev_port2
e2_mac = '00:11:dd:dd:dd:dd'
e2_new_mac = '00:11:ee:ee:ee:ee'
e2_port_nbor_mac = '00:11:ad:ad:ad:ad'
e2_port_ipv4 = '10.3.3.1'
e2_port_ipv4_nbor = '10.3.3.2'
try:
irif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.default_vrf,
port_id=iport,
)
self.assertGreater(irif, 0)
iport_nbor = sai_thrift_neighbor_entry_t(
rif_id=irif,
ip_address=sai_ipaddress(iport_ipv4_nbor),
)
sai_thrift_create_neighbor_entry(
self.client,
iport_nbor,
dst_mac_address=iport_nbor_mac,
)
iport_nbor_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(iport_ipv4_nbor),
router_interface_id=irif,
type=SAI_NEXT_HOP_TYPE_IP,
)
self.assertGreater(iport_nbor_nhop, 0)
iport_route = sai_thrift_route_entry_t(
vr_id=self.default_vrf,
destination=sai_ipprefix(iport_ipv4 + '/24'),
)
sai_thrift_create_route_entry(
self.client,
iport_route,
next_hop_id=iport_nbor_nhop,
)
e1_rif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.default_vrf,
port_id=e1_port,
)
self.assertGreater(e1_rif, 0)
e1_rif_attr = sai_thrift_get_router_interface_attribute(
self.client,
router_interface_oid=e1_rif,
src_mac_address=True,
)
self.assertIsNotNone(e1_rif_attr)
src_mac_address = e1_rif_attr.get('src_mac_address')
self.assertEqual(src_mac_address, ROUTER_MAC)
e1_port_nbor = sai_thrift_neighbor_entry_t(
rif_id=e1_rif,
ip_address=sai_ipaddress(e1_port_ipv4_nbor),
)
sai_thrift_create_neighbor_entry(
self.client,
e1_port_nbor,
dst_mac_address=e1_port_nbor_mac,
)
e1_port_nbor_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(e1_port_ipv4_nbor),
router_interface_id=e1_rif,
type=SAI_NEXT_HOP_TYPE_IP,
)
self.assertGreater(e1_port_nbor_nhop, 0)
e1_port_route = sai_thrift_route_entry_t(
vr_id=self.default_vrf,
destination=sai_ipprefix(e1_port_ipv4 + '/24'),
)
sai_thrift_create_route_entry(
self.client,
e1_port_route,
next_hop_id=e1_port_nbor_nhop,
)
e2_rif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.default_vrf,
port_id=e2_port,
src_mac_address=e2_mac,
)
self.assertGreater(e2_rif, 0)
e2_rif_attr = sai_thrift_get_router_interface_attribute(
self.client,
router_interface_oid=e2_rif,
src_mac_address=True,
)
self.assertIsNotNone(e2_rif_attr)
src_mac_address = e2_rif_attr.get('src_mac_address')
self.assertEqual(src_mac_address, e2_mac)
e2_port_nbor = sai_thrift_neighbor_entry_t(
rif_id=e2_rif,
ip_address=sai_ipaddress(e2_port_ipv4_nbor),
)
sai_thrift_create_neighbor_entry(
self.client,
e2_port_nbor,
dst_mac_address=e2_port_nbor_mac,
)
e2_port_nbor_nhop = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress(e2_port_ipv4_nbor),
router_interface_id=e2_rif,
type=SAI_NEXT_HOP_TYPE_IP,
)
self.assertGreater(e2_port_nbor_nhop, 0)
e2_port_route = sai_thrift_route_entry_t(
vr_id=self.default_vrf,
destination=sai_ipprefix(e2_port_ipv4 + '/24'),
)
sai_thrift_create_route_entry(
self.client,
e1_port_route,
next_hop_id=e2_port_nbor_nhop,
)
pkt_in1 = simple_udp_packet(
eth_dst=ROUTER_MAC,
eth_src=iport_nbor_mac,
ip_dst=e1_port_ipv4_nbor,
ip_src=iport_ipv4_nbor,
ip_ttl=64,
)
pkt_e1 = simple_udp_packet(
eth_dst=e1_port_nbor_mac,
eth_src=ROUTER_MAC,
ip_dst=e1_port_ipv4_nbor,
ip_src=iport_ipv4_nbor,
ip_ttl=63,
)
send_packet(self, dev_iport, pkt_in1)
verify_packets(self, pkt_e1, [dev_e1_port])
verify_no_other_packets(self, timeout=1)
pkt_in2 = simple_udp_packet(
eth_dst=ROUTER_MAC,
eth_src=iport_nbor_mac,
ip_dst=e2_port_ipv4_nbor,
ip_src=iport_ipv4_nbor,
ip_ttl=64,
)
pkt_e2 = simple_udp_packet(
eth_dst=e2_port_nbor_mac,
eth_src=e2_mac,
ip_dst=e2_port_ipv4_nbor,
ip_src=iport_ipv4_nbor,
ip_ttl=63,
)
send_packet(self, dev_iport, pkt_in2)
verify_packets(self, pkt_e2, [dev_e2_port])
verify_no_other_packets(self, timeout=1)
sai_thrift_set_router_interface_attribute(
self.client,
router_interface_oid=e2_rif,
src_mac_address=e2_new_mac,
)
e2_rif_attr = sai_thrift_get_router_interface_attribute(
self.client,
router_interface_oid=e2_rif,
src_mac_address=True,
)
self.assertIsNotNone(e2_rif_attr)
src_mac_address = e2_rif_attr.get('src_mac_address')
self.assertEqual(src_mac_address, e2_new_mac)
pkt_e2 = simple_udp_packet(
eth_dst=e2_port_nbor_mac,
eth_src=e2_new_mac,
ip_dst=e2_port_ipv4_nbor,
ip_src=iport_ipv4_nbor,
ip_ttl=63,
)
send_packet(self, dev_iport, pkt_in2)
verify_packets(self, pkt_e2, [dev_e2_port])
verify_no_other_packets(self, timeout=1)
finally:
for route in iport_route, e1_port_route, e2_port_route:
if route is not None:
sai_thrift_remove_route_entry(self.client, route)
for nbor in iport_nbor, e1_port_nbor, e2_port_nbor:
if nbor is not None:
sai_thrift_remove_neighbor_entry(self.client, nbor)
for nhop in iport_nbor_nhop, e1_port_nbor_nhop, e2_port_nbor_nhop:
if nhop is not None:
sai_thrift_remove_next_hop(self.client, nhop)
for rif in irif, e1_rif, e2_rif:
if rif is not None:
sai_thrift_remove_router_interface(self.client, rif)