def runTest()

in ptf/saiacl.py [0:0]


    def runTest(self):
        # setup ACL table groups
        ipv4_addr_src1 = "20.0.0.1"
        ipv4_addr_src2 = "20.0.0.3"
        ipv4_mask = "255.255.255.255"
        ipv6_mask = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
        ipv6_addr_src = '2000::1'

        group_stage_ingress = SAI_ACL_STAGE_INGRESS
        group_stage_egress = SAI_ACL_STAGE_EGRESS
        group_bind_point_list = [SAI_ACL_BIND_POINT_TYPE_PORT]
        group_type = SAI_ACL_TABLE_GROUP_TYPE_PARALLEL
        table_stage_ingress = SAI_ACL_STAGE_INGRESS
        table_stage_egress = SAI_ACL_STAGE_EGRESS

        group_bind_point_type_list = sai_thrift_s32_list_t(
            count=len(group_bind_point_list), int32list=group_bind_point_list)

        print("Create ACL tables groups")
        acl_group_ingress = sai_thrift_create_acl_table_group(
            self.client,
            acl_stage=group_stage_ingress,
            acl_bind_point_type_list=group_bind_point_type_list,
            type=group_type)

        table_bind_point_list = [SAI_ACL_BIND_POINT_TYPE_PORT]
        table_bind_point_type_list = sai_thrift_s32_list_t(
            count=len(table_bind_point_list), int32list=table_bind_point_list)

        packet_action = sai_thrift_acl_action_data_t(
            parameter=sai_thrift_acl_action_parameter_t(
                s32=SAI_PACKET_ACTION_DROP))

        print("Create ACL field data")
        src_ip_t_ipv4 = sai_thrift_acl_field_data_t(
            data=sai_thrift_acl_field_data_data_t(ip4=ipv4_addr_src1),
            mask=sai_thrift_acl_field_data_mask_t(ip4=ipv4_mask))

        src_ip_t_ipv6 = sai_thrift_acl_field_data_t(
            data=sai_thrift_acl_field_data_data_t(ip6=ipv6_addr_src),
            mask=sai_thrift_acl_field_data_mask_t(
                ip6=ipv6_mask))

        src_ip_t_mirror = sai_thrift_acl_field_data_t(
            data=sai_thrift_acl_field_data_data_t(ip4=ipv4_addr_src2),
            mask=sai_thrift_acl_field_data_mask_t(ip4=ipv4_mask))

        # create ACL tables
        print("Create ACL tables")
        acl_ingress_ipv4_table_id = sai_thrift_create_acl_table(
            self.client,
            acl_stage=table_stage_ingress,
            acl_bind_point_type_list=table_bind_point_type_list,
            field_src_ip=True)

        acl_ingress_ipv6_table_id = sai_thrift_create_acl_table(
            self.client,
            acl_stage=table_stage_ingress,
            acl_bind_point_type_list=table_bind_point_type_list,
            field_src_ipv6=True)

        # create ACL table group members
        print("Create ACL group members")
        acl_group_ingress_ipv4_member_id = \
            sai_thrift_create_acl_table_group_member(
                self.client,
                acl_table_group_id=acl_group_ingress,
                acl_table_id=acl_ingress_ipv4_table_id)

        acl_group_ingress_ipv6_member_id = \
            sai_thrift_create_acl_table_group_member(
                self.client,
                acl_table_group_id=acl_group_ingress,
                acl_table_id=acl_ingress_ipv6_table_id)

        # create ACL entries
        print("Create ACL entries")
        ipv4_acl_ingress_entry_id = sai_thrift_create_acl_entry(
            self.client,
            table_id=acl_ingress_ipv4_table_id,
            priority=9999,
            field_src_ip=src_ip_t_ipv4,
            action_packet_action=packet_action)

        ipv6_acl_ingress_entry_id = sai_thrift_create_acl_entry(
            self.client,
            table_id=acl_ingress_ipv6_table_id,
            priority=9998,
            field_src_ipv6=src_ip_t_ipv6,
            action_packet_action=packet_action)

        mirror_acl_ingress_entry_id = sai_thrift_create_acl_entry(
            self.client,
            table_id=acl_ingress_ipv4_table_id,
            priority=9997,
            field_src_ip=src_ip_t_mirror,
            action_packet_action=packet_action)

        # create ACL counter
        acl_counter_ingress_ipv4 = sai_thrift_create_acl_counter(
            self.client, table_id=acl_ingress_ipv4_table_id)

        # attach ACL counter to ACL entry
        action_counter_ingress_ipv4 = sai_thrift_acl_action_data_t(
            parameter=sai_thrift_acl_action_parameter_t(
                oid=acl_counter_ingress_ipv4),
            enable=True)
        sai_thrift_set_acl_entry_attribute(
            self.client, ipv4_acl_ingress_entry_id,
            action_counter=action_counter_ingress_ipv4)

        # create ACL counter
        acl_counter_ingress_ipv6 = sai_thrift_create_acl_counter(
            self.client, table_id=acl_ingress_ipv6_table_id)

        # attach ACL counter to ACL entry
        action_counter_ingress_ipv6 = sai_thrift_acl_action_data_t(
            parameter=sai_thrift_acl_action_parameter_t(
                oid=acl_counter_ingress_ipv6),
            enable=True)
        sai_thrift_set_acl_entry_attribute(
            self.client, ipv6_acl_ingress_entry_id,
            action_counter=action_counter_ingress_ipv6)

        # create ACL counter
        acl_counter_ingress_mirror = sai_thrift_create_acl_counter(
            self.client, table_id=acl_ingress_ipv4_table_id)

        # attach ACL counter to ACL entry
        action_counter_ingress_mirror = sai_thrift_acl_action_data_t(
            parameter=sai_thrift_acl_action_parameter_t(
                oid=acl_counter_ingress_mirror),
            enable=True)
        sai_thrift_set_acl_entry_attribute(
            self.client, mirror_acl_ingress_entry_id,
            action_counter=action_counter_ingress_mirror)

        try:
            pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
                                    eth_src=self.dmac,
                                    ip_src=ipv4_addr_src1,
                                    ip_dst=self.ipv4_addr,
                                    tcp_sport=0x4321,
                                    tcp_dport=0x51,
                                    ip_ttl=64)
            exp_pkt = simple_tcp_packet(eth_dst=self.dmac,
                                        eth_src=ROUTER_MAC,
                                        ip_src=ipv4_addr_src1,
                                        ip_dst=self.ipv4_addr,
                                        tcp_sport=0x4321,
                                        tcp_dport=0x51,
                                        ip_ttl=63)

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | '
                  '20.0.0.1 | 192.168.0.1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pkt)
            print('#### Expecting ', self.dmac, ' | ', ROUTER_MAC, '| 20.0.0.1'
                  ' | 192.168.0.1 | @ ptf_intf 1')
            verify_packets(self, exp_pkt, [self.dev_port10])

            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv4, packets=True)
            self.assertEqual(packets['packets'], 0)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv6, packets=True)
            self.assertEqual(packets['packets'], 0)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_mirror, packets=True)
            self.assertEqual(packets['packets'], 0)

            pktv6 = simple_tcpv6_packet(eth_dst=ROUTER_MAC,
                                        eth_src=self.dmac,
                                        ipv6_dst=self.ipv6_addr,
                                        ipv6_src=ipv6_addr_src,
                                        ipv6_hlim=64)
            exp_pktv6 = simple_tcpv6_packet(eth_dst=self.dmac,
                                            eth_src=ROUTER_MAC,
                                            ipv6_dst=self.ipv6_addr,
                                            ipv6_src=ipv6_addr_src,
                                            ipv6_hlim=63)

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | 4000::1'
                  ' | 2000::1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pktv6)
            print('#### Expecting ', self.dmac, ' | ', ROUTER_MAC, '| 4000::1'
                  ' | 2000::1 | @ ptf_intf 1')
            verify_packets(self, exp_pktv6, [self.dev_port10])

            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv4, packets=True)
            self.assertEqual(packets['packets'], 0)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv6, packets=True)
            self.assertEqual(packets['packets'], 0)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_mirror, packets=True)
            self.assertEqual(packets['packets'], 0)

            pkt2 = simple_tcp_packet(eth_dst=ROUTER_MAC,
                                     eth_src=self.dmac,
                                     ip_src=ipv4_addr_src2,
                                     ip_dst=self.ipv4_addr,
                                     tcp_sport=0x4321,
                                     tcp_dport=0x51,
                                     ip_ttl=64)
            exp_pkt2 = simple_tcp_packet(eth_dst=self.dmac,
                                         eth_src=ROUTER_MAC,
                                         ip_src=ipv4_addr_src2,
                                         ip_dst=self.ipv4_addr,
                                         tcp_sport=0x4321,
                                         tcp_dport=0x51,
                                         ip_ttl=63)

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | '
                  '20.0.0.3 | 192.168.0.1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pkt2)
            print('#### Expecting ', self.dmac, ' | ', ROUTER_MAC, '| 20.0.0.3'
                  ' | 192.168.0.1 | @ ptf_intf 1')
            verify_packets(self, exp_pkt2, [self.dev_port10])

            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv4, packets=True)
            self.assertEqual(packets['packets'], 0)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv6, packets=True)
            self.assertEqual(packets['packets'], 0)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_mirror, packets=True)
            self.assertEqual(packets['packets'], 0)

            # bind ACL group to port and verify ACLs work
            sai_thrift_set_port_attribute(
                self.client, self.port11, ingress_acl=acl_group_ingress)

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | '
                  '20.0.0.1 | 192.168.0.1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pkt)
            print('#### NOT Expecting ', self.dmac, ' | ', ROUTER_MAC, '| '
                  '20.0.0.1 | 192.168.0.1 | @ ptf_intf 1')
            verify_no_other_packets(self, timeout=2)

            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv4, packets=True)
            self.assertEqual(packets['packets'], 1)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv6, packets=True)
            self.assertEqual(packets['packets'], 0)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_mirror, packets=True)
            self.assertEqual(packets['packets'], 0)

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | 4000::1'
                  ' | 2000::1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pktv6)
            print('#### NOT Expecting ', self.dmac, ' | ', ROUTER_MAC, '| '
                  '4000::1 | 2000::1 | @ ptf_intf 1')
            verify_no_other_packets(self, timeout=2)

            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv4, packets=True)
            self.assertEqual(packets['packets'], 1)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv6, packets=True)
            self.assertEqual(packets['packets'], 1)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_mirror, packets=True)
            self.assertEqual(packets['packets'], 0)

            # unbind ACL group from port - ACLs sholdn't have any effect
            sai_thrift_set_port_attribute(
                self.client, self.port11, ingress_acl=int(SAI_NULL_OBJECT_ID))

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | '
                  '20.0.0.1 | 192.168.0.1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pkt)
            print('#### Expecting ', self.dmac, ' | ', ROUTER_MAC, '| 20.0.0.1'
                  ' | 192.168.0.1 | @ ptf_intf 1')
            verify_packets(self, exp_pkt, [self.dev_port10])

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | 4000::1'
                  ' | 2000::1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pktv6)
            print('#### Expecting ', self.dmac, ' | ', ROUTER_MAC, '| 4000::1'
                  ' | 2000::1 | @ ptf_intf 1')
            verify_packets(self, exp_pktv6, [self.dev_port10])

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | '
                  '20.0.0.3 | 192.168.0.1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pkt2)
            print('#### Expecting ', self.dmac, ' | ', ROUTER_MAC, '| 20.0.0.3'
                  ' | 192.168.0.1 | @ ptf_intf 1')
            verify_packets(self, exp_pkt2, [self.dev_port10])

            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv4, packets=True)
            self.assertEqual(packets['packets'], 1)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv6, packets=True)
            self.assertEqual(packets['packets'], 1)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_mirror, packets=True)
            self.assertEqual(packets['packets'], 0)

            # cleanup ACL
            action_counter_ingress_ipv4 = sai_thrift_acl_action_data_t(
                parameter=sai_thrift_acl_action_parameter_t(
                    oid=0),
                enable=True)
            sai_thrift_set_acl_entry_attribute(
                self.client, ipv4_acl_ingress_entry_id,
                action_counter=action_counter_ingress_ipv4)
            sai_thrift_set_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv4, packets=None)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv4, packets=True)
            self.assertEqual(packets['packets'], 0)
            sai_thrift_remove_acl_counter(
                self.client, acl_counter_ingress_ipv4)

            action_counter_ingress_ipv6 = sai_thrift_acl_action_data_t(
                parameter=sai_thrift_acl_action_parameter_t(
                    oid=0),
                enable=True)
            sai_thrift_set_acl_entry_attribute(
                self.client, ipv6_acl_ingress_entry_id,
                action_counter=action_counter_ingress_ipv6)
            sai_thrift_set_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv6, packets=None)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_ipv6, packets=True)
            self.assertEqual(packets['packets'], 0)
            sai_thrift_remove_acl_counter(
                self.client, acl_counter_ingress_ipv6)

            action_counter_ingress_mirror = sai_thrift_acl_action_data_t(
                parameter=sai_thrift_acl_action_parameter_t(
                    oid=0),
                enable=True)
            sai_thrift_set_acl_entry_attribute(
                self.client, mirror_acl_ingress_entry_id,
                action_counter=action_counter_ingress_mirror)
            sai_thrift_set_acl_counter_attribute(
                self.client, acl_counter_ingress_mirror, packets=None)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_ingress_mirror, packets=True)
            self.assertEqual(packets['packets'], 0)
            sai_thrift_remove_acl_counter(
                self.client, acl_counter_ingress_mirror)

            sai_thrift_remove_acl_table_group_member(
                self.client, acl_group_ingress_ipv4_member_id)
            sai_thrift_remove_acl_table_group_member(
                self.client, acl_group_ingress_ipv6_member_id)
            sai_thrift_remove_acl_table_group(self.client, acl_group_ingress)
            sai_thrift_remove_acl_entry(self.client, ipv4_acl_ingress_entry_id)
            sai_thrift_remove_acl_entry(self.client, ipv6_acl_ingress_entry_id)
            sai_thrift_remove_acl_entry(self.client,
                                        mirror_acl_ingress_entry_id)
            sai_thrift_remove_acl_table(self.client, acl_ingress_ipv4_table_id)
            sai_thrift_remove_acl_table(self.client, acl_ingress_ipv6_table_id)

            print("Create ACL tables groups")
            acl_group_egress = sai_thrift_create_acl_table_group(
                self.client,
                acl_stage=group_stage_egress,
                acl_bind_point_type_list=group_bind_point_type_list,
                type=group_type)

            # create ACL tables
            print("Create ACL tables")
            acl_egress_ipv4_table_id = sai_thrift_create_acl_table(
                self.client,
                acl_stage=table_stage_egress,
                acl_bind_point_type_list=table_bind_point_type_list,
                field_src_ip=True)

            acl_egress_ipv6_table_id = sai_thrift_create_acl_table(
                self.client,
                acl_stage=table_stage_egress,
                acl_bind_point_type_list=table_bind_point_type_list,
                field_src_ipv6=True)

            # create ACL table group members
            print("Create ACL group members")
            acl_group_egress_ipv4_member_id = \
                sai_thrift_create_acl_table_group_member(
                    self.client,
                    acl_table_group_id=acl_group_egress,
                    acl_table_id=acl_egress_ipv4_table_id)

            acl_group_egress_ipv6_member_id = \
                sai_thrift_create_acl_table_group_member(
                    self.client,
                    acl_table_group_id=acl_group_egress,
                    acl_table_id=acl_egress_ipv6_table_id)

            # create ACL entries
            print("Create ACL entries")
            ipv4_acl_egress_entry_id = sai_thrift_create_acl_entry(
                self.client,
                table_id=acl_egress_ipv4_table_id,
                priority=9999,
                field_src_ip=src_ip_t_ipv4,
                action_packet_action=packet_action)

            ipv6_acl_egress_entry_id = sai_thrift_create_acl_entry(
                self.client,
                table_id=acl_egress_ipv6_table_id,
                priority=9998,
                field_src_ipv6=src_ip_t_ipv6,
                action_packet_action=packet_action)

            mirror_acl_egress_entry_id = sai_thrift_create_acl_entry(
                self.client,
                table_id=acl_egress_ipv4_table_id,
                priority=9997,
                field_src_ip=src_ip_t_mirror,
                action_packet_action=packet_action)

            # create ACL counter
            acl_counter_egress_ipv4 = sai_thrift_create_acl_counter(
                self.client, table_id=acl_egress_ipv4_table_id)

            # attach ACL counter to ACL entry
            action_counter_egress_ipv4 = sai_thrift_acl_action_data_t(
                parameter=sai_thrift_acl_action_parameter_t(
                    oid=acl_counter_egress_ipv4),
                enable=True)
            sai_thrift_set_acl_entry_attribute(
                self.client, ipv4_acl_egress_entry_id,
                action_counter=action_counter_egress_ipv4)

            # create ACL counter
            acl_counter_egress_ipv6 = sai_thrift_create_acl_counter(
                self.client, table_id=acl_egress_ipv6_table_id)

            # attach ACL counter to ACL entry
            action_counter_egress_ipv6 = sai_thrift_acl_action_data_t(
                parameter=sai_thrift_acl_action_parameter_t(
                    oid=acl_counter_egress_ipv6),
                enable=True)
            sai_thrift_set_acl_entry_attribute(
                self.client, ipv6_acl_egress_entry_id,
                action_counter=action_counter_egress_ipv6)

            # create ACL counter
            acl_counter_egress_mirror = sai_thrift_create_acl_counter(
                self.client, table_id=acl_egress_ipv4_table_id)

            # attach ACL counter to ACL entry
            action_counter_egress_mirror = sai_thrift_acl_action_data_t(
                parameter=sai_thrift_acl_action_parameter_t(
                    oid=acl_counter_egress_mirror),
                enable=True)
            sai_thrift_set_acl_entry_attribute(
                self.client, mirror_acl_egress_entry_id,
                action_counter=action_counter_egress_mirror)

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | '
                  '20.0.0.1 | 192.168.0.1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pkt)
            print('#### Expecting ', self.dmac, ' | ', ROUTER_MAC, '| 20.0.0.1'
                  ' | 192.168.0.1 | @ ptf_intf 1')
            verify_packets(self, exp_pkt, [self.dev_port10])

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | 4000::1'
                  ' | 2000::1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pktv6)
            print('#### Expecting ', self.dmac, ' | ', ROUTER_MAC, '| 4000::1'
                  ' | 2000::1 | @ ptf_intf 1')
            verify_packets(self, exp_pktv6, [self.dev_port10])

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | '
                  '20.0.0.3 | 192.168.0.1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pkt2)
            print('#### Expecting ', self.dmac, ' | ', ROUTER_MAC, '| 20.0.0.3'
                  ' | 192.168.0.1 | @ ptf_intf 1')
            verify_packets(self, exp_pkt2, [self.dev_port10])

            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_ipv4, packets=True)
            self.assertEqual(packets['packets'], 0)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_ipv6, packets=True)
            self.assertEqual(packets['packets'], 0)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_mirror, packets=True)
            self.assertEqual(packets['packets'], 0)

            # bind ACL group to port and verify ACLs work
            sai_thrift_set_port_attribute(
                self.client, self.port10, egress_acl=acl_group_egress)

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | '
                  '20.0.0.1 | 192.168.0.1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pkt)
            print('#### NOT Expecting ', self.dmac, ' | ', ROUTER_MAC, '| '
                  '20.0.0.1 | 192.168.0.1 | @ ptf_intf 1')
            verify_no_other_packets(self, timeout=2)

            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_ipv4, packets=True)
            self.assertEqual(packets['packets'], 1)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_ipv6, packets=True)
            self.assertEqual(packets['packets'], 0)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_mirror, packets=True)
            self.assertEqual(packets['packets'], 0)

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | 4000::1'
                  ' | 2000::1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pktv6)
            print('#### NOT Expecting ', self.dmac, ' | ', ROUTER_MAC, '| '
                  '4000::1 | 2000::1 | @ ptf_intf 1')
            verify_no_other_packets(self, timeout=2)

            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_ipv4, packets=True)
            self.assertEqual(packets['packets'], 1)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_ipv6, packets=True)
            self.assertEqual(packets['packets'], 1)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_mirror, packets=True)
            self.assertEqual(packets['packets'], 0)

            # unbind ACL group from port - ACLs sholdn't have any effect
            sai_thrift_set_port_attribute(
                self.client, self.port10, egress_acl=int(SAI_NULL_OBJECT_ID))

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | '
                  '20.0.0.1 | 192.168.0.1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pkt)
            print('#### Expecting ', self.dmac, ' | ', ROUTER_MAC, '| 20.0.0.1'
                  ' | 192.168.0.1 | @ ptf_intf 1')
            verify_packets(self, exp_pkt, [self.dev_port10])

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | 4000::1'
                  ' | 2000::1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pktv6)
            print('#### Expecting ', self.dmac, ' | ', ROUTER_MAC, '| 4000::1'
                  ' | 2000::1 | @ ptf_intf 1')
            verify_packets(self, exp_pktv6, [self.dev_port10])

            print('#### Sending  ', ROUTER_MAC, '| 00:22:22:22:22:22 | '
                  '20.0.0.3 | 192.168.0.1 | @ ptf_intf 2')
            send_packet(self, self.dev_port11, pkt2)
            print('#### Expecting ', self.dmac, ' | ', ROUTER_MAC, '| 20.0.0.3'
                  ' | 192.168.0.1 | @ ptf_intf 1')
            verify_packets(self, exp_pkt2, [self.dev_port10])

            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_ipv4, packets=True)
            self.assertEqual(packets['packets'], 1)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_ipv6, packets=True)
            self.assertEqual(packets['packets'], 1)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_mirror, packets=True)
            self.assertEqual(packets['packets'], 0)

        finally:
            # cleanup ACL
            action_counter_egress_ipv4 = sai_thrift_acl_action_data_t(
                parameter=sai_thrift_acl_action_parameter_t(
                    oid=0),
                enable=True)
            sai_thrift_set_acl_entry_attribute(
                self.client, ipv4_acl_egress_entry_id,
                action_counter=action_counter_egress_ipv4)
            sai_thrift_set_acl_counter_attribute(
                self.client, acl_counter_egress_ipv4, packets=None)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_ipv4, packets=True)
            self.assertEqual(packets['packets'], 0)
            sai_thrift_remove_acl_counter(self.client, acl_counter_egress_ipv4)

            action_counter_egress_ipv6 = sai_thrift_acl_action_data_t(
                parameter=sai_thrift_acl_action_parameter_t(
                    oid=0),
                enable=True)
            sai_thrift_set_acl_entry_attribute(
                self.client, ipv6_acl_egress_entry_id,
                action_counter=action_counter_egress_ipv6)
            sai_thrift_set_acl_counter_attribute(
                self.client, acl_counter_egress_ipv6, packets=None)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_ipv6, packets=True)
            self.assertEqual(packets['packets'], 0)
            sai_thrift_remove_acl_counter(self.client, acl_counter_egress_ipv6)

            action_counter_egress_mirror = sai_thrift_acl_action_data_t(
                parameter=sai_thrift_acl_action_parameter_t(
                    oid=0),
                enable=True)
            sai_thrift_set_acl_entry_attribute(
                self.client, mirror_acl_egress_entry_id,
                action_counter=action_counter_egress_mirror)
            sai_thrift_set_acl_counter_attribute(
                self.client, acl_counter_egress_mirror, packets=None)
            packets = sai_thrift_get_acl_counter_attribute(
                self.client, acl_counter_egress_mirror, packets=True)
            self.assertEqual(packets['packets'], 0)
            sai_thrift_remove_acl_counter(
                self.client, acl_counter_egress_mirror)

            sai_thrift_remove_acl_table_group_member(
                self.client, acl_group_egress_ipv4_member_id)
            sai_thrift_remove_acl_table_group_member(
                self.client, acl_group_egress_ipv6_member_id)
            sai_thrift_remove_acl_table_group(self.client, acl_group_egress)
            sai_thrift_remove_acl_entry(self.client, ipv4_acl_egress_entry_id)
            sai_thrift_remove_acl_entry(self.client, ipv6_acl_egress_entry_id)
            sai_thrift_remove_acl_entry(self.client,
                                        mirror_acl_egress_entry_id)
            sai_thrift_remove_acl_table(self.client, acl_egress_ipv4_table_id)
            sai_thrift_remove_acl_table(self.client, acl_egress_ipv6_table_id)