inc/saiacl.h (582 lines of code) (raw):

/** * Copyright (c) 2014 Microsoft Open Technologies, Inc. * * 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 * * THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT * LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS * FOR A PARTICULAR PURPOSE, MERCHANTABILITY OR NON-INFRINGEMENT. * * See the Apache Version 2.0 License for specific language governing * permissions and limitations under the License. * * Microsoft would like to thank the following companies for their review and * assistance with these files: Intel Corporation, Mellanox Technologies Ltd, * Dell Products, L.P., Facebook, Inc., Marvell International Ltd. * * @file saiacl.h * * @brief This module defines SAI ACL interface */ #if !defined (__SAIACL_H_) #define __SAIACL_H_ #include <saitypes.h> /** * @defgroup SAIACL SAI - ACL specific API definitions * * @{ */ /** * @brief ACL IP Type */ typedef enum _sai_acl_ip_type_t { /** Don't care */ SAI_ACL_IP_TYPE_ANY, /** IPv4 and IPv6 packets */ SAI_ACL_IP_TYPE_IP, /** Non-IP packet */ SAI_ACL_IP_TYPE_NON_IP, /** Any IPv4 packet */ SAI_ACL_IP_TYPE_IPV4ANY, /** Anything but IPv4 packets */ SAI_ACL_IP_TYPE_NON_IPV4, /** IPv6 packet */ SAI_ACL_IP_TYPE_IPV6ANY, /** Anything but IPv6 packets */ SAI_ACL_IP_TYPE_NON_IPV6, /** ARP/RARP */ SAI_ACL_IP_TYPE_ARP, /** ARP Request */ SAI_ACL_IP_TYPE_ARP_REQUEST, /** ARP Reply */ SAI_ACL_IP_TYPE_ARP_REPLY } sai_acl_ip_type_t; /** * @brief ACL IP Fragment */ typedef enum _sai_acl_ip_frag_t { /** Any Fragment of Fragmented Packet */ SAI_ACL_IP_FRAG_ANY, /** Non-Fragmented Packet */ SAI_ACL_IP_FRAG_NON_FRAG, /** Non-Fragmented or First Fragment */ SAI_ACL_IP_FRAG_NON_FRAG_OR_HEAD, /** First Fragment of Fragmented Packet */ SAI_ACL_IP_FRAG_HEAD, /** Not the First Fragment */ SAI_ACL_IP_FRAG_NON_HEAD } sai_acl_ip_frag_t; /** * @brief DTEL flow operation * * @warning experimental */ typedef enum _sai_acl_dtel_flow_op_t { /** No operation (experimental) */ SAI_ACL_DTEL_FLOW_OP_NOP, /** In-band Network Telemetry (experimental) */ SAI_ACL_DTEL_FLOW_OP_INT, /** In-band OAM (experimental) */ SAI_ACL_DTEL_FLOW_OP_IOAM, /** Packet Postcard (experimental) */ SAI_ACL_DTEL_FLOW_OP_POSTCARD, } sai_acl_dtel_flow_op_t; /** * @brief ACL Action Type */ typedef enum _sai_acl_action_type_t { /** Set Redirect */ SAI_ACL_ACTION_TYPE_REDIRECT = 0x00000000, /** Set tunnel endpoint IP */ SAI_ACL_ACTION_TYPE_ENDPOINT_IP = 0x00000001, /** Redirect Packet to a list of destination which can be a port list */ SAI_ACL_ACTION_TYPE_REDIRECT_LIST = 0x00000002, /** Packet Action */ SAI_ACL_ACTION_TYPE_PACKET_ACTION = 0x00000003, /** Flood Packet on Vlan domain */ SAI_ACL_ACTION_TYPE_FLOOD = 0x00000004, /** Attach/detach counter id to the entry */ SAI_ACL_ACTION_TYPE_COUNTER = 0x00000005, /** Ingress Mirror */ SAI_ACL_ACTION_TYPE_MIRROR_INGRESS = 0x00000006, /** Egress Mirror */ SAI_ACL_ACTION_TYPE_MIRROR_EGRESS = 0x00000007, /** Associate with policer */ SAI_ACL_ACTION_TYPE_SET_POLICER = 0x00000008, /** Decrement TTL */ SAI_ACL_ACTION_TYPE_DECREMENT_TTL = 0x00000009, /** Set Class-of-Service */ SAI_ACL_ACTION_TYPE_SET_TC = 0x0000000a, /** Set Packet Color */ SAI_ACL_ACTION_TYPE_SET_PACKET_COLOR = 0x0000000b, /** Set Packet Inner Vlan Id */ SAI_ACL_ACTION_TYPE_SET_INNER_VLAN_ID = 0x0000000c, /** Set Packet Inner Vlan Priority */ SAI_ACL_ACTION_TYPE_SET_INNER_VLAN_PRI = 0x0000000d, /** Set Packet Outer Vlan Id */ SAI_ACL_ACTION_TYPE_SET_OUTER_VLAN_ID = 0x0000000e, /** Set Packet Outer Vlan Priority */ SAI_ACL_ACTION_TYPE_SET_OUTER_VLAN_PRI = 0x0000000f, /** Add Packet Vlan Id */ SAI_ACL_ACTION_TYPE_ADD_VLAN_ID = 0x00000032, /** Add Packet Vlan Priority */ SAI_ACL_ACTION_TYPE_ADD_VLAN_PRI = 0x00000033, /** Set Packet Src MAC Address */ SAI_ACL_ACTION_TYPE_SET_SRC_MAC = 0x00000010, /** Set Packet Dst MAC Address */ SAI_ACL_ACTION_TYPE_SET_DST_MAC = 0x00000011, /** Set Packet Src IPv4 Address */ SAI_ACL_ACTION_TYPE_SET_SRC_IP = 0x00000012, /** Set Packet Src IPv4 Address */ SAI_ACL_ACTION_TYPE_SET_DST_IP = 0x00000013, /** Set Packet Src IPv6 Address */ SAI_ACL_ACTION_TYPE_SET_SRC_IPV6 = 0x00000014, /** Set Packet Src IPv6 Address */ SAI_ACL_ACTION_TYPE_SET_DST_IPV6 = 0x00000015, /** Set Packet DSCP */ SAI_ACL_ACTION_TYPE_SET_DSCP = 0x00000016, /** Set Packet ECN */ SAI_ACL_ACTION_TYPE_SET_ECN = 0x00000017, /** Set Packet L4 Src Port */ SAI_ACL_ACTION_TYPE_SET_L4_SRC_PORT = 0x00000018, /** Set Packet L4 Src Port */ SAI_ACL_ACTION_TYPE_SET_L4_DST_PORT = 0x00000019, /** Set ingress packet sampling */ SAI_ACL_ACTION_TYPE_INGRESS_SAMPLEPACKET_ENABLE = 0x0000001a, /** Set egress packet sampling */ SAI_ACL_ACTION_TYPE_EGRESS_SAMPLEPACKET_ENABLE = 0x0000001b, /** Set metadata to carry forward to next ACL stage */ SAI_ACL_ACTION_TYPE_SET_ACL_META_DATA = 0x0000001c, /** Egress block port list. To be deprecated */ SAI_ACL_ACTION_TYPE_EGRESS_BLOCK_PORT_LIST = 0x0000001d, /** Set user defined trap id */ SAI_ACL_ACTION_TYPE_SET_USER_TRAP_ID = 0x0000001e, /** Set Do Not Learn unknown source MAC */ SAI_ACL_ACTION_TYPE_SET_DO_NOT_LEARN = 0x0000001f, /** Set DTEL flow operation (experimental) */ SAI_ACL_ACTION_TYPE_ACL_DTEL_FLOW_OP = 0x00000020, /** Set DTEL INT session (experimental) */ SAI_ACL_ACTION_TYPE_DTEL_INT_SESSION = 0x00000021, /** Enable DTEL drop report (experimental) */ SAI_ACL_ACTION_TYPE_DTEL_DROP_REPORT_ENABLE = 0x00000022, /** Enable DTEL tail drop reporting (experimental) */ SAI_ACL_ACTION_TYPE_DTEL_TAIL_DROP_REPORT_ENABLE = 0x00000023, /** Set DTEL flow sampling (experimental) */ SAI_ACL_ACTION_TYPE_DTEL_FLOW_SAMPLE_PERCENT = 0x00000024, /** Enable DTEL report for all packets without filtering (experimental) */ SAI_ACL_ACTION_TYPE_DTEL_REPORT_ALL_PACKETS = 0x00000025, /** Set NAT exception rule */ SAI_ACL_ACTION_TYPE_NO_NAT = 0x00000026, /** Enable insertion of INT metadata */ SAI_ACL_ACTION_TYPE_INT_INSERT = 0x00000027, /** Enable deletion of INT metadata */ SAI_ACL_ACTION_TYPE_INT_DELETE = 0x00000028, /** Enable reports of INT metadata */ SAI_ACL_ACTION_TYPE_INT_REPORT_FLOW = 0x00000029, /** Enable INT drop reports */ SAI_ACL_ACTION_TYPE_INT_REPORT_DROPS = 0x0000002a, /** Enable INT tail drop reports */ SAI_ACL_ACTION_TYPE_INT_REPORT_TAIL_DROPS = 0x0000002b, /** Bind a TAM INT object */ SAI_ACL_ACTION_TYPE_TAM_INT_OBJECT = 0x0000002c, /** Set isolation group to prevent traffic to members of isolation group */ SAI_ACL_ACTION_TYPE_SET_ISOLATION_GROUP = 0x0000002d, /** Bind a MACsec flow object */ SAI_ACL_ACTION_TYPE_MACSEC_FLOW = 0x0000002e, /** Set custom LAG hash object ID */ SAI_ACL_ACTION_TYPE_SET_LAG_HASH_ID = 0x0000002f, /** Set custom ECMP hash object ID */ SAI_ACL_ACTION_TYPE_SET_ECMP_HASH_ID = 0x00000030, /** Associate with virtual router */ SAI_ACL_ACTION_TYPE_SET_VRF = 0x00000031, /** Set Forwarding class */ SAI_ACL_ACTION_TYPE_SET_FORWARDING_CLASS = 0x00000034, /** Set ARS monitoring */ SAI_ACL_ACTION_TYPE_SET_ARS_MONITORING = 0x00000035, /** Set ARS object */ SAI_ACL_ACTION_TYPE_SET_ARS_OBJECT = 0x00000036, /** Disable ARS forwarding */ SAI_ACL_ACTION_TYPE_DISABLE_ARS_FORWARDING = 0x00000037, /** Next Chain Group */ SAI_ACL_ACTION_TYPE_CHAIN_REDIRECT = 0x00000038, } sai_acl_action_type_t; /** * @brief Attribute data for SAI_ACL_TABLE_CHAIN_GROUP_ATTR_TYPE */ typedef enum _sai_acl_table_chain_group_type_t { /** SEQUENTIAL */ SAI_ACL_TABLE_CHAIN_GROUP_TYPE_SEQUENTIAL, /** PARALLEL */ SAI_ACL_TABLE_CHAIN_GROUP_TYPE_PARALLEL, } sai_acl_table_chain_group_type_t; /** * @brief Attribute data for SAI_ACL_TABLE_GROUP_ATTR_TYPE */ typedef enum _sai_acl_table_group_type_t { /** SEQUENTIAL */ SAI_ACL_TABLE_GROUP_TYPE_SEQUENTIAL, /** PARALLEL */ SAI_ACL_TABLE_GROUP_TYPE_PARALLEL, } sai_acl_table_group_type_t; /** * @brief Attribute Id for acl_table_group */ typedef enum _sai_acl_table_group_attr_t { /** * @brief Start of attributes */ SAI_ACL_TABLE_GROUP_ATTR_START, /** * @brief ACL stage * * @type sai_acl_stage_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY */ SAI_ACL_TABLE_GROUP_ATTR_ACL_STAGE = SAI_ACL_TABLE_GROUP_ATTR_START, /** * @brief List of ACL bind points where this group will be applied. * * ACL group bind point list - create only attribute required for ACL * groups to let the user specify his intention to allow further error * checks and optimizations based on a specific ASIC SAI implementation. * ACL members being added to this group SHOULD be a subset of the bind * point list that ACL group was created with. * * @type sai_s32_list_t sai_acl_bind_point_type_t * @flags CREATE_ONLY * @default empty */ SAI_ACL_TABLE_GROUP_ATTR_ACL_BIND_POINT_TYPE_LIST, /** * @brief ACL table group type * * ACL table group type represents the way various ACL tables within this * ACL table group perform their lookups. There are two optional values: * Sequential - All the ACL tables are looked up in a sequential order, * which is based on the ACL table priorities and only one ACL entry is matched * with its corresponding ACL entry action applied. In case two ACL tables * have the same priority they are looked up on a first come basis. * Parallel - All the ACL tables within the ACL table groups are looked up * in parallel and non-conflicting actions are resolved and applied from * multiple matched ACL entries (each from different ACL tables of this group). * Conflicting actions are resolved based on the ACL table priorities. * * @type sai_acl_table_group_type_t * @flags CREATE_ONLY * @default SAI_ACL_TABLE_GROUP_TYPE_SEQUENTIAL */ SAI_ACL_TABLE_GROUP_ATTR_TYPE, /** * @brief ACL table group members associated with this group. * * @type sai_object_list_t * @flags READ_ONLY * @objects SAI_OBJECT_TYPE_ACL_TABLE_GROUP_MEMBER */ SAI_ACL_TABLE_GROUP_ATTR_MEMBER_LIST, /** * @brief ACL table sub groups associated with this group. * * @type sai_object_list_t * @flags READ_ONLY * @objects SAI_OBJECT_TYPE_ACL_TABLE_CHAIN_GROUP */ SAI_ACL_TABLE_GROUP_ATTR_CHAIN_GROUP_LIST, /** * @brief End of attributes */ SAI_ACL_TABLE_GROUP_ATTR_END, /** * @brief Custom range base value start */ SAI_ACL_TABLE_GROUP_ATTR_CUSTOM_RANGE_START = 0x10000000, /** * @brief End of Custom range base */ SAI_ACL_TABLE_GROUP_ATTR_CUSTOM_RANGE_END } sai_acl_table_group_attr_t; /** * @brief Attribute Id for acl_table_chain_group */ typedef enum _sai_acl_table_chain_group_attr_t { /** * @brief Start of attributes */ SAI_ACL_TABLE_CHAIN_GROUP_ATTR_START, /** * @brief ACL table sub group type * * ACL table group type represents the way various ACL tables within this * ACL table group perform their lookups. There are two optional values: * Sequential - All the ACL tables are looked up in a sequential order, * which is based on the ACL table priorities and only one ACL entry is matched * with its corresponding ACL entry action applied. In case two ACL tables * have the same priority they are looked up on a first come basis. * Parallel - All the ACL tables within the ACL table groups are looked up * in parallel and non-conflicting actions are resolved and applied from * multiple matched ACL entries (each from different ACL tables of this group). * Conflicting actions are resolved based on the ACL table priorities. * * @type sai_acl_table_chain_group_type_t * @flags CREATE_ONLY * @default SAI_ACL_TABLE_CHAIN_GROUP_TYPE_SEQUENTIAL */ SAI_ACL_TABLE_CHAIN_GROUP_ATTR_TYPE = SAI_ACL_TABLE_CHAIN_GROUP_ATTR_START, /** * @brief ACL table sub group stage * * ACL table sub group stage represents the cascading stage in the pipeline. * Lower numbered stage comes before the higher numbered stage. * * @type sai_acl_table_chain_group_stage_t * @flags CREATE_ONLY * @default SAI_ACL_TABLE_CHAIN_GROUP_STAGE_0 */ SAI_ACL_TABLE_CHAIN_GROUP_ATTR_STAGE, /** * @brief End of attributes */ SAI_ACL_TABLE_CHAIN_GROUP_ATTR_END, /** * @brief Custom range base value start */ SAI_ACL_TABLE_CHAIN_GROUP_ATTR_CUSTOM_RANGE_START = 0x10000000, /** * @brief End of Custom range base */ SAI_ACL_TABLE_CHAIN_GROUP_ATTR_CUSTOM_RANGE_END } sai_acl_table_chain_group_attr_t; /** * @brief Attribute Id for acl_table_group_member */ typedef enum _sai_acl_table_group_member_attr_t { /** * @brief Start of attributes */ SAI_ACL_TABLE_GROUP_MEMBER_ATTR_START, /** * @brief ACL table group id * * This attribute is required to associate or attach a member object (acl_table_id) * to a ACL table group id allocated during create ACL group API. * * User should always use the group id returned by SAI create_acl_group API, * to group the tables else Invalid attribute value error code will be returned. * * The ACL Table lookup could be done serially or in parallel. In both the * cases there could be a need to group multiple tables so that only single * ACL rule entry actions are performed in case of serial, or non-conflicting * actions are resolved in case of parallel. * * @type sai_object_id_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY * @objects SAI_OBJECT_TYPE_ACL_TABLE_GROUP */ SAI_ACL_TABLE_GROUP_MEMBER_ATTR_ACL_TABLE_GROUP_ID = SAI_ACL_TABLE_GROUP_MEMBER_ATTR_START, /** * @brief ACL table id * * @type sai_object_id_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY * @objects SAI_OBJECT_TYPE_ACL_TABLE */ SAI_ACL_TABLE_GROUP_MEMBER_ATTR_ACL_TABLE_ID, /** * @brief Priority * * Value must be in the range defined in * [SAI_SWITCH_ATTR_ACL_TABLE_MINIMUM_PRIORITY, * SAI_SWITCH_ATTR_ACL_TABLE_MAXIMUM_PRIORITY] * * This priority attribute is valid for both SEQUENTIAL and PARALLEL type of ACL groups * * @type sai_uint32_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY */ SAI_ACL_TABLE_GROUP_MEMBER_ATTR_PRIORITY, /** * @brief ACL table chain group id * * This attribute is required to associate or attach a member object (acl_table_id) * to a ACL table chain group id allocated during create ACL table chain group API. * * The ACL Table lookup could be done serially or in parallel within the chain group. * * @type sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_ACL_TABLE_CHAIN_GROUP * @allownull true * @default SAI_NULL_OBJECT_ID */ SAI_ACL_TABLE_GROUP_MEMBER_ATTR_ACL_TABLE_CHAIN_GROUP_ID, /** * @brief End of attributes */ SAI_ACL_TABLE_GROUP_MEMBER_ATTR_END, /** * @brief Custom range base value start */ SAI_ACL_TABLE_GROUP_MEMBER_ATTR_CUSTOM_RANGE_START = 0x10000000, /** * @brief End of Custom range base */ SAI_ACL_TABLE_GROUP_MEMBER_ATTR_CUSTOM_RANGE_END } sai_acl_table_group_member_attr_t; /** * @brief ACL User Defined Field Attribute ID Range */ #define SAI_ACL_USER_DEFINED_FIELD_ATTR_ID_RANGE 0xFF /** * @brief Attribute Id for sai_acl_table * * @flags ranges */ typedef enum _sai_acl_table_attr_t { /** * @brief Table attributes start */ SAI_ACL_TABLE_ATTR_START, /** * @brief ACL stage * * @type sai_acl_stage_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY */ SAI_ACL_TABLE_ATTR_ACL_STAGE = SAI_ACL_TABLE_ATTR_START, /** * @brief List of ACL bind point where this ACL can be applied * * (Default = empty) - if the bind point is empty during create or * ACL Table that is previously bound is unbound, then it is expected that * there is no real hardware resource that is being utilized. In this case, * application is not expected to query for SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_ENTRY * or SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_COUNTER. If it is queried, the result is * undefined * * @type sai_s32_list_t sai_acl_bind_point_type_t * @flags CREATE_ONLY * @default empty */ SAI_ACL_TABLE_ATTR_ACL_BIND_POINT_TYPE_LIST, /** * @brief Table size * * (Default = 0) - Grow dynamically till MAX ACL TCAM Size * By default, table can grow up to maximum ACL TCAM space. * Supported only during Table Create for now until NPU * supports Dynamic adjustment of Table size post Table creation * * The table size refers to the number of ACL entries. The number * of entries that gets allocated when we create a table with a * specific size would depend on the ACL CAM Arch of the NPU. Some * NPU supports different blocks, each may have same or different * size and what gets allocated can depend on the block size or other * factors. So internally what gets allocated when we do a table * create would be based on the NPU CAM Arch and size may be more * than what is requested. As an example the NPU may support blocks of * 128 entries. When a user creates a table of size 100, the actual * size that gets allocated is 128. Hence, it's recommended that the user * does a get_attribute(#SAI_ACL_TABLE_ATTR_SIZE) to query the actual * table size on table create so the user knows the ACL CAM space * allocated and able to do ACL CAM Carving accurately. * * @type sai_uint32_t * @flags CREATE_ONLY * @default 0 * @isresourcetype true */ SAI_ACL_TABLE_ATTR_SIZE, /** * @brief List of actions in sai_acl_action_type_t * * Based on the ACL capability per stage obtained from the switch * attributes #SAI_SWITCH_ATTR_ACL_STAGE_INGRESS and #SAI_SWITCH_ATTR_ACL_STAGE_EGRESS * application should pass the action list if its mandatory per stage. * Pass the action list if its mandatory per stage. * If its not mandatory application can either pass the action list * or ignore it. * * @type sai_s32_list_t sai_acl_action_type_t * @flags CREATE_ONLY * @default empty */ SAI_ACL_TABLE_ATTR_ACL_ACTION_TYPE_LIST, /* * Match fields [bool] * Mandatory to pass at least one field during ACL Table creation. * Match fields cannot be changed after the table is created. */ /** * @brief Start of Table Match Field */ SAI_ACL_TABLE_ATTR_FIELD_START = 0x00001000, /** * @brief Src IPv6 Address * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6 = SAI_ACL_TABLE_ATTR_FIELD_START, /** * @brief Src IPv6 Address 127:96 32 bits * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD3 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x153, /** * @brief Src IPv6 Address 95:64 32 bits * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD2 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x154, /** * @brief Src IPv6 Address 63:32 32 bits * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD1 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x155, /** * @brief Src IPv6 Address 31:0 32 bits * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD0 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x156, /** * @brief Dst IPv6 Address * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1, /** * @brief Dst IPv6 Address 127:96 32 bits * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD3 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x157, /** * @brief Dst IPv6 Address 95:64 32 bits * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD2 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x158, /** * @brief Dst IPv6 Address 63:32 32 bits * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD1 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x159, /** * @brief Dst IPv6 Address 31:0 32 bits * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD0 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x15a, /** * @brief Inner Src IPv6 Address * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_SRC_IPV6 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2, /** * @brief Inner Dst IPv6 Address * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_DST_IPV6 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x3, /** * @brief Src MAC Address * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_SRC_MAC = SAI_ACL_TABLE_ATTR_FIELD_START + 0x4, /** * @brief Dst MAC Address * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_DST_MAC = SAI_ACL_TABLE_ATTR_FIELD_START + 0x5, /** * @brief Src IPv4 Address * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_SRC_IP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x6, /** * @brief Dst IPv4 Address * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_DST_IP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x7, /** * @brief Inner Src IPv4 Address * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_SRC_IP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x8, /** * @brief Inner Dst IPv4 Address * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_DST_IP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x9, /** * @brief In-Ports * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_IN_PORTS = SAI_ACL_TABLE_ATTR_FIELD_START + 0xa, /** * @brief Out-Ports * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_OUT_PORTS = SAI_ACL_TABLE_ATTR_FIELD_START + 0xb, /** * @brief In-Port * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_IN_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0xc, /** * @brief Out-Port * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_OUT_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0xd, /** * @brief Source Port * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_SRC_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0xe, /** * @brief Outer Vlan Id * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_ID = SAI_ACL_TABLE_ATTR_FIELD_START + 0xf, /** * @brief Outer Vlan Priority * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_PRI = SAI_ACL_TABLE_ATTR_FIELD_START + 0x10, /** * @brief Outer Vlan CFI * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_CFI = SAI_ACL_TABLE_ATTR_FIELD_START + 0x11, /** * @brief Inner Vlan Id * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_ID = SAI_ACL_TABLE_ATTR_FIELD_START + 0x12, /** * @brief Inner Vlan Priority * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_PRI = SAI_ACL_TABLE_ATTR_FIELD_START + 0x13, /** * @brief Inner Vlan CFI * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_CFI = SAI_ACL_TABLE_ATTR_FIELD_START + 0x14, /** * @brief L4 Src Port * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_L4_SRC_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x15, /** * @brief L4 Dst Port * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_L4_DST_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x16, /** * @brief Inner L4 Src Port * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_L4_SRC_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x17, /** * @brief Inner L4 Dst Port * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_L4_DST_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x18, /** * @brief EtherType * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_ETHER_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x19, /** * @brief Inner EtherType * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_ETHER_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1a, /** * @brief IP Protocol * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_IP_PROTOCOL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1b, /** * @brief Inner IP Protocol * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_IP_PROTOCOL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1c, /** * @brief IP Identification * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_IP_IDENTIFICATION = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1d, /** * @brief IP DSCP * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_DSCP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1e, /** * @brief IP ECN * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_ECN = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1f, /** * @brief IP TTL * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_TTL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x20, /** * @brief IP TOS * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_TOS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x21, /** * @brief IP Flags * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_IP_FLAGS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x22, /** * @brief TCP Flags * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_TCP_FLAGS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x23, /** * @brief IP Type * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x24, /** * @brief IP Frag * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_FRAG = SAI_ACL_TABLE_ATTR_FIELD_START + 0x25, /** * @brief IPv6 Flow Label * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_IPV6_FLOW_LABEL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x26, /** * @brief Class-of-Service (Traffic Class) * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_TC = SAI_ACL_TABLE_ATTR_FIELD_START + 0x27, /** * @brief ICMP Type * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_ICMP_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x28, /** * @brief ICMP Code * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_ICMP_CODE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x29, /** * @brief ICMP Type for IPv6 * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_ICMPV6_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2a, /** * @brief ICMP Code for IPv6 * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_ICMPV6_CODE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2b, /** * @brief Vlan Tags * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_PACKET_VLAN = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2c, /** * @brief Tunnel VNI * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_TUNNEL_VNI = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2d, /** * @brief Match on packet that has vlan tag * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_HAS_VLAN_TAG = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2e, /** * @brief SCI value in MACsec packet SecTAG * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MACSEC_SCI = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2f, /** * @brief Label value for MPLS label on the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_LABEL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x30, /** * @brief TTL value for MPLS label on the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_TTL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x31, /** * @brief EXP value for MPLS label on the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_EXP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x32, /** * @brief BOS bit value for MPLS label on the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_BOS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x33, /** * @brief Label value for second MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_LABEL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x34, /** * @brief TTL value for second MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_TTL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x35, /** * @brief EXP value for second MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_EXP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x36, /** * @brief BOS bit value for second MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_BOS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x37, /** * @brief Label value for third MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_LABEL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x38, /** * @brief TTL value for third MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_TTL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x39, /** * @brief EXP value for third MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_EXP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x3a, /** * @brief BOS bit value for third MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_BOS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x3b, /** * @brief Label value for fourth MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_LABEL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x3c, /** * @brief TTL value for fourth MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_TTL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x3d, /** * @brief EXP value for fourth MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_EXP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x3e, /** * @brief BOS bit value for fourth MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_BOS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x3f, /** * @brief Label value for fifth MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_LABEL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x40, /** * @brief TTL value for fifth MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_TTL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x41, /** * @brief EXP value for fifth MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_EXP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x42, /** * @brief BOS bit value for fifth MPLS label from the top * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_BOS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x43, /* User Based metadata [bool] */ /** * @brief FDB DST user meta data * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_FDB_DST_USER_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x44, /** * @brief ROUTE DST User Meta data * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_ROUTE_DST_USER_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x45, /** * @brief Neighbor DST User metadata * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_NEIGHBOR_DST_USER_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x46, /** * @brief Port User metadata * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_PORT_USER_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x47, /** * @brief Vlan User metadata * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_VLAN_USER_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x48, /** * @brief Metadata carried from previous ACL Stage * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_ACL_USER_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x49, /* NPU Based metadata [bool] */ /** * @brief DST MAC address match in FDB * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_FDB_NPU_META_DST_HIT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x4a, /** * @brief DST IP address match in neighbor table * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_NEIGHBOR_NPU_META_DST_HIT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x4b, /** * @brief DST IP address match in Route table * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_ROUTE_NPU_META_DST_HIT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x4c, /** * @brief Base Transport Header opcode field * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_BTH_OPCODE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x4d, /** * @brief Ack_extented Transport Header syndrome field * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_AETH_SYNDROME = SAI_ACL_TABLE_ATTR_FIELD_START + 0x4e, /** * @brief User Defined Field Groups * Length is derived from the UDF group OID * * @type sai_object_id_t * @flags CREATE_ONLY * @objects SAI_OBJECT_TYPE_UDF_GROUP * @allownull true * @default SAI_NULL_OBJECT_ID * @range SAI_ACL_USER_DEFINED_FIELD_ATTR_ID_RANGE */ SAI_ACL_TABLE_ATTR_USER_DEFINED_FIELD_GROUP_MIN = SAI_ACL_TABLE_ATTR_FIELD_START + 0x4f, /** * @brief User Defined Field Groups end * Length is derived from the UDF group OID * * @type sai_object_id_t * @flags CREATE_ONLY * @objects SAI_OBJECT_TYPE_UDF_GROUP * @allownull true * @default SAI_NULL_OBJECT_ID */ SAI_ACL_TABLE_ATTR_USER_DEFINED_FIELD_GROUP_MAX = SAI_ACL_TABLE_ATTR_USER_DEFINED_FIELD_GROUP_MIN + SAI_ACL_USER_DEFINED_FIELD_ATTR_ID_RANGE, /** * @brief Range type defined * * @type sai_s32_list_t sai_acl_range_type_t * @flags CREATE_ONLY * @default empty */ SAI_ACL_TABLE_ATTR_FIELD_ACL_RANGE_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x14f, /** * @brief IPv6 Next Header * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_IPV6_NEXT_HEADER = SAI_ACL_TABLE_ATTR_FIELD_START + 0x150, /** * @brief GRE key * * The key is dedicated for GRE packets. * The VNI key should not be used for matching on GRE packets or NVGRE packets. * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_GRE_KEY = SAI_ACL_TABLE_ATTR_FIELD_START + 0x151, /** * @brief TAM INT type * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_TAM_INT_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x152, /** * @brief Inner Src MAC * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_SRC_MAC = SAI_ACL_TABLE_ATTR_FIELD_START + 0x15b, /** * @brief Inner Dst MAC * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_INNER_DST_MAC = SAI_ACL_TABLE_ATTR_FIELD_START + 0x15c, /** * @brief VRF_ID * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_VRF_ID = SAI_ACL_TABLE_ATTR_FIELD_START + 0x15d, /** * @brief IPMC_TABLE_HIT fields. * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_IPMC_NPU_META_DST_HIT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x15e, /** * @brief Tunnel terminated * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_TABLE_ATTR_FIELD_TUNNEL_TERMINATED = SAI_ACL_TABLE_ATTR_FIELD_START + 0x15f, /** * @brief End of ACL Table Match Field */ SAI_ACL_TABLE_ATTR_FIELD_END = SAI_ACL_TABLE_ATTR_FIELD_TUNNEL_TERMINATED, /** * @brief ACL table entries associated with this table. * * @type sai_object_list_t * @flags READ_ONLY * @objects SAI_OBJECT_TYPE_ACL_ENTRY */ SAI_ACL_TABLE_ATTR_ENTRY_LIST = 0x00002000, /** * @brief Available ACL entries for this table * * @type sai_uint32_t * @flags READ_ONLY */ SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_ENTRY, /** * @brief Available ACL counters for this table * * @type sai_uint32_t * @flags READ_ONLY */ SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_COUNTER, /** * @brief Match type for the table * * @type sai_acl_table_match_type_t * @flags CREATE_ONLY * @default SAI_ACL_TABLE_MATCH_TYPE_TERNARY */ SAI_ACL_TABLE_ATTR_ACL_TABLE_MATCH_TYPE, /** * @brief Start of Table Match valid bits * * The valid bits specify the bits of match field that should be * included in the lookup key. If a match field does not have * valid bits specified, all bits in the field are valid. * * For tables implemented using Exact Match, there is no further * key masking supported in table entries. The mask for such * entries needs to be set to all 1s. */ SAI_ACL_TABLE_ATTR_FIELD_VALID_BITS_START = 0x00003000, /** * @brief Src IPv6 Valid bits * * @type sai_acl_field_data_mask_t sai_ip6_t * @flags CREATE_ONLY * @default ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff * @validonly SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6 == true */ SAI_ACL_TABLE_ATTR_FIELD_VALID_BITS_SRC_IPV6 = SAI_ACL_TABLE_ATTR_FIELD_VALID_BITS_START, /** * @brief Dst IPv6 Valid bits * * @type sai_acl_field_data_mask_t sai_ip6_t * @flags CREATE_ONLY * @default ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff * @validonly SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6 == true */ SAI_ACL_TABLE_ATTR_FIELD_VALID_BITS_DST_IPV6 = SAI_ACL_TABLE_ATTR_FIELD_VALID_BITS_START + 1, /** * @brief End of Table Match Field Mask */ SAI_ACL_TABLE_ATTR_FIELD_VALID_BITS_END = SAI_ACL_TABLE_ATTR_FIELD_VALID_BITS_DST_IPV6, /** * @brief End of ACL Table attributes */ SAI_ACL_TABLE_ATTR_END, /** * @brief Custom range base value start */ SAI_ACL_TABLE_ATTR_CUSTOM_RANGE_START = 0x10000000, /** * @brief End of Custom range base */ SAI_ACL_TABLE_ATTR_CUSTOM_RANGE_END } sai_acl_table_attr_t; /** * @brief Attribute Id for sai_acl_entry * * @flags ranges */ typedef enum _sai_acl_entry_attr_t { /** * @brief Start of ACL Entry attributes */ SAI_ACL_ENTRY_ATTR_START, /** * @brief SAI ACL table object id * * @type sai_object_id_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY * @objects SAI_OBJECT_TYPE_ACL_TABLE * @isresourcetype true */ SAI_ACL_ENTRY_ATTR_TABLE_ID = SAI_ACL_ENTRY_ATTR_START, /** * @brief Priority * * Value must be in the range defined in * \[#SAI_SWITCH_ATTR_ACL_ENTRY_MINIMUM_PRIORITY, * #SAI_SWITCH_ATTR_ACL_ENTRY_MAXIMUM_PRIORITY\] * (default = #SAI_SWITCH_ATTR_ACL_ENTRY_MINIMUM_PRIORITY) * * @type sai_uint32_t * @flags CREATE_AND_SET * @default 0 */ SAI_ACL_ENTRY_ATTR_PRIORITY, /** * @brief Admin state * * @type bool * @flags CREATE_AND_SET * @default true */ SAI_ACL_ENTRY_ATTR_ADMIN_STATE, /* * Match fields [sai_acl_field_data_t] * - Mandatory to pass at least one field during ACL Rule creation. * - Unless noted specifically, both data and mask are required. * - When bit field is used, only those least significant bits are valid for * matching. */ /** * @brief Start of Rule Match Fields */ SAI_ACL_ENTRY_ATTR_FIELD_START = 0x00001000, /** * @brief Src IPv6 Address * * @type sai_acl_field_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6 = SAI_ACL_ENTRY_ATTR_FIELD_START, /** * @brief Src IPv6 Address 127:96 32 bits * * @type sai_acl_field_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD3 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x153, /** * @brief Src IPv6 Address 95:64 32 bits * * @type sai_acl_field_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD2 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x154, /** * @brief Src IPv6 Address 63:32 32 bits * * @type sai_acl_field_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD1 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x155, /** * @brief Src IPv6 Address 31:0 32 bits * * @type sai_acl_field_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD0 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x156, /** * @brief Dst IPv6 Address * * @type sai_acl_field_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1, /** * @brief Dst IPv6 Address 127:96 32 bits * * @type sai_acl_field_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD3 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x157, /** * @brief Dst IPv6 Address 95:64 32 bits * * @type sai_acl_field_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD2 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x158, /** * @brief Dst IPv6 Address 63:32 32 bits * * @type sai_acl_field_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD1 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x159, /** * @brief Dst IPv6 Address 31:0 32 bits * * @type sai_acl_field_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD0 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x15a, /** * @brief Inner Src IPv6 Address * * @type sai_acl_field_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_SRC_IPV6 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2, /** * @brief Inner Dst IPv6 Address * * @type sai_acl_field_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_DST_IPV6 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x3, /** * @brief Src MAC Address * * @type sai_acl_field_data_t sai_mac_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_SRC_MAC = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x4, /** * @brief Dst MAC Address * * @type sai_acl_field_data_t sai_mac_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_DST_MAC = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x5, /** * @brief Src IPv4 Address * * @type sai_acl_field_data_t sai_ip4_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_SRC_IP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x6, /** * @brief Dst IPv4 Address * * @type sai_acl_field_data_t sai_ip4_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_DST_IP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x7, /** * @brief Inner Src IPv4 Address * * @type sai_acl_field_data_t sai_ip4_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_SRC_IP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x8, /** * @brief Inner Dst IPv4 Address * * @type sai_acl_field_data_t sai_ip4_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_DST_IP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x9, /** * @brief In-Ports (mask is not needed) * * @type sai_acl_field_data_t sai_object_list_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_PORT * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_IN_PORTS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0xa, /** * @brief Out-Ports (mask is not needed) * * @type sai_acl_field_data_t sai_object_list_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_PORT * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_OUT_PORTS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0xb, /** * @brief In-Port (mask is not needed) * * @type sai_acl_field_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_PORT, SAI_OBJECT_TYPE_LAG * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_IN_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0xc, /** * @brief Out-Port (mask is not needed) * * @type sai_acl_field_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_PORT, SAI_OBJECT_TYPE_LAG * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_OUT_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0xd, /** * @brief Source port which could be a physical or LAG port * (mask is not needed) * * @type sai_acl_field_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_PORT * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_SRC_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0xe, /** * @brief Outer Vlan Id (12 bits) * * @type sai_acl_field_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan true * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_ID = SAI_ACL_ENTRY_ATTR_FIELD_START + 0xf, /** * @brief Outer Vlan Priority (3 bits) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_PRI = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x10, /** * @brief Outer Vlan CFI (1 bit) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_CFI = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x11, /** * @brief Inner Vlan Id (12 bits) * * @type sai_acl_field_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan true * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_ID = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x12, /** * @brief Inner Vlan Priority (3 bits) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_PRI = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x13, /** * @brief Inner Vlan CFI (1 bit) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_CFI = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x14, /** * @brief L4 Src Port * * @type sai_acl_field_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan false * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_L4_SRC_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x15, /** * @brief L4 Dst Port * * @type sai_acl_field_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan false * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_L4_DST_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x16, /** * @brief Inner L4 Src Port * * @type sai_acl_field_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan false * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_SRC_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x17, /** * @brief Inner L4 Dst Port * * @type sai_acl_field_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan false * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_DST_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x18, /** * @brief EtherType * * @type sai_acl_field_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan false * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_ETHER_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x19, /** * @brief Inner EtherType * * @type sai_acl_field_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan false * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_ETHER_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1a, /** * @brief IP Protocol * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_IP_PROTOCOL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1b, /** * @brief Inner IP Protocol * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_IP_PROTOCOL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1c, /** * @brief IP Identification * * @type sai_acl_field_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan false * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_IP_IDENTIFICATION = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1d, /** * @brief IP DSCP (6 bits) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_DSCP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1e, /** * @brief IP ECN (2 bits) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_ECN = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1f, /** * @brief IP TTL * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_TTL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x20, /** * @brief IP TOS * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_TOS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x21, /** * @brief IP Flags (3 bits) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_IP_FLAGS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x22, /** * @brief TCP Flags (6 bits) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_TCP_FLAGS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x23, /** * @brief IP Type (field mask is not needed) * * @type sai_acl_field_data_t sai_acl_ip_type_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_ACL_IP_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x24, /** * @brief IP Frag (field mask is not needed) * * @type sai_acl_field_data_t sai_acl_ip_frag_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_ACL_IP_FRAG = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x25, /** * @brief IPv6 Flow Label (20 bits) * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_IPV6_FLOW_LABEL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x26, /** * @brief Class-of-Service (Traffic Class) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_TC = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x27, /** * @brief ICMP Type * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_ICMP_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x28, /** * @brief ICMP Code * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_ICMP_CODE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x29, /** * @brief ICMP Type for IPv6 * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_ICMPV6_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2a, /** * @brief ICMP Code for IPv6 * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_ICMPV6_CODE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2b, /** * @brief Number of VLAN Tags * * @type sai_acl_field_data_t sai_packet_vlan_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_PACKET_VLAN = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2c, /** * @brief Tunnel VNI * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_TUNNEL_VNI = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2d, /** * @brief Match on packet that has vlan tag * * @type sai_acl_field_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_HAS_VLAN_TAG = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2e, /** * @brief SCI value in MACsec packet SecTAG * The MAC address of SCI is stored in the lowest memory address, * The port id of SCI is stored in the highest memory address. * * @type sai_acl_field_data_t sai_uint64_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MACSEC_SCI = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2f, /** * @brief Label value for MPLS label on the top * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_LABEL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x30, /** * @brief TTL value for MPLS label on the top * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_TTL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x31, /** * @brief EXP value for MPLS label on the top (3 bits) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_EXP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x32, /** * @brief BOS bit value for MPLS label on the top * * @type sai_acl_field_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_BOS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x33, /** * @brief Label value for second MPLS label from the top * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_LABEL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x34, /** * @brief TTL value for second MPLS label from the top * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_TTL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x35, /** * @brief EXP value for second MPLS label from the top (3 bits) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_EXP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x36, /** * @brief BOS bit value for second MPLS label from the top * * @type sai_acl_field_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_BOS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x37, /** * @brief Label value for third MPLS label from the top * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_LABEL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x38, /** * @brief TTL value for third MPLS label from the top * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_TTL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x39, /** * @brief EXP value for third MPLS label on the top (3 bits) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_EXP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x3a, /** * @brief BOS bit value for third MPLS label from the top * * @type sai_acl_field_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_BOS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x3b, /** * @brief Label value for fourth MPLS label from the top * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_LABEL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x3c, /** * @brief TTL value for fourth MPLS label from the top * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_TTL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x3d, /** * @brief EXP value for fourth MPLS label on the top (3 bits) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_EXP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x3e, /** * @brief BOS bit value for fourth MPLS label from the top * * @type sai_acl_field_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_BOS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x3f, /** * @brief Label value for fifth MPLS label from the top * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_LABEL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x40, /** * @brief TTL value for fifth MPLS label from the top * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_TTL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x41, /** * @brief EXP value for fifth MPLS label on the top (3 bits) * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_EXP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x42, /** * @brief BOS bit value for fifth MPLS label from the top * * @type sai_acl_field_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_BOS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x43, /* User Based metadata */ /** * @brief DST MAC address match user meta data in FDB * * Value must be in the range defined in * #SAI_SWITCH_ATTR_FDB_DST_USER_META_DATA_RANGE * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_FDB_DST_USER_META = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x44, /** * @brief DST IP address match user meta data in Route Table * * Value must be in the range defined in * #SAI_SWITCH_ATTR_ROUTE_DST_USER_META_DATA_RANGE * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_ROUTE_DST_USER_META = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x45, /** * @brief DST IP address match user meta data in Neighbor Table * * Value must be in the range defined in * #SAI_SWITCH_ATTR_NEIGHBOR_DST_USER_META_DATA_RANGE * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_NEIGHBOR_DST_USER_META = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x46, /** * @brief Port User metadata * * Value must be in the range defined in * SAI_SWITCH_ATTR_PORT_USER_META_DATA_RANGE * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_PORT_USER_META = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x47, /** * @brief Vlan User metadata * * Value must be in the range defined in * #SAI_SWITCH_ATTR_VLAN_USER_META_DATA_RANGE * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_VLAN_USER_META = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x48, /** * @brief Metadata carried from previous ACL stage. * * When an ACL entry set the meta data, the ACL metadata * form previous stages are overridden. * Value must be in the range defined in * #SAI_SWITCH_ATTR_ACL_USER_META_DATA_RANGE * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_ACL_USER_META = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x49, /* NPU Based metadata [bool] */ /** * @brief DST MAC address match in FDB * * @type sai_acl_field_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_FDB_NPU_META_DST_HIT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x4a, /** * @brief DST IP address match in neighbor Table * * @type sai_acl_field_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_NEIGHBOR_NPU_META_DST_HIT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x4b, /** * @brief DST IP address match in Route Table * * @type sai_acl_field_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_ROUTE_NPU_META_DST_HIT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x4c, /** * @brief Base Transport Header opcode field * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_BTH_OPCODE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x4d, /** * @brief Ack_extented Transport Header syndrome field * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_AETH_SYNDROME = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x4e, /** * @brief User Defined Field object for the UDF Groups in ACL Table * * @type sai_acl_field_data_t sai_u8_list_t * @flags CREATE_AND_SET * @default disabled * @range SAI_ACL_USER_DEFINED_FIELD_ATTR_ID_RANGE */ SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x4f, /** * @brief User Defined Field data max * * @type sai_acl_field_data_t sai_u8_list_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MAX = SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN + SAI_ACL_USER_DEFINED_FIELD_ATTR_ID_RANGE, /** * @brief Range Type defined in sai_acl_range_type_t * * List of SAI ACL Range Object Id * * @type sai_acl_field_data_t sai_object_list_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_ACL_RANGE * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_ACL_RANGE_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x14f, /** * @brief IPv6 Next Header (8 bits) * * This is to qualify 6th Byte value in IPv6 header. * * @type sai_acl_field_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_IPV6_NEXT_HEADER = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x150, /** * @brief GRE Key (32 bits) * * @type sai_acl_field_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_GRE_KEY = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x151, /** * @brief TAM INT type * * @type sai_acl_field_data_t sai_tam_int_type_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_TAM_INT_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x152, /** * @brief Inner Src MAC Address * * @type sai_acl_field_data_t sai_mac_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_SRC_MAC = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x15b, /** * @brief Inner Dst MAC Address * * @type sai_acl_field_data_t sai_mac_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_INNER_DST_MAC = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x15c, /** * @brief VRF_ID * * @type sai_acl_field_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_VIRTUAL_ROUTER * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_VRF_ID = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x15d, /** * @brief IPMC_TABLE_HIT * * @type sai_acl_field_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_IPMC_NPU_META_DST_HIT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x15e, /** * @brief Tunnel terminated flag * * @type sai_acl_field_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_FIELD_TUNNEL_TERMINATED = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x15f, /** * @brief End of Rule Match Fields */ SAI_ACL_ENTRY_ATTR_FIELD_END = SAI_ACL_ENTRY_ATTR_FIELD_TUNNEL_TERMINATED, /* * Actions [sai_acl_action_data_t] * * - To enable an action, parameter is needed unless noted specifically. * - To disable an action, parameter is not needed. */ /** * @brief Start of Rule Actions */ SAI_ACL_ENTRY_ATTR_ACTION_START = 0x00002000, /** * @brief Redirect Packet to a destination which can be a port, system port, * LAG, nexthop, nexthopgroup, bridge port, L2MC group,IPMC group * * When redirecting to a bridge port, the following behavior will happen according to the bridge port type: * SAI_BRIDGE_PORT_TYPE_PORT - Forward to bridge port, egress vlan will be the pipeline vlan * SAI_BRIDGE_PORT_TYPE_SUB_PORT - Forward to bridge port, egress vlan will be according to corresponding bridge port * SAI_BRIDGE_PORT_TYPE_1Q_ROUTER - Forward to router. RIF will be according to the outer vlan value in the pipeline * SAI_BRIDGE_PORT_TYPE_1D_ROUTER - Forward to router. RIF will be the corresponding 1d bridge RIF * SAI_BRIDGE_PORT_TYPE_TUNNEL - ACL based encap. Tunnel ID will be according to the corresponding bridge port. In * this case, it is mandatory to also supply action endpoint, with endpoint IP value * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_PORT, SAI_OBJECT_TYPE_SYSTEM_PORT, SAI_OBJECT_TYPE_LAG, SAI_OBJECT_TYPE_NEXT_HOP, SAI_OBJECT_TYPE_NEXT_HOP_GROUP, SAI_OBJECT_TYPE_BRIDGE_PORT, SAI_OBJECT_TYPE_L2MC_GROUP, SAI_OBJECT_TYPE_IPMC_GROUP * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_REDIRECT = SAI_ACL_ENTRY_ATTR_ACTION_START, /** * @brief Tunnel Endpoint IP. mandatory and valid only when redirect action is to SAI_BRIDGE_PORT_TYPE_TUNNEL * * @type sai_acl_action_data_t sai_ip_address_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_ENDPOINT_IP = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x1, /** * @brief Redirect Packet to a list of destination which can be * a port list. * * This action is deprecated and will be removed in future release. In order to achieve the functionality, * please use redirect action with next hop group or L2MC group or IPMC group. * * @type sai_acl_action_data_t sai_object_list_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_PORT, SAI_OBJECT_TYPE_SYSTEM_PORT, SAI_OBJECT_TYPE_LAG, SAI_OBJECT_TYPE_NEXT_HOP, SAI_OBJECT_TYPE_NEXT_HOP_GROUP * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_REDIRECT_LIST = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2, /** * @brief Packet Action * * @type sai_acl_action_data_t sai_packet_action_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_PACKET_ACTION = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x3, /** * @brief Flood Packet on Vlan domain (parameter is not needed) * * @type sai_acl_action_data_t sai_int32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_FLOOD = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x4, /** * @brief Attach/detach counter id to the entry * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_ACL_COUNTER * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_COUNTER = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x5, /** * @brief Ingress Mirror (mirror session id list) * * @type sai_acl_action_data_t sai_object_list_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_MIRROR_SESSION * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_MIRROR_INGRESS = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x6, /** * @brief Egress Mirror (mirror session id list) * * @type sai_acl_action_data_t sai_object_list_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_MIRROR_SESSION * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_MIRROR_EGRESS = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x7, /** * @brief Associate with policer * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_POLICER * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_POLICER = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x8, /** * @brief Decrement TTL (enable/disable) * * @type sai_acl_action_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_DECREMENT_TTL = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x9, /** * @brief Set Class-of-Service (Traffic Class) * * @type sai_acl_action_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_TC = SAI_ACL_ENTRY_ATTR_ACTION_START + 0xa, /** * @brief Set packet color * * @type sai_acl_action_data_t sai_packet_color_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_PACKET_COLOR = SAI_ACL_ENTRY_ATTR_ACTION_START + 0xb, /** * @brief Set Packet Inner Vlan Id (12 bits) * * @type sai_acl_action_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_ID = SAI_ACL_ENTRY_ATTR_ACTION_START + 0xc, /** * @brief Set Packet Inner Vlan Priority (3 bits) * * @type sai_acl_action_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_PRI = SAI_ACL_ENTRY_ATTR_ACTION_START + 0xd, /** * @brief Set Packet Outer Vlan Id (12 bits) * * @type sai_acl_action_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan true * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_ID = SAI_ACL_ENTRY_ATTR_ACTION_START + 0xe, /** * @brief Set Packet Outer Vlan Priority (3 bits) * * @type sai_acl_action_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_PRI = SAI_ACL_ENTRY_ATTR_ACTION_START + 0xf, /** * @brief Add Packet Vlan Id (12 bits) * * @type sai_acl_action_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan true * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_ADD_VLAN_ID = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x32, /** * @brief Add Packet Vlan Priority (3 bits) * * @type sai_acl_action_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_ADD_VLAN_PRI = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x33, /** * @brief Set Packet Src MAC Address * * @type sai_acl_action_data_t sai_mac_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_MAC = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x10, /** * @brief Set Packet Dst MAC Address * * @type sai_acl_action_data_t sai_mac_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_MAC = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x11, /** * @brief Set Packet Src IPv4 Address * * @type sai_acl_action_data_t sai_ip4_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_IP = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x12, /** * @brief Set Packet Src IPv4 Address * * @type sai_acl_action_data_t sai_ip4_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_IP = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x13, /** * @brief Set Packet Src IPv6 Address * * @type sai_acl_action_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_IPV6 = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x14, /** * @brief Set Packet Src IPv6 Address * * @type sai_acl_action_data_t sai_ip6_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_IPV6 = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x15, /** * @brief Set Packet DSCP (6 bits) * * @type sai_acl_action_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_DSCP = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x16, /** * @brief Set Packet ECN (2 bits) * * @type sai_acl_action_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_ECN = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x17, /** * @brief Set Packet L4 Src Port * * @type sai_acl_action_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan false * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_L4_SRC_PORT = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x18, /** * @brief Set Packet L4 Src Port * * @type sai_acl_action_data_t sai_uint16_t * @flags CREATE_AND_SET * @isvlan false * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_L4_DST_PORT = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x19, /** * @brief Set ingress packet sampling (sample packet session id) * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_SAMPLEPACKET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_INGRESS_SAMPLEPACKET_ENABLE = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x1a, /** * @brief Set egress packet sampling (sample packet session id) * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_SAMPLEPACKET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_EGRESS_SAMPLEPACKET_ENABLE = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x1b, /** * @brief Set metadata to carry forward to next ACL Stage * * Value Range #SAI_SWITCH_ATTR_ACL_USER_META_DATA_RANGE * * @type sai_acl_action_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_ACL_META_DATA = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x1c, /** * @brief Egress block port list * * This action would be deprecated in future release. To achieve this * functionality use isolation group. * * Packets matching the ACL entry and egressing out of the ports in the * given port list will be dropped. * * @type sai_acl_action_data_t sai_object_list_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_PORT * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_EGRESS_BLOCK_PORT_LIST = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x1d, /** * @brief Set User Defined Trap ID * * Copy packet action mandatory to be present (Copy/Trap/Log) * Value Range #SAI_SWITCH_ATTR_ACL_USER_TRAP_ID_RANGE * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_HOSTIF_USER_DEFINED_TRAP * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_USER_TRAP_ID = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x1e, /** * @brief Do Not Learn unknown source MAC on match(enable/disable) (parameter is not needed) * * @type sai_acl_action_data_t sai_uint32_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_DO_NOT_LEARN = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x1f, /** * @brief DTEL flow operation * * @warning experimental * * @type sai_acl_action_data_t sai_acl_dtel_flow_op_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_ACL_DTEL_FLOW_OP = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x20, /** * @brief DTEL INT session ID * * @warning experimental * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_DTEL_INT_SESSION * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_DTEL_INT_SESSION = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x21, /** * @brief Enable DTEL drop report * * @warning experimental * * @type sai_acl_action_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_DTEL_DROP_REPORT_ENABLE = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x22, /** * @brief Enable DTEL tail drop reporting * * @warning experimental * * @type sai_acl_action_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_DTEL_TAIL_DROP_REPORT_ENABLE = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x23, /** * @brief DTEL flow sample percentage * * @warning experimental * * @type sai_acl_action_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_DTEL_FLOW_SAMPLE_PERCENT = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x24, /** * @brief Enable DTEL report for all packets without filtering * * @warning experimental * * @type sai_acl_action_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_DTEL_REPORT_ALL_PACKETS = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x25, /** * @brief Set NAT exception rule * * @type sai_acl_action_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_NO_NAT = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x26, /** * @brief Enable INT metadata insertion * * @type sai_acl_action_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_INT_INSERT = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x27, /** * @brief Enable INT metadata deletion * * @type sai_acl_action_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_INT_DELETE = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x28, /** * @brief Enable INT metadata reports * * @type sai_acl_action_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_FLOW = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x29, /** * @brief Enable INT drop reports * * @type sai_acl_action_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_DROPS = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2a, /** * @brief Enable INT tail drop reports * * @type sai_acl_action_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_TAIL_DROPS = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2b, /** * @brief ACL bind point for TAM INT object * * Bind (or unbind) a TAM INT object. * Note that an ACL entry may bind a TAM INT object, or conversely a * TAM INT object may bind an ACL table or ACL group. In the latter * case, SAI_NULL_OBJECT_ID should be assigned as the attribute value. * * Note: Applicable only when SAI_ACL_ENTRY_ATTR_ACTION_INT_INSERT == true or SAI_ACL_ENTRY_ATTR_ACTION_INT_DELETE == true or SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_FLOW == true or SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_DROPS == true or SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_TAIL_DROPS == true * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_TAM_INT * @allownull true * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_TAM_INT_OBJECT = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2c, /** * @brief Set isolation group (isolation group object id) * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_ISOLATION_GROUP * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_ISOLATION_GROUP = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2d, /** * @brief MACsec flow * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_MACSEC_FLOW * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_MACSEC_FLOW = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2e, /** * @brief LAG Hash ID * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_HASH * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_LAG_HASH_ID = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2f, /** * @brief ECMP Hash ID * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_HASH * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_ECMP_HASH_ID = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x30, /** * @brief Set virtual router * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_VIRTUAL_ROUTER * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_VRF = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x31, /** * @brief Set Forwarding Class * * @type sai_acl_action_data_t sai_uint8_t * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_FORWARDING_CLASS = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x34, /** * @brief Enable ARS monitoring for a destination that can be a LAG or nexthopgroup * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_LAG, SAI_OBJECT_TYPE_NEXT_HOP_GROUP * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_ARS_MONITORING = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x35, /** * @brief Enable ARS object for a destination that can be a LAG or nexthopgroup * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_ARS * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_SET_ARS_OBJECT = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x36, /** * @brief Disable ARS forwarding for a given match condition. This rule takes effect only when global ARS profile object is created and has binding to the switch * * @type sai_acl_action_data_t bool * @flags CREATE_AND_SET * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_DISABLE_ARS_FORWARDING = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x37, /** * @brief Redirect Packet to a next chain table group object for chained lookup * * @type sai_acl_action_data_t sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_ACL_TABLE_CHAIN_GROUP * @default disabled */ SAI_ACL_ENTRY_ATTR_ACTION_CHAIN_REDIRECT = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x38, /** * @brief End of Rule Actions */ SAI_ACL_ENTRY_ATTR_ACTION_END = SAI_ACL_ENTRY_ATTR_ACTION_CHAIN_REDIRECT, /** * @brief End of ACL Entry attributes */ SAI_ACL_ENTRY_ATTR_END, /** Custom range base value */ SAI_ACL_ENTRY_ATTR_CUSTOM_RANGE_START = 0x10000000, /** End of custom range base */ SAI_ACL_ENTRY_ATTR_CUSTOM_RANGE_END } sai_acl_entry_attr_t; /** * @brief Attribute Id for sai_acl_counter */ typedef enum _sai_acl_counter_attr_t { /** * @brief Start of attributes */ SAI_ACL_COUNTER_ATTR_START, /** * @brief SAI ACL table object id * * @type sai_object_id_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY * @objects SAI_OBJECT_TYPE_ACL_TABLE */ SAI_ACL_COUNTER_ATTR_TABLE_ID = SAI_ACL_COUNTER_ATTR_START, /* * By default, Byte Counter would be created and following * use of the below attributes would result in an error. * * - Both packet count and byte count set to disable * - Only Byte count used which is set to disable */ /** * @brief Enable/disable packet count * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_COUNTER_ATTR_ENABLE_PACKET_COUNT, /** * @brief Enable/disable byte count * * @type bool * @flags CREATE_ONLY * @default false */ SAI_ACL_COUNTER_ATTR_ENABLE_BYTE_COUNT, /** * @brief Get/set packet count * * @type sai_uint64_t * @flags CREATE_AND_SET * @default 0 */ SAI_ACL_COUNTER_ATTR_PACKETS, /** * @brief Get/set byte count * * @type sai_uint64_t * @flags CREATE_AND_SET * @default 0 */ SAI_ACL_COUNTER_ATTR_BYTES, /** * @brief Attribute used to uniquely identify ACL counter. * * @type char * @flags CREATE_AND_SET * @default "" */ SAI_ACL_COUNTER_ATTR_LABEL, /** * @brief End of attributes */ SAI_ACL_COUNTER_ATTR_END, /** Custom range base value */ SAI_ACL_COUNTER_ATTR_CUSTOM_RANGE_START = 0x10000000, /** End of custom range base */ SAI_ACL_COUNTER_ATTR_CUSTOM_RANGE_END } sai_acl_counter_attr_t; /** * @brief Attribute data for ACL Range Type */ typedef enum _sai_acl_range_type_t { /** L4 Source Port Range */ SAI_ACL_RANGE_TYPE_L4_SRC_PORT_RANGE, /** L4 Destination Port Range */ SAI_ACL_RANGE_TYPE_L4_DST_PORT_RANGE, /** Outer Vlan Range */ SAI_ACL_RANGE_TYPE_OUTER_VLAN, /** Inner Vlan Range */ SAI_ACL_RANGE_TYPE_INNER_VLAN, /** Packet Length Range in bytes */ SAI_ACL_RANGE_TYPE_PACKET_LENGTH } sai_acl_range_type_t; /** * @brief Attribute Id for ACL Range Object */ typedef enum _sai_acl_range_attr_t { /** * @brief Start of attributes */ SAI_ACL_RANGE_ATTR_START, /** * @brief Range type * * Mandatory to pass only one of the range types * defined in sai_acl_range_type_t enum during ACL Range Creation. * Range Type cannot be changed after the range is created. * * @type sai_acl_range_type_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY */ SAI_ACL_RANGE_ATTR_TYPE = SAI_ACL_RANGE_ATTR_START, /** * @brief Start and End of ACL Range * * Range will include the start and end values. * Range Limit cannot be changed after the range is created. * * @type sai_u32_range_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY */ SAI_ACL_RANGE_ATTR_LIMIT, /** * @brief End of attributes */ SAI_ACL_RANGE_ATTR_END, /** Custom range base value */ SAI_ACL_RANGE_ATTR_CUSTOM_RANGE_START = 0x10000000, /** End of custom range base */ SAI_ACL_RANGE_ATTR_CUSTOM_RANGE_END } sai_acl_range_attr_t; /** * @brief Create an ACL table * * @param[out] acl_table_id The ACL table id * @param[in] switch_id Switch Object id * @param[in] attr_count Number of attributes * @param[in] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_create_acl_table_fn)( _Out_ sai_object_id_t *acl_table_id, _In_ sai_object_id_t switch_id, _In_ uint32_t attr_count, _In_ const sai_attribute_t *attr_list); /** * @brief Delete an ACL table * * @param[in] acl_table_id The ACL table id * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_remove_acl_table_fn)( _In_ sai_object_id_t acl_table_id); /** * @brief Set ACL table attribute * * @param[in] acl_table_id The ACL table id * @param[in] attr Attribute * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_set_acl_table_attribute_fn)( _In_ sai_object_id_t acl_table_id, _In_ const sai_attribute_t *attr); /** * @brief Get ACL table attribute * * @param[in] acl_table_id ACL table id * @param[in] attr_count Number of attributes * @param[inout] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_get_acl_table_attribute_fn)( _In_ sai_object_id_t acl_table_id, _In_ uint32_t attr_count, _Inout_ sai_attribute_t *attr_list); /** * @brief Create an ACL entry * * @param[out] acl_entry_id The ACL entry id * @param[in] switch_id The Switch Object id * @param[in] attr_count Number of attributes * @param[in] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_create_acl_entry_fn)( _Out_ sai_object_id_t *acl_entry_id, _In_ sai_object_id_t switch_id, _In_ uint32_t attr_count, _In_ const sai_attribute_t *attr_list); /** * @brief Delete an ACL entry * * @param[in] acl_entry_id The ACL entry id * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_remove_acl_entry_fn)( _In_ sai_object_id_t acl_entry_id); /** * @brief Set ACL entry attribute * * @param[in] acl_entry_id The ACL entry id * @param[in] attr Attribute * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_set_acl_entry_attribute_fn)( _In_ sai_object_id_t acl_entry_id, _In_ const sai_attribute_t *attr); /** * @brief Get ACL entry attribute * * @param[in] acl_entry_id ACL entry id * @param[in] attr_count Number of attributes * @param[inout] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_get_acl_entry_attribute_fn)( _In_ sai_object_id_t acl_entry_id, _In_ uint32_t attr_count, _Inout_ sai_attribute_t *attr_list); /** * @brief Create an ACL counter * * @param[out] acl_counter_id The ACL counter id * @param[in] switch_id The switch Object id * @param[in] attr_count Number of attributes * @param[in] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_create_acl_counter_fn)( _Out_ sai_object_id_t *acl_counter_id, _In_ sai_object_id_t switch_id, _In_ uint32_t attr_count, _In_ const sai_attribute_t *attr_list); /** * @brief Delete an ACL counter * * @param[in] acl_counter_id The ACL counter id * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_remove_acl_counter_fn)( _In_ sai_object_id_t acl_counter_id); /** * @brief Set ACL counter attribute * * @param[in] acl_counter_id The ACL counter id * @param[in] attr Attribute * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_set_acl_counter_attribute_fn)( _In_ sai_object_id_t acl_counter_id, _In_ const sai_attribute_t *attr); /** * @brief Get ACL counter attribute * * @param[in] acl_counter_id ACL counter id * @param[in] attr_count Number of attributes * @param[inout] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_get_acl_counter_attribute_fn)( _In_ sai_object_id_t acl_counter_id, _In_ uint32_t attr_count, _Inout_ sai_attribute_t *attr_list); /** * @brief Create an ACL Range * * @param[out] acl_range_id The ACL range id * @param[in] switch_id The Switch object id * @param[in] attr_count Number of attributes * @param[in] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_create_acl_range_fn)( _Out_ sai_object_id_t *acl_range_id, _In_ sai_object_id_t switch_id, _In_ uint32_t attr_count, _In_ const sai_attribute_t *attr_list); /** * @brief Remove an ACL Range * * @param[in] acl_range_id The ACL range id * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_remove_acl_range_fn)( _In_ sai_object_id_t acl_range_id); /** * @brief Set ACL range attribute * * @param[in] acl_range_id The ACL range id * @param[in] attr Attribute * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_set_acl_range_attribute_fn)( _In_ sai_object_id_t acl_range_id, _In_ const sai_attribute_t *attr); /** * @brief Get ACL range attribute * * @param[in] acl_range_id ACL range id * @param[in] attr_count Number of attributes * @param[inout] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_get_acl_range_attribute_fn)( _In_ sai_object_id_t acl_range_id, _In_ uint32_t attr_count, _Inout_ sai_attribute_t *attr_list); /** * @brief Create an ACL Table Group * * @param[out] acl_table_group_id The ACL group id * @param[in] switch_id Switch ID * @param[in] attr_count Number of attributes * @param[in] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_create_acl_table_group_fn)( _Out_ sai_object_id_t *acl_table_group_id, _In_ sai_object_id_t switch_id, _In_ uint32_t attr_count, _In_ const sai_attribute_t *attr_list); /** * @brief Delete an ACL Group * * @param[in] acl_table_group_id The ACL group id * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_remove_acl_table_group_fn)( _In_ sai_object_id_t acl_table_group_id); /** * @brief Set ACL table group attribute * * @param[in] acl_table_group_id The ACL table group id * @param[in] attr Attribute * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_set_acl_table_group_attribute_fn)( _In_ sai_object_id_t acl_table_group_id, _In_ const sai_attribute_t *attr); /** * @brief Get ACL table group attribute * * @param[in] acl_table_group_id ACL table group id * @param[in] attr_count Number of attributes * @param[inout] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_get_acl_table_group_attribute_fn)( _In_ sai_object_id_t acl_table_group_id, _In_ uint32_t attr_count, _Inout_ sai_attribute_t *attr_list); /** * @brief Create an ACL Table Group Member * * @param[out] acl_table_group_member_id The ACL table group member id * @param[in] switch_id Switch ID * @param[in] attr_count Number of attributes * @param[in] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_create_acl_table_group_member_fn)( _Out_ sai_object_id_t *acl_table_group_member_id, _In_ sai_object_id_t switch_id, _In_ uint32_t attr_count, _In_ const sai_attribute_t *attr_list); /** * @brief Delete an ACL Group Member * * @param[in] acl_table_group_member_id The ACL table group member id * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_remove_acl_table_group_member_fn)( _In_ sai_object_id_t acl_table_group_member_id); /** * @brief Set ACL table group member attribute * * @param[in] acl_table_group_member_id The ACL table group member id * @param[in] attr Attribute * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_set_acl_table_group_member_attribute_fn)( _In_ sai_object_id_t acl_table_group_member_id, _In_ const sai_attribute_t *attr); /** * @brief Get ACL table group member attribute * * @param[in] acl_table_group_member_id ACL table group member id * @param[in] attr_count Number of attributes * @param[inout] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_get_acl_table_group_member_attribute_fn)( _In_ sai_object_id_t acl_table_group_member_id, _In_ uint32_t attr_count, _Inout_ sai_attribute_t *attr_list); /** * @brief Create an ACL Table Chain Group * * @param[out] acl_table_chain_group_id The ACL sub group id * @param[in] switch_id Switch ID * @param[in] attr_count Number of attributes * @param[in] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_create_acl_table_chain_group_fn)( _Out_ sai_object_id_t *acl_table_chain_group_id, _In_ sai_object_id_t switch_id, _In_ uint32_t attr_count, _In_ const sai_attribute_t *attr_list); /** * @brief Delete an ACL Table Chain Group * * @param[in] acl_table_chain_group_id The ACL chain_group id * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_remove_acl_table_chain_group_fn)( _In_ sai_object_id_t acl_table_chain_group_id); /** * @brief Set ACL table chain group attribute * * @param[in] acl_table_chain_group_id The ACL table chain_group id * @param[in] attr Attribute * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_set_acl_table_chain_group_attribute_fn)( _In_ sai_object_id_t acl_table_chain_group_id, _In_ const sai_attribute_t *attr); /** * @brief Get ACL table chain group attribute * * @param[in] acl_table_chain_group_id ACL table chain_group id * @param[in] attr_count Number of attributes * @param[inout] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_get_acl_table_chain_group_attribute_fn)( _In_ sai_object_id_t acl_table_chain_group_id, _In_ uint32_t attr_count, _Inout_ sai_attribute_t *attr_list); /** * @brief Port methods table retrieved with sai_api_query() */ typedef struct _sai_acl_api_t { sai_create_acl_table_fn create_acl_table; sai_remove_acl_table_fn remove_acl_table; sai_set_acl_table_attribute_fn set_acl_table_attribute; sai_get_acl_table_attribute_fn get_acl_table_attribute; sai_create_acl_entry_fn create_acl_entry; sai_remove_acl_entry_fn remove_acl_entry; sai_set_acl_entry_attribute_fn set_acl_entry_attribute; sai_get_acl_entry_attribute_fn get_acl_entry_attribute; sai_create_acl_counter_fn create_acl_counter; sai_remove_acl_counter_fn remove_acl_counter; sai_set_acl_counter_attribute_fn set_acl_counter_attribute; sai_get_acl_counter_attribute_fn get_acl_counter_attribute; sai_create_acl_range_fn create_acl_range; sai_remove_acl_range_fn remove_acl_range; sai_set_acl_range_attribute_fn set_acl_range_attribute; sai_get_acl_range_attribute_fn get_acl_range_attribute; sai_create_acl_table_group_fn create_acl_table_group; sai_remove_acl_table_group_fn remove_acl_table_group; sai_set_acl_table_group_attribute_fn set_acl_table_group_attribute; sai_get_acl_table_group_attribute_fn get_acl_table_group_attribute; sai_create_acl_table_group_member_fn create_acl_table_group_member; sai_remove_acl_table_group_member_fn remove_acl_table_group_member; sai_set_acl_table_group_member_attribute_fn set_acl_table_group_member_attribute; sai_get_acl_table_group_member_attribute_fn get_acl_table_group_member_attribute; sai_create_acl_table_chain_group_fn create_acl_table_chain_group; sai_remove_acl_table_chain_group_fn remove_acl_table_chain_group; sai_set_acl_table_chain_group_attribute_fn set_acl_table_chain_group_attribute; sai_get_acl_table_chain_group_attribute_fn get_acl_table_chain_group_attribute; } sai_acl_api_t; /** * @} */ #endif /** __SAIACL_H_ */