def runTest()

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)