def vlanFloodPruneTest()

in ptf/saivlan.py [0:0]


    def vlanFloodPruneTest(self):
        """
        Verifies ingress port pruning on ports and LAG when flooding
        """
        print("\nvlanFloodPruneTest()")
        sai_thrift_set_vlan_attribute(
            self.client, self.vlan10, learn_disable=True)
        print("Mac Learning disabled on vlan 10")

        self.port31_bp = sai_thrift_create_bridge_port(
            self.client,
            bridge_id=self.default_1q_bridge,
            port_id=self.port31,
            type=SAI_BRIDGE_PORT_TYPE_PORT,
            admin_state=True)

        lag = sai_thrift_create_lag(self.client)
        lag_mbr1 = sai_thrift_create_lag_member(
            self.client, lag_id=lag, port_id=self.port26)
        lag_mbr2 = sai_thrift_create_lag_member(
            self.client, lag_id=lag, port_id=self.port27)
        lag_bp = sai_thrift_create_bridge_port(
            self.client,
            bridge_id=self.default_1q_bridge,
            port_id=lag,
            type=SAI_BRIDGE_PORT_TYPE_PORT,
            admin_state=True)

        vlan_member = sai_thrift_create_vlan_member(
            self.client,
            vlan_id=self.vlan10,
            bridge_port_id=lag_bp,
            vlan_tagging_mode=SAI_VLAN_TAGGING_MODE_UNTAGGED)

        sai_thrift_set_lag_attribute(self.client, lag, port_vlan_id=10)

        pkt = simple_tcp_packet(eth_dst='00:66:66:66:66:66',
                                ip_dst='10.0.0.1',
                                ip_id=107,
                                ip_ttl=64,
                                pktlen=96)
        exp_pkt = simple_tcp_packet(eth_dst='00:66:66:66:66:66',
                                    ip_dst='10.0.0.1',
                                    ip_id=107,
                                    ip_ttl=64,
                                    pktlen=96)
        exp_pkt_tag = simple_tcp_packet(eth_dst='00:66:66:66:66:66',
                                        ip_dst='10.0.0.1',
                                        dl_vlan_enable=True,
                                        vlan_vid=10,
                                        ip_id=107,
                                        ip_ttl=64,
                                        pktlen=100)
        try:
            lag0_ports = [self.dev_port4, self.dev_port5, self.dev_port6]
            lag1_ports = [self.dev_port26, self.dev_port27]
            print("Sending packet from port30 -> "
                  "lag1, lag, port1, port24, port25")
            send_packet(self, self.dev_port0, pkt)
            verify_each_packet_on_multiple_port_lists(
                self,
                [exp_pkt] * 3 + [exp_pkt_tag] * 2,
                [lag0_ports, lag1_ports, [self.dev_port24],
                 [self.dev_port1], [self.dev_port25]])

            print("Add a new lag with no memmbers to vlan 10. "
                  "Packet output will not change")
            lag2 = sai_thrift_create_lag(self.client)
            lag2_bp = sai_thrift_create_bridge_port(
                self.client,
                bridge_id=self.default_1q_bridge,
                port_id=lag2,
                type=SAI_BRIDGE_PORT_TYPE_PORT,
                admin_state=True)
            vlan_member2 = sai_thrift_create_vlan_member(
                self.client,
                vlan_id=self.vlan10,
                bridge_port_id=lag2_bp,
                vlan_tagging_mode=SAI_VLAN_TAGGING_MODE_UNTAGGED)
            sai_thrift_set_lag_attribute(self.client, lag2, port_vlan_id=10)
            send_packet(self, self.dev_port0, pkt)
            verify_each_packet_on_multiple_port_lists(
                self,
                exp_pkt * 3 + exp_pkt_tag * 2,
                [lag0_ports, lag1_ports, [self.dev_port24],
                 [self.dev_port1], [self.dev_port25]])

            print("Add port %d to the new lag" % (self.dev_port30))
            lag_mbr3 = sai_thrift_create_lag_member(
                self.client, lag_id=lag2, port_id=self.port30)
            lag2_ports = [self.dev_port30]
            print("Sending packet from port0 -> "
                  "lag1, lag, new lag, port1, port24, port25")
            send_packet(self, self.dev_port0, pkt)
            verify_each_packet_on_multiple_port_lists(
                self,
                exp_pkt * 4 + exp_pkt_tag * 2,
                [lag0_ports, lag1_ports, lag2_ports, [self.dev_port24],
                 [self.dev_port1], [self.dev_port25]])

            print("Sending packet from port30 -> "
                  "lag1, lag, port1, port0, port24, port25")
            send_packet(self, self.dev_port30, pkt)
            verify_each_packet_on_multiple_port_lists(
                self,
                exp_pkt * 4 + exp_pkt_tag * 2,
                [lag0_ports, lag1_ports, [self.dev_port0], [self.dev_port24],
                 [self.dev_port1], [self.dev_port25]])

            lag_mbr4 = sai_thrift_create_lag_member(
                self.client, lag_id=lag2, port_id=self.port31)
            lag2_ports = [self.dev_port30, self.dev_port31]
            print("Sending packet from port0 -> "
                  "lag1, lag, new lag, port1, port24, port25")
            send_packet(self, self.dev_port0, pkt)
            verify_each_packet_on_multiple_port_lists(
                self,
                exp_pkt * 4 + exp_pkt_tag * 2,
                [lag0_ports, lag1_ports, lag2_ports, [self.dev_port24],
                 [self.dev_port1], [self.dev_port25]])

            print("Sending packet from port31 -> "
                  "lag1, lag, port1, port0, port24, port25")
            send_packet(self, self.dev_port31, pkt)
            verify_each_packet_on_multiple_port_lists(
                self,
                exp_pkt * 4 + exp_pkt_tag * 2,
                [lag0_ports, lag1_ports, [self.dev_port0], [self.dev_port24],
                 [self.dev_port1], [self.dev_port25]])

            print("Remove port %d from new lag" % (self.dev_port31))
            sai_thrift_remove_lag_member(self.client, lag_mbr4)
            lag2_ports = [self.dev_port30]
            print("Sending packet from port0 -> "
                  "lag1, lag, new lag, port1, port24, port25")
            send_packet(self, self.dev_port0, pkt)
            verify_each_packet_on_multiple_port_lists(
                self,
                exp_pkt * 4 + exp_pkt_tag * 2,
                [lag0_ports, lag1_ports, lag2_ports, [self.dev_port24],
                 [self.dev_port1], [self.dev_port25]])

            print("Add port %d to vlan 10. Verify if it is now part of flood "
                  "list" % (self.dev_port31))
            vlan_member3 = sai_thrift_create_vlan_member(
                self.client,
                vlan_id=self.vlan10,
                bridge_port_id=self.port31_bp,
                vlan_tagging_mode=SAI_VLAN_TAGGING_MODE_UNTAGGED)
            sai_thrift_set_port_attribute(
                self.client, self.port31, port_vlan_id=10)
            print("Sending packet from port0 -> "
                  "lag1, lag, new lag, port1, port24, port25, port31")
            send_packet(self, self.dev_port0, pkt)
            verify_each_packet_on_multiple_port_lists(
                self,
                exp_pkt * 5 + exp_pkt_tag * 2,
                [lag0_ports, lag1_ports, lag2_ports,
                 [self.dev_port24], [self.dev_port31],
                 [self.dev_port1], [self.dev_port25]])

            print("Sending packet from port31 -> "
                  "lag1, lag, new lag, port1, port0, port24, port25")
            send_packet(self, self.dev_port31, pkt)
            verify_each_packet_on_multiple_port_lists(
                self,
                exp_pkt * 5 + exp_pkt_tag * 2,
                [lag0_ports, lag1_ports, lag2_ports,
                 [self.dev_port0], [self.dev_port24],
                 [self.dev_port1], [self.dev_port25]])

            sai_thrift_set_port_attribute(
                self.client, self.port31, port_vlan_id=1)
            self.client.sai_thrift_remove_vlan_member(
                vlan_member3)  # Remove port 31 from vlan 10
            sai_thrift_remove_lag_member(
                self.client, lag_mbr3)  # Remove port 30 from new lag
            print("Remove port %d from new lag. "
                  "No more packets should be seen now" % (self.dev_port30))
            print("Sending packet from port 0 -> "
                  "lag0, lag, port1, port24, port25")
            send_packet(self, self.dev_port0, pkt)
            verify_each_packet_on_multiple_port_lists(
                self,
                exp_pkt * 3 + exp_pkt_tag * 2,
                [lag0_ports, lag1_ports, [self.dev_port24],
                 [self.dev_port1], [self.dev_port25]])
        finally:
            sai_thrift_set_lag_attribute(self.client, lag, port_vlan_id=1)
            sai_thrift_set_lag_attribute(self.client, lag2, port_vlan_id=1)

            self.client.sai_thrift_remove_vlan_member(vlan_member)
            self.client.sai_thrift_remove_vlan_member(vlan_member2)

            sai_thrift_remove_lag_member(self.client, lag_mbr1)
            sai_thrift_remove_lag_member(self.client, lag_mbr2)

            sai_thrift_remove_bridge_port(self.client, lag_bp)
            sai_thrift_remove_bridge_port(self.client, lag2_bp)
            sai_thrift_remove_lag(self.client, lag)
            sai_thrift_remove_lag(self.client, lag2)

            sai_thrift_set_vlan_attribute(
                self.client, self.vlan10, learn_disable=False)
            sai_thrift_remove_bridge_port(self.client, self.port31_bp)