diff --git a/.gitignore b/.gitignore index 20dedcaee8..75769ddb2c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # metadata build artifacts meta/xml meta/html +meta/temp meta/*.o meta/*.lo diff --git a/doc/ECMP/Class-Based-Forwarding.md b/doc/ECMP/Class-Based-Forwarding.md new file mode 100644 index 0000000000..5fca941dd3 --- /dev/null +++ b/doc/ECMP/Class-Based-Forwarding.md @@ -0,0 +1,211 @@ +# Class-based Forwarding + +Title | Class-based Forwarding +------------|---------------- +Authors | Cisco +Status | In review +Type | Standards track +Created | 04/14/2021 +SAI-Version | 1.8 + +Class-based forwarding provides a method to steer traffic among multiple paths through the network by policy rather than, or in combination with, traditional ECMP/UCMP flow-hashing. + +A new type of next-hop group is introduced: + +``` +typedef enum _sai_next_hop_group_type_t +{ +... + /** Next hop group is class-based, with members selected by Forwarding class */ + SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED, +... +} sai_next_hop_group_type_t; +``` + +The behavior of SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED differs from the traditional SAI_NEXT_HOP_GROUP_TYPE_ECMP, in that each packet will have a Forwarding class that chooses next-hop group member index. + +This is accomplished by directly mapping each forwarding class to the group member index, via map configured to the next-hop group object. + +``` + /** + * @brief Member selection map + * + * @type sai_object_id_t + * @flags CREATE_AND_SET + * @objects SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MAP + * @allownull true + * @default SAI_NULL_OBJECT_ID + * @validonly SAI_NEXT_HOP_GROUP_ATTR_TYPE == SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED + */ + SAI_NEXT_HOP_GROUP_ATTR_SELECTION_MAP, +``` + +If a packet arrives with a forwarding-class which is not present in the map, the chosen index shall be 0. + +``` +typedef enum _sai_next_hop_group_member_attr_t +{ +... + /** + * @brief Object index in the next-hop group. + * + * Index specifying the strict member's order. + * Allowed value range for is from 0 to SAI_NEXT_HOP_GROUP_ATTR_REAL_SIZE - 1. + * Should only be used if the type of owning group is SAI_NEXT_HOP_GROUP_TYPE_FINE_GRAIN_ECMP + * or SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED. + * + * @type sai_uint32_t + * @flags CREATE_ONLY + * @default 0 + */ + SAI_NEXT_HOP_GROUP_MEMBER_ATTR_INDEX, +... +} sai_next_hop_group_member_attr_t; +``` + +If the map selects an index for which a member does not exist, the packet shall be treated as having a next-hop of SAI_NULL_OBJECT_ID, dropping the packet. + +Members of type next-hop or next-hop groups of type ECMP shall be allowed. To allow this, next-hop group member type is extended to allow other next-hop groups: + +``` + /** + * @brief Next hop id + * + * @type sai_object_id_t + * @flags MANDATORY_ON_CREATE | CREATE_AND_SET + * @objects SAI_OBJECT_TYPE_NEXT_HOP, SAI_OBJECT_TYPE_NEXT_HOP_GROUP + */ + SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID, +``` + +*Note: While this would also be a means to configure a hierarchical ECMP, hierarchical ECMP is outside the scope of this proposal.* + +The forwarding-class for a packet may be selected via qos-map or ACL. + +``` +typedef enum _sai_qos_map_type_t +{ +... + /** QOS Map to set DSCP to Forwarding class */ + SAI_QOS_MAP_TYPE_DSCP_TO_FORWARDING_CLASS = 0x0000000d, + + /** QOS Map to set EXP to Forwarding class */ + SAI_QOS_MAP_TYPE_MPLS_EXP_TO_FORWARDING_CLASS = 0x0000000e, +... +} sai_qos_map_type_t; +``` + +``` +typedef enum _sai_acl_entry_attr_t +... + /** + * @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_t; +``` + +If the packet is not assigned a forwarding-class, then the forwarding-class of the packet shall be 0. For example, if no qos-map or ACL is configured. Normal QOS/ACL precedence rules apply; if supported by the implementation, the ACL would override the QOS MAP decision. + +*Resource monitoring considerations:* + +The attribute SAI_SWITCH_ATTR_MAX_NUMBER_OF_FORWARDING_CLASSES may be used to identify the maximum forwarding-class allowed. + +The SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MAP object is a resource. The sai_object_type_get_availability() API may be used to query the maximum number of permitted maps. + +*Class-based forwarding group configuration example:* +``` +/****************************************************** + * Create a forwarding-class -> index map. + * In this example, map 8 forwarding-classes to 2 members. + * FC 0-5 -> index 0 + * FC 6-7 -> index 1 + ******************************************************/ + const int num_forwarding_classes = 8; + const int num_members = 2; + + sai_object_id_t nh_group_map; + + sai_map_t fc_map[num_forwarding_classes]; + for (int fc = 0; fc < num_forwarding_classes; ++fc) { + fc_map[fc].key = fc; + if (fc >= 6) { + fc_map[fc].value = 1; + } else { + fc_map[fc].value = 0; + } + } + + sai_map_list_t fc_map_list; + fc_map_list.key.count = num_forwarding_classes; + fc_map_list.key.list = fc_map; + + attr.id = SAI_NEXT_HOP_GROUP_MAP_ATTR_TYPE; + attr.value.u32 = SAI_NEXT_HOP_GROUP_MAP_TYPE_FORWARDING_CLASS_TO_INDEX; + attrs.push_back(attr); + + attr.id = SAI_NEXT_HOP_GROUP_MAP_ATTR_MAP_TO_VALUE_LIST; + attr.value.maplist = fc_map_list; + attrs.push_back(attr); + + sai_next_hop_group_api->create_next_hop_group_map( + &nh_group_map, + g_switch_id, + attrs.size(), + attrs.data()); + + /***************************************************** + * Create a class-based forwarding group + *****************************************************/ + attrs.clear(); + + sai_object_id_t nh_group; + + attr.id = SAI_NEXT_HOP_GROUP_ATTR_TYPE; + attr.value.u32 = SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED; + attrs.push_back(attr); + + attr.id = SAI_NEXT_HOP_GROUP_ATTR_CONFIGURED_SIZE; + attr.value.u32 = num_members; + attrs.push_back(attr); + + attr.id = SAI_NEXT_HOP_GROUP_ATTR_SELECTION_MAP; + attr.value.oid = nh_group_map; + attrs.push_back(attr); + + sai_next_hop_group_api->create_next_hop_group( + &nh_group, + g_switch_id, + attrs.size(), + attrs.data()); + + /***************************************************** + * Create members + *****************************************************/ + attrs.clear(); + + for (index = 0; index < num_members; ++index) { + attr.id = SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_GROUP_ID; + attr.value.oid = nh_group; + attrs.push_back(attr); + + attr.id = SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID; + attr.value.oid = destinations[index]; // Next-hop or ECMP group + attrs.push_back(attr); + + attr.id = SAI_NEXT_HOP_GROUP_MEMBER_ATTR_INDEX; + attr.value.u32 = index; + attrs.push_back(attr); + + sai_next_hop_group_api->create_next_hop_group_member( + &members[member_index], + g_switch_id, + attrs.size(), + attrs.data()); + } +``` diff --git a/doc/My-Mac.md b/doc/My-Mac.md new file mode 100644 index 0000000000..5a7334789b --- /dev/null +++ b/doc/My-Mac.md @@ -0,0 +1,22 @@ +# Overview +Router Interface's Source MAC address is used in the ingress pipeline to match against a received packet's Destination MAC address (along with port and VLAN as applicable) to decide if the packet should be L3 processed or L2 processed. + +# Proposal +This proposal provides for a dedicated way to program the MAC address used in the ingress pipeline. + +A My-MAC entry is defined with port, VLAN and MAC address as match criteria. + +# Usage + +## Add My MAC entry +``` + sai_attribute_t attr; + + attr.id = SAI_MY_STATION_ATTR_MAC_ADDRESS; + memcpy (attr.value.mac, my_mac, sizoef(sai_mac_t)); + + status = sai_my_mac_api->create_my_mac(&my_mac_oid, switch_id, + 1, &attr); +``` + + diff --git a/doc/behavioral model/pipeline_v9.vsdx b/doc/behavioral model/pipeline_v9.vsdx new file mode 100644 index 0000000000..d10a59731a Binary files /dev/null and b/doc/behavioral model/pipeline_v9.vsdx differ diff --git a/inc/sai.h b/inc/sai.h index 9fcac9422f..082a8594e8 100644 --- a/inc/sai.h +++ b/inc/sai.h @@ -73,6 +73,7 @@ #include "sainat.h" #include "saiisolationgroup.h" #include "saidebugcounter.h" +#include "saimymac.h" /** * @defgroup SAI SAI - Entry point specific API definitions. @@ -134,7 +135,8 @@ typedef enum _sai_api_t SAI_API_DEBUG_COUNTER = 42, /**< sai_debug_counter_api_t */ SAI_API_MACSEC = 43, /**< sai_macsec_api_t */ SAI_API_SYSTEM_PORT = 44, /**< sai_system_port_api_t */ - SAI_API_IPSEC = 45, /**< sai_ipsec_api_t */ + SAI_API_MY_MAC = 45, /**< sai_my_mac_api_t */ + SAI_API_IPSEC = 46, /**< sai_ipsec_api_t */ SAI_API_MAX, /**< total number of APIs */ } sai_api_t; diff --git a/inc/saiacl.h b/inc/saiacl.h index c27bf284ac..ece8e6c2d4 100644 --- a/inc/saiacl.h +++ b/inc/saiacl.h @@ -119,160 +119,163 @@ typedef enum _sai_acl_dtel_flow_op_t typedef enum _sai_acl_action_type_t { /** Set Redirect */ - SAI_ACL_ACTION_TYPE_REDIRECT, + SAI_ACL_ACTION_TYPE_REDIRECT = 0x00000000, /** Set tunnel endpoint IP */ - SAI_ACL_ACTION_TYPE_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, + SAI_ACL_ACTION_TYPE_REDIRECT_LIST = 0x00000002, /** Packet Action */ - SAI_ACL_ACTION_TYPE_PACKET_ACTION, + SAI_ACL_ACTION_TYPE_PACKET_ACTION = 0x00000003, /** Flood Packet on Vlan domain */ - SAI_ACL_ACTION_TYPE_FLOOD, + SAI_ACL_ACTION_TYPE_FLOOD = 0x00000004, /** Attach/detach counter id to the entry */ - SAI_ACL_ACTION_TYPE_COUNTER, + SAI_ACL_ACTION_TYPE_COUNTER = 0x00000005, /** Ingress Mirror */ - SAI_ACL_ACTION_TYPE_MIRROR_INGRESS, + SAI_ACL_ACTION_TYPE_MIRROR_INGRESS = 0x00000006, /** Egress Mirror */ - SAI_ACL_ACTION_TYPE_MIRROR_EGRESS, + SAI_ACL_ACTION_TYPE_MIRROR_EGRESS = 0x00000007, /** Associate with policer */ - SAI_ACL_ACTION_TYPE_SET_POLICER, + SAI_ACL_ACTION_TYPE_SET_POLICER = 0x00000008, /** Decrement TTL */ - SAI_ACL_ACTION_TYPE_DECREMENT_TTL, + SAI_ACL_ACTION_TYPE_DECREMENT_TTL = 0x00000009, /** Set Class-of-Service */ - SAI_ACL_ACTION_TYPE_SET_TC, + SAI_ACL_ACTION_TYPE_SET_TC = 0x0000000a, /** Set Packet Color */ - SAI_ACL_ACTION_TYPE_SET_PACKET_COLOR, + SAI_ACL_ACTION_TYPE_SET_PACKET_COLOR = 0x0000000b, /** Set Packet Inner Vlan Id */ - SAI_ACL_ACTION_TYPE_SET_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, + SAI_ACL_ACTION_TYPE_SET_INNER_VLAN_PRI = 0x0000000d, /** Set Packet Outer Vlan Id */ - SAI_ACL_ACTION_TYPE_SET_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, + SAI_ACL_ACTION_TYPE_SET_OUTER_VLAN_PRI = 0x0000000f, /** Add Packet Vlan Id */ - SAI_ACL_ACTION_TYPE_ADD_VLAN_ID, + SAI_ACL_ACTION_TYPE_ADD_VLAN_ID = 0x00000032, /** Add Packet Vlan Priority */ - SAI_ACL_ACTION_TYPE_ADD_VLAN_PRI, + SAI_ACL_ACTION_TYPE_ADD_VLAN_PRI = 0x00000033, /** Set Packet Src MAC Address */ - SAI_ACL_ACTION_TYPE_SET_SRC_MAC, + SAI_ACL_ACTION_TYPE_SET_SRC_MAC = 0x00000010, /** Set Packet Dst MAC Address */ - SAI_ACL_ACTION_TYPE_SET_DST_MAC, + SAI_ACL_ACTION_TYPE_SET_DST_MAC = 0x00000011, /** Set Packet Src IPv4 Address */ - SAI_ACL_ACTION_TYPE_SET_SRC_IP, + SAI_ACL_ACTION_TYPE_SET_SRC_IP = 0x00000012, /** Set Packet Src IPv4 Address */ - SAI_ACL_ACTION_TYPE_SET_DST_IP, + SAI_ACL_ACTION_TYPE_SET_DST_IP = 0x00000013, /** Set Packet Src IPv6 Address */ - SAI_ACL_ACTION_TYPE_SET_SRC_IPV6, + SAI_ACL_ACTION_TYPE_SET_SRC_IPV6 = 0x00000014, /** Set Packet Src IPv6 Address */ - SAI_ACL_ACTION_TYPE_SET_DST_IPV6, + SAI_ACL_ACTION_TYPE_SET_DST_IPV6 = 0x00000015, /** Set Packet DSCP */ - SAI_ACL_ACTION_TYPE_SET_DSCP, + SAI_ACL_ACTION_TYPE_SET_DSCP = 0x00000016, /** Set Packet ECN */ - SAI_ACL_ACTION_TYPE_SET_ECN, + SAI_ACL_ACTION_TYPE_SET_ECN = 0x00000017, /** Set Packet L4 Src Port */ - SAI_ACL_ACTION_TYPE_SET_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, + SAI_ACL_ACTION_TYPE_SET_L4_DST_PORT = 0x00000019, /** Set ingress packet sampling */ - SAI_ACL_ACTION_TYPE_INGRESS_SAMPLEPACKET_ENABLE, + SAI_ACL_ACTION_TYPE_INGRESS_SAMPLEPACKET_ENABLE = 0x0000001a, /** Set egress packet sampling */ - SAI_ACL_ACTION_TYPE_EGRESS_SAMPLEPACKET_ENABLE, + 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, + SAI_ACL_ACTION_TYPE_SET_ACL_META_DATA = 0x0000001c, /** Egress block port list. To be deprecated */ - SAI_ACL_ACTION_TYPE_EGRESS_BLOCK_PORT_LIST, + SAI_ACL_ACTION_TYPE_EGRESS_BLOCK_PORT_LIST = 0x0000001d, /** Set user defined trap id */ - SAI_ACL_ACTION_TYPE_SET_USER_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, + SAI_ACL_ACTION_TYPE_SET_DO_NOT_LEARN = 0x0000001f, /** Set DTEL flow operation (experimental) */ - SAI_ACL_ACTION_TYPE_ACL_DTEL_FLOW_OP, + SAI_ACL_ACTION_TYPE_ACL_DTEL_FLOW_OP = 0x00000020, /** Set DTEL INT session (experimental) */ - SAI_ACL_ACTION_TYPE_DTEL_INT_SESSION, + SAI_ACL_ACTION_TYPE_DTEL_INT_SESSION = 0x00000021, /** Enable DTEL drop report (experimental) */ - SAI_ACL_ACTION_TYPE_DTEL_DROP_REPORT_ENABLE, + SAI_ACL_ACTION_TYPE_DTEL_DROP_REPORT_ENABLE = 0x00000022, /** Enable DTEL tail drop reporting (experimental) */ - SAI_ACL_ACTION_TYPE_DTEL_TAIL_DROP_REPORT_ENABLE, + SAI_ACL_ACTION_TYPE_DTEL_TAIL_DROP_REPORT_ENABLE = 0x00000023, /** Set DTEL flow sampling (experimental) */ - SAI_ACL_ACTION_TYPE_DTEL_FLOW_SAMPLE_PERCENT, + 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, + SAI_ACL_ACTION_TYPE_DTEL_REPORT_ALL_PACKETS = 0x00000025, /** Set NAT exception rule */ - SAI_ACL_ACTION_TYPE_NO_NAT, + SAI_ACL_ACTION_TYPE_NO_NAT = 0x00000026, /** Enable insertion of INT metadata */ - SAI_ACL_ACTION_TYPE_INT_INSERT, + SAI_ACL_ACTION_TYPE_INT_INSERT = 0x00000027, /** Enable deletion of INT metadata */ - SAI_ACL_ACTION_TYPE_INT_DELETE, + SAI_ACL_ACTION_TYPE_INT_DELETE = 0x00000028, /** Enable reports of INT metadata */ - SAI_ACL_ACTION_TYPE_INT_REPORT_FLOW, + SAI_ACL_ACTION_TYPE_INT_REPORT_FLOW = 0x00000029, /** Enable INT drop reports */ - SAI_ACL_ACTION_TYPE_INT_REPORT_DROPS, + SAI_ACL_ACTION_TYPE_INT_REPORT_DROPS = 0x0000002a, /** Enable INT tail drop reports */ - SAI_ACL_ACTION_TYPE_INT_REPORT_TAIL_DROPS, + SAI_ACL_ACTION_TYPE_INT_REPORT_TAIL_DROPS = 0x0000002b, /** Bind a TAM INT object */ - SAI_ACL_ACTION_TYPE_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, + SAI_ACL_ACTION_TYPE_SET_ISOLATION_GROUP = 0x0000002d, /** Bind a MACsec flow object */ - SAI_ACL_ACTION_TYPE_MACSEC_FLOW, + SAI_ACL_ACTION_TYPE_MACSEC_FLOW = 0x0000002e, /** Set custom LAG hash object ID */ - SAI_ACL_ACTION_TYPE_SET_LAG_HASH_ID, + SAI_ACL_ACTION_TYPE_SET_LAG_HASH_ID = 0x0000002f, /** Set custom ECMP hash object ID */ - SAI_ACL_ACTION_TYPE_SET_ECMP_HASH_ID, + SAI_ACL_ACTION_TYPE_SET_ECMP_HASH_ID = 0x00000030, /** Associate with virtual router */ - SAI_ACL_ACTION_TYPE_SET_VRF + SAI_ACL_ACTION_TYPE_SET_VRF = 0x00000031, + + /** Set Forwarding class */ + SAI_ACL_ACTION_TYPE_SET_FORWARDING_CLASS = 0x00000034, } sai_acl_action_type_t; @@ -550,7 +553,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD3, + SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD3 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x153, /** * @brief Src IPv6 Address 95:64 32 bits @@ -559,7 +562,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD2, + SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD2 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x154, /** * @brief Src IPv6 Address 63:32 32 bits @@ -568,7 +571,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD1, + SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD1 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x155, /** * @brief Src IPv6 Address 31:0 32 bits @@ -577,7 +580,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD0, + SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6_WORD0 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x156, /** * @brief Dst IPv6 Address @@ -586,7 +589,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6, + SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1, /** * @brief Dst IPv6 Address 127:96 32 bits @@ -595,7 +598,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD3, + SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD3 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x157, /** * @brief Dst IPv6 Address 95:64 32 bits @@ -604,7 +607,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD2, + SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD2 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x158, /** * @brief Dst IPv6 Address 63:32 32 bits @@ -613,7 +616,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD1, + SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD1 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x159, /** * @brief Dst IPv6 Address 31:0 32 bits @@ -622,7 +625,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD0, + SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD0 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x15a, /** * @brief Inner Src IPv6 Address @@ -631,7 +634,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_INNER_SRC_IPV6, + SAI_ACL_TABLE_ATTR_FIELD_INNER_SRC_IPV6 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2, /** * @brief Inner Dst IPv6 Address @@ -640,7 +643,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_INNER_DST_IPV6, + SAI_ACL_TABLE_ATTR_FIELD_INNER_DST_IPV6 = SAI_ACL_TABLE_ATTR_FIELD_START + 0x3, /** * @brief Src MAC Address @@ -649,7 +652,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_SRC_MAC, + SAI_ACL_TABLE_ATTR_FIELD_SRC_MAC = SAI_ACL_TABLE_ATTR_FIELD_START + 0x4, /** * @brief Dst MAC Address @@ -658,7 +661,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_DST_MAC, + SAI_ACL_TABLE_ATTR_FIELD_DST_MAC = SAI_ACL_TABLE_ATTR_FIELD_START + 0x5, /** * @brief Src IPv4 Address @@ -667,7 +670,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_SRC_IP, + SAI_ACL_TABLE_ATTR_FIELD_SRC_IP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x6, /** * @brief Dst IPv4 Address @@ -676,7 +679,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_DST_IP, + SAI_ACL_TABLE_ATTR_FIELD_DST_IP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x7, /** * @brief Inner Src IPv4 Address @@ -685,7 +688,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_INNER_SRC_IP, + SAI_ACL_TABLE_ATTR_FIELD_INNER_SRC_IP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x8, /** * @brief Inner Dst IPv4 Address @@ -694,7 +697,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_INNER_DST_IP, + SAI_ACL_TABLE_ATTR_FIELD_INNER_DST_IP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x9, /** * @brief In-Ports @@ -703,7 +706,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_IN_PORTS, + SAI_ACL_TABLE_ATTR_FIELD_IN_PORTS = SAI_ACL_TABLE_ATTR_FIELD_START + 0xa, /** * @brief Out-Ports @@ -712,7 +715,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_OUT_PORTS, + SAI_ACL_TABLE_ATTR_FIELD_OUT_PORTS = SAI_ACL_TABLE_ATTR_FIELD_START + 0xb, /** * @brief In-Port @@ -721,7 +724,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_IN_PORT, + SAI_ACL_TABLE_ATTR_FIELD_IN_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0xc, /** * @brief Out-Port @@ -730,7 +733,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_OUT_PORT, + SAI_ACL_TABLE_ATTR_FIELD_OUT_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0xd, /** * @brief Source Port @@ -739,7 +742,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_SRC_PORT, + SAI_ACL_TABLE_ATTR_FIELD_SRC_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0xe, /** * @brief Outer Vlan Id @@ -748,7 +751,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_ID, + SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_ID = SAI_ACL_TABLE_ATTR_FIELD_START + 0xf, /** * @brief Outer Vlan Priority @@ -757,7 +760,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_PRI, + SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_PRI = SAI_ACL_TABLE_ATTR_FIELD_START + 0x10, /** * @brief Outer Vlan CFI @@ -766,7 +769,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_CFI, + SAI_ACL_TABLE_ATTR_FIELD_OUTER_VLAN_CFI = SAI_ACL_TABLE_ATTR_FIELD_START + 0x11, /** * @brief Inner Vlan Id @@ -775,7 +778,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_ID, + SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_ID = SAI_ACL_TABLE_ATTR_FIELD_START + 0x12, /** * @brief Inner Vlan Priority @@ -784,7 +787,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_PRI, + SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_PRI = SAI_ACL_TABLE_ATTR_FIELD_START + 0x13, /** * @brief Inner Vlan CFI @@ -793,7 +796,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_CFI, + SAI_ACL_TABLE_ATTR_FIELD_INNER_VLAN_CFI = SAI_ACL_TABLE_ATTR_FIELD_START + 0x14, /** * @brief L4 Src Port @@ -802,7 +805,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_L4_SRC_PORT, + SAI_ACL_TABLE_ATTR_FIELD_L4_SRC_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x15, /** * @brief L4 Dst Port @@ -811,7 +814,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_L4_DST_PORT, + SAI_ACL_TABLE_ATTR_FIELD_L4_DST_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x16, /** * @brief Inner L4 Src Port @@ -820,7 +823,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_INNER_L4_SRC_PORT, + SAI_ACL_TABLE_ATTR_FIELD_INNER_L4_SRC_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x17, /** * @brief Inner L4 Dst Port @@ -829,7 +832,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_INNER_L4_DST_PORT, + SAI_ACL_TABLE_ATTR_FIELD_INNER_L4_DST_PORT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x18, /** * @brief EtherType @@ -838,7 +841,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_ETHER_TYPE, + SAI_ACL_TABLE_ATTR_FIELD_ETHER_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x19, /** * @brief Inner EtherType @@ -847,7 +850,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_INNER_ETHER_TYPE, + SAI_ACL_TABLE_ATTR_FIELD_INNER_ETHER_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1a, /** * @brief IP Protocol @@ -856,7 +859,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_IP_PROTOCOL, + SAI_ACL_TABLE_ATTR_FIELD_IP_PROTOCOL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1b, /** * @brief Inner IP Protocol @@ -865,7 +868,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_INNER_IP_PROTOCOL, + SAI_ACL_TABLE_ATTR_FIELD_INNER_IP_PROTOCOL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1c, /** * @brief IP Identification @@ -874,7 +877,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_IP_IDENTIFICATION, + SAI_ACL_TABLE_ATTR_FIELD_IP_IDENTIFICATION = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1d, /** * @brief IP DSCP @@ -883,7 +886,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_DSCP, + SAI_ACL_TABLE_ATTR_FIELD_DSCP = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1e, /** * @brief IP ECN @@ -892,7 +895,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_ECN, + SAI_ACL_TABLE_ATTR_FIELD_ECN = SAI_ACL_TABLE_ATTR_FIELD_START + 0x1f, /** * @brief IP TTL @@ -901,7 +904,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_TTL, + SAI_ACL_TABLE_ATTR_FIELD_TTL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x20, /** * @brief IP TOS @@ -910,7 +913,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_TOS, + SAI_ACL_TABLE_ATTR_FIELD_TOS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x21, /** * @brief IP Flags @@ -919,7 +922,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_IP_FLAGS, + SAI_ACL_TABLE_ATTR_FIELD_IP_FLAGS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x22, /** * @brief TCP Flags @@ -928,7 +931,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_TCP_FLAGS, + SAI_ACL_TABLE_ATTR_FIELD_TCP_FLAGS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x23, /** * @brief IP Type @@ -937,7 +940,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_TYPE, + SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x24, /** * @brief IP Frag @@ -946,7 +949,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_FRAG, + SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_FRAG = SAI_ACL_TABLE_ATTR_FIELD_START + 0x25, /** * @brief IPv6 Flow Label @@ -955,7 +958,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_IPV6_FLOW_LABEL, + SAI_ACL_TABLE_ATTR_FIELD_IPV6_FLOW_LABEL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x26, /** * @brief Class-of-Service (Traffic Class) @@ -964,7 +967,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_TC, + SAI_ACL_TABLE_ATTR_FIELD_TC = SAI_ACL_TABLE_ATTR_FIELD_START + 0x27, /** * @brief ICMP Type @@ -973,7 +976,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_ICMP_TYPE, + SAI_ACL_TABLE_ATTR_FIELD_ICMP_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x28, /** * @brief ICMP Code @@ -982,7 +985,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_ICMP_CODE, + SAI_ACL_TABLE_ATTR_FIELD_ICMP_CODE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x29, /** * @brief ICMP Type for IPv6 @@ -991,7 +994,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_ICMPV6_TYPE, + SAI_ACL_TABLE_ATTR_FIELD_ICMPV6_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2a, /** * @brief ICMP Code for IPv6 @@ -1000,7 +1003,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_ICMPV6_CODE, + SAI_ACL_TABLE_ATTR_FIELD_ICMPV6_CODE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2b, /** * @brief Vlan Tags @@ -1009,7 +1012,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_PACKET_VLAN, + SAI_ACL_TABLE_ATTR_FIELD_PACKET_VLAN = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2c, /** * @brief Tunnel VNI @@ -1018,7 +1021,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_TUNNEL_VNI, + SAI_ACL_TABLE_ATTR_FIELD_TUNNEL_VNI = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2d, /** * @brief Match on packet that has vlan tag @@ -1027,7 +1030,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_HAS_VLAN_TAG, + SAI_ACL_TABLE_ATTR_FIELD_HAS_VLAN_TAG = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2e, /** * @brief SCI value in MACsec packet SecTAG @@ -1036,7 +1039,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MACSEC_SCI, + SAI_ACL_TABLE_ATTR_FIELD_MACSEC_SCI = SAI_ACL_TABLE_ATTR_FIELD_START + 0x2f, /** * @brief Label value for MPLS label on the top @@ -1045,7 +1048,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_LABEL, + SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_LABEL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x30, /** * @brief TTL value for MPLS label on the top @@ -1054,7 +1057,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_TTL, + SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_TTL = SAI_ACL_TABLE_ATTR_FIELD_START + 0x31, /** * @brief EXP value for MPLS label on the top @@ -1063,7 +1066,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_EXP, + 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 @@ -1072,7 +1075,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL0_BOS, + 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 @@ -1081,7 +1084,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_LABEL, + 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 @@ -1090,7 +1093,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_TTL, + 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 @@ -1099,7 +1102,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_EXP, + 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 @@ -1108,7 +1111,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL1_BOS, + 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 @@ -1117,7 +1120,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_LABEL, + 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 @@ -1126,7 +1129,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_TTL, + 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 @@ -1135,7 +1138,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_EXP, + 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 @@ -1144,7 +1147,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL2_BOS, + 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 @@ -1153,7 +1156,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_LABEL, + 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 @@ -1162,7 +1165,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_TTL, + 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 @@ -1171,7 +1174,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_EXP, + 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 @@ -1180,7 +1183,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL3_BOS, + 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 @@ -1189,7 +1192,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_LABEL, + 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 @@ -1198,7 +1201,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_TTL, + 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 @@ -1207,7 +1210,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_EXP, + 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 @@ -1216,7 +1219,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_BOS, + SAI_ACL_TABLE_ATTR_FIELD_MPLS_LABEL4_BOS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x43, /* User Based metadata [bool] */ @@ -1227,7 +1230,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_FDB_DST_USER_META, + SAI_ACL_TABLE_ATTR_FIELD_FDB_DST_USER_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x44, /** * @brief ROUTE DST User Meta data @@ -1236,7 +1239,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_ROUTE_DST_USER_META, + SAI_ACL_TABLE_ATTR_FIELD_ROUTE_DST_USER_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x45, /** * @brief Neighbor DST User metadata @@ -1245,7 +1248,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_NEIGHBOR_DST_USER_META, + SAI_ACL_TABLE_ATTR_FIELD_NEIGHBOR_DST_USER_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x46, /** * @brief Port User metadata @@ -1254,7 +1257,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_PORT_USER_META, + SAI_ACL_TABLE_ATTR_FIELD_PORT_USER_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x47, /** * @brief Vlan User metadata @@ -1263,7 +1266,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_VLAN_USER_META, + SAI_ACL_TABLE_ATTR_FIELD_VLAN_USER_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x48, /** * @brief Metadata carried from previous ACL Stage @@ -1272,7 +1275,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_ACL_USER_META, + SAI_ACL_TABLE_ATTR_FIELD_ACL_USER_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x49, /* NPU Based metadata [bool] */ @@ -1283,7 +1286,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_FDB_NPU_META_DST_HIT, + 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 @@ -1292,7 +1295,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_NEIGHBOR_NPU_META_DST_HIT, + 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 @@ -1301,7 +1304,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_ROUTE_NPU_META_DST_HIT, + SAI_ACL_TABLE_ATTR_FIELD_ROUTE_NPU_META_DST_HIT = SAI_ACL_TABLE_ATTR_FIELD_START + 0x4c, /** * @brief Base Transport Header opcode field @@ -1310,7 +1313,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_BTH_OPCODE, + SAI_ACL_TABLE_ATTR_FIELD_BTH_OPCODE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x4d, /** * @brief Ack_extented Transport Header syndrome field @@ -1319,7 +1322,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_AETH_SYNDROME, + SAI_ACL_TABLE_ATTR_FIELD_AETH_SYNDROME = SAI_ACL_TABLE_ATTR_FIELD_START + 0x4e, /** * @brief User Defined Field Groups @@ -1332,7 +1335,7 @@ typedef enum _sai_acl_table_attr_t * @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_USER_DEFINED_FIELD_GROUP_MIN = SAI_ACL_TABLE_ATTR_FIELD_START + 0x4f, /** * @brief User Defined Field Groups end @@ -1353,7 +1356,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default empty */ - SAI_ACL_TABLE_ATTR_FIELD_ACL_RANGE_TYPE, + SAI_ACL_TABLE_ATTR_FIELD_ACL_RANGE_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x14f, /** * @brief IPv6 Next Header @@ -1362,7 +1365,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_IPV6_NEXT_HEADER, + SAI_ACL_TABLE_ATTR_FIELD_IPV6_NEXT_HEADER = SAI_ACL_TABLE_ATTR_FIELD_START + 0x150, /** * @brief GRE key @@ -1374,7 +1377,7 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_GRE_KEY, + SAI_ACL_TABLE_ATTR_FIELD_GRE_KEY = SAI_ACL_TABLE_ATTR_FIELD_START + 0x151, /** * @brief TAM INT type @@ -1383,12 +1386,12 @@ typedef enum _sai_acl_table_attr_t * @flags CREATE_ONLY * @default false */ - SAI_ACL_TABLE_ATTR_FIELD_TAM_INT_TYPE, + SAI_ACL_TABLE_ATTR_FIELD_TAM_INT_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x152, /** * @brief End of ACL Table Match Field */ - SAI_ACL_TABLE_ATTR_FIELD_END = SAI_ACL_TABLE_ATTR_FIELD_TAM_INT_TYPE, + SAI_ACL_TABLE_ATTR_FIELD_END = SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6_WORD0, /** * @brief ACL table entries associated with this table. @@ -1506,7 +1509,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD3, + SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD3 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x153, /** * @brief Src IPv6 Address 95:64 32 bits @@ -1515,7 +1518,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD2, + SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD2 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x154, /** * @brief Src IPv6 Address 63:32 32 bits @@ -1524,7 +1527,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD1, + SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD1 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x155, /** * @brief Src IPv6 Address 31:0 32 bits @@ -1533,7 +1536,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD0, + SAI_ACL_ENTRY_ATTR_FIELD_SRC_IPV6_WORD0 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x156, /** * @brief Dst IPv6 Address @@ -1542,7 +1545,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6, + SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1, /** * @brief Dst IPv6 Address 127:96 32 bits @@ -1551,7 +1554,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD3, + SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD3 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x157, /** * @brief Dst IPv6 Address 95:64 32 bits @@ -1560,7 +1563,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD2, + SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD2 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x158, /** * @brief Dst IPv6 Address 63:32 32 bits @@ -1569,7 +1572,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD1, + SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD1 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x159, /** * @brief Dst IPv6 Address 31:0 32 bits @@ -1578,7 +1581,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD0, + SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD0 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x15a, /** * @brief Inner Src IPv6 Address @@ -1587,7 +1590,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_INNER_SRC_IPV6, + SAI_ACL_ENTRY_ATTR_FIELD_INNER_SRC_IPV6 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2, /** * @brief Inner Dst IPv6 Address @@ -1596,7 +1599,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_INNER_DST_IPV6, + SAI_ACL_ENTRY_ATTR_FIELD_INNER_DST_IPV6 = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x3, /** * @brief Src MAC Address @@ -1605,7 +1608,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_SRC_MAC, + SAI_ACL_ENTRY_ATTR_FIELD_SRC_MAC = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x4, /** * @brief Dst MAC Address @@ -1614,7 +1617,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_DST_MAC, + SAI_ACL_ENTRY_ATTR_FIELD_DST_MAC = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x5, /** * @brief Src IPv4 Address @@ -1623,7 +1626,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_SRC_IP, + SAI_ACL_ENTRY_ATTR_FIELD_SRC_IP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x6, /** * @brief Dst IPv4 Address @@ -1632,7 +1635,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_DST_IP, + SAI_ACL_ENTRY_ATTR_FIELD_DST_IP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x7, /** * @brief Inner Src IPv4 Address @@ -1641,7 +1644,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_INNER_SRC_IP, + SAI_ACL_ENTRY_ATTR_FIELD_INNER_SRC_IP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x8, /** * @brief Inner Dst IPv4 Address @@ -1650,7 +1653,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_INNER_DST_IP, + SAI_ACL_ENTRY_ATTR_FIELD_INNER_DST_IP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x9, /** * @brief In-Ports (mask is not needed) @@ -1660,7 +1663,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_PORT * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_IN_PORTS, + SAI_ACL_ENTRY_ATTR_FIELD_IN_PORTS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0xa, /** * @brief Out-Ports (mask is not needed) @@ -1670,7 +1673,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_PORT * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_OUT_PORTS, + SAI_ACL_ENTRY_ATTR_FIELD_OUT_PORTS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0xb, /** * @brief In-Port (mask is not needed) @@ -1680,7 +1683,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_PORT, SAI_OBJECT_TYPE_LAG * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_IN_PORT, + SAI_ACL_ENTRY_ATTR_FIELD_IN_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0xc, /** * @brief Out-Port (mask is not needed) @@ -1690,7 +1693,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_PORT, SAI_OBJECT_TYPE_LAG * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_OUT_PORT, + 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 @@ -1701,7 +1704,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_PORT * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_SRC_PORT, + SAI_ACL_ENTRY_ATTR_FIELD_SRC_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0xe, /** * @brief Outer Vlan Id (12 bits) @@ -1711,7 +1714,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan true * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_ID, + SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_ID = SAI_ACL_ENTRY_ATTR_FIELD_START + 0xf, /** * @brief Outer Vlan Priority (3 bits) @@ -1720,7 +1723,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_PRI, + SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_PRI = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x10, /** * @brief Outer Vlan CFI (1 bit) @@ -1729,7 +1732,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_CFI, + SAI_ACL_ENTRY_ATTR_FIELD_OUTER_VLAN_CFI = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x11, /** * @brief Inner Vlan Id (12 bits) @@ -1739,7 +1742,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan true * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_ID, + SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_ID = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x12, /** * @brief Inner Vlan Priority (3 bits) @@ -1748,7 +1751,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_PRI, + SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_PRI = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x13, /** * @brief Inner Vlan CFI (1 bit) @@ -1757,7 +1760,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_CFI, + SAI_ACL_ENTRY_ATTR_FIELD_INNER_VLAN_CFI = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x14, /** * @brief L4 Src Port @@ -1767,7 +1770,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan false * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_L4_SRC_PORT, + SAI_ACL_ENTRY_ATTR_FIELD_L4_SRC_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x15, /** * @brief L4 Dst Port @@ -1777,7 +1780,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan false * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_L4_DST_PORT, + SAI_ACL_ENTRY_ATTR_FIELD_L4_DST_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x16, /** * @brief Inner L4 Src Port @@ -1787,7 +1790,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan false * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_SRC_PORT, + SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_SRC_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x17, /** * @brief Inner L4 Dst Port @@ -1797,7 +1800,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan false * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_DST_PORT, + SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_DST_PORT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x18, /** * @brief EtherType @@ -1807,7 +1810,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan false * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_ETHER_TYPE, + SAI_ACL_ENTRY_ATTR_FIELD_ETHER_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x19, /** * @brief Inner EtherType @@ -1817,7 +1820,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan false * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_INNER_ETHER_TYPE, + SAI_ACL_ENTRY_ATTR_FIELD_INNER_ETHER_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1a, /** * @brief IP Protocol @@ -1826,7 +1829,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_IP_PROTOCOL, + SAI_ACL_ENTRY_ATTR_FIELD_IP_PROTOCOL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1b, /** * @brief Inner IP Protocol @@ -1835,7 +1838,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_INNER_IP_PROTOCOL, + SAI_ACL_ENTRY_ATTR_FIELD_INNER_IP_PROTOCOL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1c, /** * @brief IP Identification @@ -1845,7 +1848,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan false * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_IP_IDENTIFICATION, + SAI_ACL_ENTRY_ATTR_FIELD_IP_IDENTIFICATION = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1d, /** * @brief IP DSCP (6 bits) @@ -1854,7 +1857,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_DSCP, + SAI_ACL_ENTRY_ATTR_FIELD_DSCP = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1e, /** * @brief IP ECN (2 bits) @@ -1863,7 +1866,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_ECN, + SAI_ACL_ENTRY_ATTR_FIELD_ECN = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x1f, /** * @brief IP TTL @@ -1872,7 +1875,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_TTL, + SAI_ACL_ENTRY_ATTR_FIELD_TTL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x20, /** * @brief IP TOS @@ -1881,7 +1884,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_TOS, + SAI_ACL_ENTRY_ATTR_FIELD_TOS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x21, /** * @brief IP Flags (3 bits) @@ -1890,7 +1893,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_IP_FLAGS, + SAI_ACL_ENTRY_ATTR_FIELD_IP_FLAGS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x22, /** * @brief TCP Flags (6 bits) @@ -1899,7 +1902,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_TCP_FLAGS, + SAI_ACL_ENTRY_ATTR_FIELD_TCP_FLAGS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x23, /** * @brief IP Type (field mask is not needed) @@ -1908,7 +1911,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_ACL_IP_TYPE, + SAI_ACL_ENTRY_ATTR_FIELD_ACL_IP_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x24, /** * @brief IP Frag (field mask is not needed) @@ -1917,7 +1920,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_ACL_IP_FRAG, + SAI_ACL_ENTRY_ATTR_FIELD_ACL_IP_FRAG = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x25, /** * @brief IPv6 Flow Label (20 bits) @@ -1926,7 +1929,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_IPV6_FLOW_LABEL, + SAI_ACL_ENTRY_ATTR_FIELD_IPV6_FLOW_LABEL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x26, /** * @brief Class-of-Service (Traffic Class) @@ -1935,7 +1938,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_TC, + SAI_ACL_ENTRY_ATTR_FIELD_TC = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x27, /** * @brief ICMP Type @@ -1944,7 +1947,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_ICMP_TYPE, + SAI_ACL_ENTRY_ATTR_FIELD_ICMP_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x28, /** * @brief ICMP Code @@ -1953,7 +1956,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_ICMP_CODE, + SAI_ACL_ENTRY_ATTR_FIELD_ICMP_CODE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x29, /** * @brief ICMP Type for IPv6 @@ -1962,7 +1965,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_ICMPV6_TYPE, + SAI_ACL_ENTRY_ATTR_FIELD_ICMPV6_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2a, /** * @brief ICMP Code for IPv6 @@ -1971,7 +1974,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_ICMPV6_CODE, + SAI_ACL_ENTRY_ATTR_FIELD_ICMPV6_CODE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2b, /** * @brief Number of VLAN Tags @@ -1980,7 +1983,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_PACKET_VLAN, + SAI_ACL_ENTRY_ATTR_FIELD_PACKET_VLAN = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2c, /** * @brief Tunnel VNI @@ -1989,7 +1992,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_TUNNEL_VNI, + SAI_ACL_ENTRY_ATTR_FIELD_TUNNEL_VNI = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2d, /** * @brief Match on packet that has vlan tag @@ -1998,7 +2001,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_HAS_VLAN_TAG, + SAI_ACL_ENTRY_ATTR_FIELD_HAS_VLAN_TAG = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2e, /** * @brief SCI value in MACsec packet SecTAG @@ -2007,7 +2010,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MACSEC_SCI, + SAI_ACL_ENTRY_ATTR_FIELD_MACSEC_SCI = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x2f, /** * @brief Label value for MPLS label on the top @@ -2016,7 +2019,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_LABEL, + SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_LABEL = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x30, /** * @brief TTL value for MPLS label on the top @@ -2025,7 +2028,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_TTL, + 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) @@ -2034,7 +2037,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_EXP, + 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 @@ -2043,7 +2046,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL0_BOS, + 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 @@ -2052,7 +2055,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_LABEL, + 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 @@ -2061,7 +2064,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_TTL, + 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) @@ -2070,7 +2073,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_EXP, + 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 @@ -2079,7 +2082,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL1_BOS, + 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 @@ -2088,7 +2091,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_LABEL, + 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 @@ -2097,7 +2100,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_TTL, + 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) @@ -2106,7 +2109,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_EXP, + 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 @@ -2115,7 +2118,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL2_BOS, + 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 @@ -2124,7 +2127,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_LABEL, + 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 @@ -2133,7 +2136,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_TTL, + 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) @@ -2142,7 +2145,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_EXP, + 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 @@ -2151,7 +2154,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL3_BOS, + 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 @@ -2160,7 +2163,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_LABEL, + 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 @@ -2169,7 +2172,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_TTL, + 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) @@ -2178,7 +2181,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_EXP, + 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 @@ -2187,7 +2190,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_BOS, + SAI_ACL_ENTRY_ATTR_FIELD_MPLS_LABEL4_BOS = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x43, /* User Based metadata */ @@ -2201,7 +2204,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_FDB_DST_USER_META, + 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 @@ -2213,7 +2216,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_ROUTE_DST_USER_META, + 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 @@ -2225,7 +2228,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_NEIGHBOR_DST_USER_META, + SAI_ACL_ENTRY_ATTR_FIELD_NEIGHBOR_DST_USER_META = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x46, /** * @brief Port User metadata @@ -2237,7 +2240,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_PORT_USER_META, + SAI_ACL_ENTRY_ATTR_FIELD_PORT_USER_META = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x47, /** * @brief Vlan User metadata @@ -2249,7 +2252,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_VLAN_USER_META, + SAI_ACL_ENTRY_ATTR_FIELD_VLAN_USER_META = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x48, /** * @brief Metadata carried from previous ACL stage. @@ -2263,7 +2266,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_ACL_USER_META, + SAI_ACL_ENTRY_ATTR_FIELD_ACL_USER_META = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x49, /* NPU Based metadata [bool] */ @@ -2274,7 +2277,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_FDB_NPU_META_DST_HIT, + 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 @@ -2283,7 +2286,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_NEIGHBOR_NPU_META_DST_HIT, + 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 @@ -2292,7 +2295,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_ROUTE_NPU_META_DST_HIT, + SAI_ACL_ENTRY_ATTR_FIELD_ROUTE_NPU_META_DST_HIT = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x4c, /** * @brief Base Transport Header opcode field @@ -2301,7 +2304,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_BTH_OPCODE, + SAI_ACL_ENTRY_ATTR_FIELD_BTH_OPCODE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x4d, /** * @brief Ack_extented Transport Header syndrome field @@ -2310,7 +2313,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_AETH_SYNDROME, + 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 @@ -2320,7 +2323,7 @@ typedef enum _sai_acl_entry_attr_t * @default disabled * @range SAI_ACL_USER_DEFINED_FIELD_ATTR_ID_RANGE */ - SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN, + SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x4f, /** * @brief User Defined Field data max @@ -2341,7 +2344,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_ACL_RANGE * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_ACL_RANGE_TYPE, + SAI_ACL_ENTRY_ATTR_FIELD_ACL_RANGE_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x14f, /** * @brief IPv6 Next Header (8 bits) @@ -2352,7 +2355,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_IPV6_NEXT_HEADER, + SAI_ACL_ENTRY_ATTR_FIELD_IPV6_NEXT_HEADER = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x150, /** * @brief GRE Key (32 bits) @@ -2361,7 +2364,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_GRE_KEY, + SAI_ACL_ENTRY_ATTR_FIELD_GRE_KEY = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x151, /** * @brief TAM INT type @@ -2370,12 +2373,12 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_FIELD_TAM_INT_TYPE, + SAI_ACL_ENTRY_ATTR_FIELD_TAM_INT_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x152, /** * @brief End of Rule Match Fields */ - SAI_ACL_ENTRY_ATTR_FIELD_END = SAI_ACL_ENTRY_ATTR_FIELD_TAM_INT_TYPE, + SAI_ACL_ENTRY_ATTR_FIELD_END = SAI_ACL_ENTRY_ATTR_FIELD_DST_IPV6_WORD0, /* * Actions [sai_acl_action_data_t] @@ -2415,7 +2418,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_ENDPOINT_IP, + 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 @@ -2429,7 +2432,7 @@ typedef enum _sai_acl_entry_attr_t * @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_REDIRECT_LIST = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2, /** * @brief Packet Action @@ -2438,7 +2441,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_PACKET_ACTION, + SAI_ACL_ENTRY_ATTR_ACTION_PACKET_ACTION = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x3, /** * @brief Flood Packet on Vlan domain (parameter is not needed) @@ -2447,7 +2450,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_FLOOD, + SAI_ACL_ENTRY_ATTR_ACTION_FLOOD = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x4, /** * @brief Attach/detach counter id to the entry @@ -2457,7 +2460,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_ACL_COUNTER * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_COUNTER, + SAI_ACL_ENTRY_ATTR_ACTION_COUNTER = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x5, /** * @brief Ingress Mirror (mirror session id list) @@ -2467,7 +2470,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_MIRROR_SESSION * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_MIRROR_INGRESS, + SAI_ACL_ENTRY_ATTR_ACTION_MIRROR_INGRESS = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x6, /** * @brief Egress Mirror (mirror session id list) @@ -2477,7 +2480,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_MIRROR_SESSION * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_MIRROR_EGRESS, + SAI_ACL_ENTRY_ATTR_ACTION_MIRROR_EGRESS = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x7, /** * @brief Associate with policer @@ -2487,7 +2490,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_POLICER * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_POLICER, + SAI_ACL_ENTRY_ATTR_ACTION_SET_POLICER = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x8, /** * @brief Decrement TTL (enable/disable) @@ -2496,7 +2499,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_DECREMENT_TTL, + SAI_ACL_ENTRY_ATTR_ACTION_DECREMENT_TTL = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x9, /** * @brief Set Class-of-Service (Traffic Class) @@ -2505,7 +2508,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_TC, + SAI_ACL_ENTRY_ATTR_ACTION_SET_TC = SAI_ACL_ENTRY_ATTR_ACTION_START + 0xa, /** * @brief Set packet color @@ -2514,7 +2517,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_PACKET_COLOR, + SAI_ACL_ENTRY_ATTR_ACTION_SET_PACKET_COLOR = SAI_ACL_ENTRY_ATTR_ACTION_START + 0xb, /** * @brief Set Packet Inner Vlan Id (12 bits) @@ -2523,7 +2526,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_ID, + SAI_ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_ID = SAI_ACL_ENTRY_ATTR_ACTION_START + 0xc, /** * @brief Set Packet Inner Vlan Priority (3 bits) @@ -2532,7 +2535,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_PRI, + SAI_ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_PRI = SAI_ACL_ENTRY_ATTR_ACTION_START + 0xd, /** * @brief Set Packet Outer Vlan Id (12 bits) @@ -2542,7 +2545,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan true * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_ID, + SAI_ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_ID = SAI_ACL_ENTRY_ATTR_ACTION_START + 0xe, /** * @brief Set Packet Outer Vlan Priority (3 bits) @@ -2551,7 +2554,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_PRI, + SAI_ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_PRI = SAI_ACL_ENTRY_ATTR_ACTION_START + 0xf, /** * @brief Add Packet Vlan Id (12 bits) @@ -2561,7 +2564,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan true * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_ADD_VLAN_ID, + SAI_ACL_ENTRY_ATTR_ACTION_ADD_VLAN_ID = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x32, /** * @brief Add Packet Vlan Priority (3 bits) @@ -2570,7 +2573,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_ADD_VLAN_PRI, + SAI_ACL_ENTRY_ATTR_ACTION_ADD_VLAN_PRI = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x33, /** * @brief Set Packet Src MAC Address @@ -2579,7 +2582,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_MAC, + SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_MAC = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x10, /** * @brief Set Packet Dst MAC Address @@ -2588,7 +2591,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_MAC, + SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_MAC = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x11, /** * @brief Set Packet Src IPv4 Address @@ -2597,7 +2600,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_IP, + SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_IP = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x12, /** * @brief Set Packet Src IPv4 Address @@ -2606,7 +2609,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_IP, + SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_IP = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x13, /** * @brief Set Packet Src IPv6 Address @@ -2615,7 +2618,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_IPV6, + SAI_ACL_ENTRY_ATTR_ACTION_SET_SRC_IPV6 = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x14, /** * @brief Set Packet Src IPv6 Address @@ -2624,7 +2627,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_IPV6, + SAI_ACL_ENTRY_ATTR_ACTION_SET_DST_IPV6 = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x15, /** * @brief Set Packet DSCP (6 bits) @@ -2633,7 +2636,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_DSCP, + SAI_ACL_ENTRY_ATTR_ACTION_SET_DSCP = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x16, /** * @brief Set Packet ECN (2 bits) @@ -2642,7 +2645,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_ECN, + SAI_ACL_ENTRY_ATTR_ACTION_SET_ECN = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x17, /** * @brief Set Packet L4 Src Port @@ -2652,7 +2655,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan false * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_L4_SRC_PORT, + SAI_ACL_ENTRY_ATTR_ACTION_SET_L4_SRC_PORT = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x18, /** * @brief Set Packet L4 Src Port @@ -2662,7 +2665,7 @@ typedef enum _sai_acl_entry_attr_t * @isvlan false * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_L4_DST_PORT, + 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) @@ -2672,7 +2675,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_SAMPLEPACKET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_INGRESS_SAMPLEPACKET_ENABLE, + SAI_ACL_ENTRY_ATTR_ACTION_INGRESS_SAMPLEPACKET_ENABLE = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x1a, /** * @brief Set egress packet sampling (sample packet session id) @@ -2682,7 +2685,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_SAMPLEPACKET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_EGRESS_SAMPLEPACKET_ENABLE, + 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 @@ -2693,7 +2696,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_ACL_META_DATA, + SAI_ACL_ENTRY_ATTR_ACTION_SET_ACL_META_DATA = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x1c, /** * @brief Egress block port list @@ -2709,7 +2712,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_PORT * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_EGRESS_BLOCK_PORT_LIST, + SAI_ACL_ENTRY_ATTR_ACTION_EGRESS_BLOCK_PORT_LIST = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x1d, /** * @brief Set User Defined Trap ID @@ -2722,7 +2725,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_HOSTIF_USER_DEFINED_TRAP * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_USER_TRAP_ID, + 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) @@ -2731,7 +2734,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_DO_NOT_LEARN, + SAI_ACL_ENTRY_ATTR_ACTION_SET_DO_NOT_LEARN = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x1f, /** * @brief DTEL flow operation @@ -2742,7 +2745,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_ACL_DTEL_FLOW_OP, + SAI_ACL_ENTRY_ATTR_ACTION_ACL_DTEL_FLOW_OP = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x20, /** * @brief DTEL INT session ID @@ -2754,7 +2757,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_DTEL_INT_SESSION * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_DTEL_INT_SESSION, + SAI_ACL_ENTRY_ATTR_ACTION_DTEL_INT_SESSION = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x21, /** * @brief Enable DTEL drop report @@ -2765,7 +2768,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_DTEL_DROP_REPORT_ENABLE, + SAI_ACL_ENTRY_ATTR_ACTION_DTEL_DROP_REPORT_ENABLE = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x22, /** * @brief Enable DTEL tail drop reporting @@ -2776,7 +2779,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_DTEL_TAIL_DROP_REPORT_ENABLE, + SAI_ACL_ENTRY_ATTR_ACTION_DTEL_TAIL_DROP_REPORT_ENABLE = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x23, /** * @brief DTEL flow sample percentage @@ -2787,7 +2790,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_DTEL_FLOW_SAMPLE_PERCENT, + 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 @@ -2798,7 +2801,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_DTEL_REPORT_ALL_PACKETS, + SAI_ACL_ENTRY_ATTR_ACTION_DTEL_REPORT_ALL_PACKETS = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x25, /** * @brief Set NAT exception rule @@ -2807,7 +2810,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_NO_NAT, + SAI_ACL_ENTRY_ATTR_ACTION_NO_NAT = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x26, /** * @brief Enable INT metadata insertion @@ -2816,7 +2819,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_INT_INSERT, + SAI_ACL_ENTRY_ATTR_ACTION_INT_INSERT = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x27, /** * @brief Enable INT metadata deletion @@ -2825,7 +2828,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_INT_DELETE, + SAI_ACL_ENTRY_ATTR_ACTION_INT_DELETE = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x28, /** * @brief Enable INT metadata reports @@ -2834,7 +2837,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_FLOW, + SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_FLOW = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x29, /** * @brief Enable INT drop reports @@ -2843,7 +2846,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_DROPS, + SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_DROPS = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2a, /** * @brief Enable INT tail drop reports @@ -2852,7 +2855,7 @@ typedef enum _sai_acl_entry_attr_t * @flags CREATE_AND_SET * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_TAIL_DROPS, + SAI_ACL_ENTRY_ATTR_ACTION_INT_REPORT_TAIL_DROPS = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2b, /** * @brief ACL bind point for TAM INT object @@ -2870,7 +2873,7 @@ typedef enum _sai_acl_entry_attr_t * @allownull true * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_TAM_INT_OBJECT, + SAI_ACL_ENTRY_ATTR_ACTION_TAM_INT_OBJECT = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2c, /** * @brief Set isolation group (isolation group object id) @@ -2880,7 +2883,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_ISOLATION_GROUP * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_ISOLATION_GROUP, + SAI_ACL_ENTRY_ATTR_ACTION_SET_ISOLATION_GROUP = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2d, /** * @brief MACsec flow @@ -2890,7 +2893,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_MACSEC_FLOW * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_MACSEC_FLOW, + SAI_ACL_ENTRY_ATTR_ACTION_MACSEC_FLOW = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2e, /** * @brief LAG Hash ID @@ -2900,7 +2903,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_HASH * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_LAG_HASH_ID, + SAI_ACL_ENTRY_ATTR_ACTION_SET_LAG_HASH_ID = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x2f, /** * @brief ECMP Hash ID @@ -2910,7 +2913,7 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_HASH * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_ECMP_HASH_ID, + SAI_ACL_ENTRY_ATTR_ACTION_SET_ECMP_HASH_ID = SAI_ACL_ENTRY_ATTR_ACTION_START + 0x30, /** * @brief Set virtual router @@ -2920,12 +2923,21 @@ typedef enum _sai_acl_entry_attr_t * @objects SAI_OBJECT_TYPE_VIRTUAL_ROUTER * @default disabled */ - SAI_ACL_ENTRY_ATTR_ACTION_SET_VRF, + 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 End of Rule Actions */ - SAI_ACL_ENTRY_ATTR_ACTION_END = SAI_ACL_ENTRY_ATTR_ACTION_SET_VRF, + SAI_ACL_ENTRY_ATTR_ACTION_END = SAI_ACL_ENTRY_ATTR_ACTION_SET_FORWARDING_CLASS, /** * @brief End of ACL Entry attributes diff --git a/inc/saibfd.h b/inc/saibfd.h index ff10f5ae3e..4df055e6b6 100644 --- a/inc/saibfd.h +++ b/inc/saibfd.h @@ -39,7 +39,7 @@ typedef enum _sai_bfd_session_type_t { /** Demand Active Mode */ - SAI_BFD_SESSION_TYPE_DEMAND_ACTIVE = 0, + SAI_BFD_SESSION_TYPE_DEMAND_ACTIVE, /** Demand Passive Mode */ SAI_BFD_SESSION_TYPE_DEMAND_PASSIVE, @@ -58,7 +58,7 @@ typedef enum _sai_bfd_session_type_t typedef enum _sai_bfd_session_offload_type_t { /** No Offload: No offload supported */ - SAI_BFD_SESSION_OFFLOAD_TYPE_NONE = 0, + SAI_BFD_SESSION_OFFLOAD_TYPE_NONE, /** Full Offload: both session establishment and sustenance */ SAI_BFD_SESSION_OFFLOAD_TYPE_FULL, diff --git a/inc/saihash.h b/inc/saihash.h index a6310a27cc..a6c6b04472 100644 --- a/inc/saihash.h +++ b/inc/saihash.h @@ -45,7 +45,7 @@ typedef enum _sai_native_hash_field_t * in case for encapsulated packets. * Used for both IPv4 and IPv6 */ - SAI_NATIVE_HASH_FIELD_SRC_IP, + SAI_NATIVE_HASH_FIELD_SRC_IP = 0x00000000, /** * @brief Native hash field destination IP. @@ -54,13 +54,13 @@ typedef enum _sai_native_hash_field_t * in case for encapsulated packets. * Used for both IPv4 and IPv6 */ - SAI_NATIVE_HASH_FIELD_DST_IP, + SAI_NATIVE_HASH_FIELD_DST_IP = 0x00000001, /** Native hash field inner source IP */ - SAI_NATIVE_HASH_FIELD_INNER_SRC_IP, + SAI_NATIVE_HASH_FIELD_INNER_SRC_IP = 0x00000002, /** Native hash field inner destination IP */ - SAI_NATIVE_HASH_FIELD_INNER_DST_IP, + SAI_NATIVE_HASH_FIELD_INNER_DST_IP = 0x00000003, /** * @brief Native hash field source IPv4. @@ -68,7 +68,7 @@ typedef enum _sai_native_hash_field_t * Also, refers to the outer source IPv4 * in case for encapsulated packets */ - SAI_NATIVE_HASH_FIELD_SRC_IPV4, + SAI_NATIVE_HASH_FIELD_SRC_IPV4 = 0x00000019, /** * @brief Native hash field destination IPv4 @@ -76,7 +76,7 @@ typedef enum _sai_native_hash_field_t * Also, refers to the outer source IPv4 * in case for encapsulated packets */ - SAI_NATIVE_HASH_FIELD_DST_IPV4, + SAI_NATIVE_HASH_FIELD_DST_IPV4 = 0x0000001a, /** * @brief Native hash field source IPv6. @@ -84,7 +84,7 @@ typedef enum _sai_native_hash_field_t * Also, refers to the outer source IPv6 * in case for encapsulated packets */ - SAI_NATIVE_HASH_FIELD_SRC_IPV6, + SAI_NATIVE_HASH_FIELD_SRC_IPV6 = 0x0000001b, /** * @brief Native hash field destination IPv6 @@ -92,85 +92,85 @@ typedef enum _sai_native_hash_field_t * Also, refers to the outer source IPv6 * in case for encapsulated packets */ - SAI_NATIVE_HASH_FIELD_DST_IPV6, + SAI_NATIVE_HASH_FIELD_DST_IPV6 = 0x0000001c, /** Native hash field inner source IPv4 */ - SAI_NATIVE_HASH_FIELD_INNER_SRC_IPV4, + SAI_NATIVE_HASH_FIELD_INNER_SRC_IPV4 = 0x0000001d, /** Native hash field inner destination IPv4 */ - SAI_NATIVE_HASH_FIELD_INNER_DST_IPV4, + SAI_NATIVE_HASH_FIELD_INNER_DST_IPV4 = 0x0000001e, /** Native hash field inner source IPv6 */ - SAI_NATIVE_HASH_FIELD_INNER_SRC_IPV6, + SAI_NATIVE_HASH_FIELD_INNER_SRC_IPV6 = 0x0000001f, /** Native hash field inner destination IPv6 */ - SAI_NATIVE_HASH_FIELD_INNER_DST_IPV6, + SAI_NATIVE_HASH_FIELD_INNER_DST_IPV6 = 0x00000020, /** Native hash field vlan id */ - SAI_NATIVE_HASH_FIELD_VLAN_ID, + SAI_NATIVE_HASH_FIELD_VLAN_ID = 0x00000004, /** Native hash field IP protocol */ - SAI_NATIVE_HASH_FIELD_IP_PROTOCOL, + SAI_NATIVE_HASH_FIELD_IP_PROTOCOL = 0x00000005, /** Native hash field Ethernet type */ - SAI_NATIVE_HASH_FIELD_ETHERTYPE, + SAI_NATIVE_HASH_FIELD_ETHERTYPE = 0x00000006, /** Native hash field L4 source port */ - SAI_NATIVE_HASH_FIELD_L4_SRC_PORT, + SAI_NATIVE_HASH_FIELD_L4_SRC_PORT = 0x00000007, /** Native hash field L4 destination port */ - SAI_NATIVE_HASH_FIELD_L4_DST_PORT, + SAI_NATIVE_HASH_FIELD_L4_DST_PORT = 0x00000008, /** Native hash field source MAC */ - SAI_NATIVE_HASH_FIELD_SRC_MAC, + SAI_NATIVE_HASH_FIELD_SRC_MAC = 0x00000009, /** Native hash field destination MAC */ - SAI_NATIVE_HASH_FIELD_DST_MAC, + SAI_NATIVE_HASH_FIELD_DST_MAC = 0x0000000a, /** Native hash field source port */ - SAI_NATIVE_HASH_FIELD_IN_PORT, + SAI_NATIVE_HASH_FIELD_IN_PORT = 0x0000000b, /** Native hash field inner IP protocol */ - SAI_NATIVE_HASH_FIELD_INNER_IP_PROTOCOL, + SAI_NATIVE_HASH_FIELD_INNER_IP_PROTOCOL = 0x0000000c, /** Native hash field inner Ethernet type */ - SAI_NATIVE_HASH_FIELD_INNER_ETHERTYPE, + SAI_NATIVE_HASH_FIELD_INNER_ETHERTYPE = 0x0000000d, /** Native hash field inner L4 source port */ - SAI_NATIVE_HASH_FIELD_INNER_L4_SRC_PORT, + SAI_NATIVE_HASH_FIELD_INNER_L4_SRC_PORT = 0x0000000e, /** Native hash field inner L4 destination port */ - SAI_NATIVE_HASH_FIELD_INNER_L4_DST_PORT, + SAI_NATIVE_HASH_FIELD_INNER_L4_DST_PORT = 0x0000000f, /** Native hash field inner source MAC */ - SAI_NATIVE_HASH_FIELD_INNER_SRC_MAC, + SAI_NATIVE_HASH_FIELD_INNER_SRC_MAC = 0x00000010, /** Native hash field inner destination MAC */ - SAI_NATIVE_HASH_FIELD_INNER_DST_MAC, + SAI_NATIVE_HASH_FIELD_INNER_DST_MAC = 0x00000011, /** Native hash field entire MPLS label stack */ - SAI_NATIVE_HASH_FIELD_MPLS_LABEL_ALL, + SAI_NATIVE_HASH_FIELD_MPLS_LABEL_ALL = 0x00000012, /** Native hash field the top MPLS label */ - SAI_NATIVE_HASH_FIELD_MPLS_LABEL_0, + SAI_NATIVE_HASH_FIELD_MPLS_LABEL_0 = 0x00000013, /** Native hash field second MPLS label from the top */ - SAI_NATIVE_HASH_FIELD_MPLS_LABEL_1, + SAI_NATIVE_HASH_FIELD_MPLS_LABEL_1 = 0x00000014, /** Native hash field third MPLS label from the top */ - SAI_NATIVE_HASH_FIELD_MPLS_LABEL_2, + SAI_NATIVE_HASH_FIELD_MPLS_LABEL_2 = 0x00000015, /** Native hash field fourth MPLS label from the top */ - SAI_NATIVE_HASH_FIELD_MPLS_LABEL_3, + SAI_NATIVE_HASH_FIELD_MPLS_LABEL_3 = 0x00000016, /** Native hash field fifth MPLS label from the top */ - SAI_NATIVE_HASH_FIELD_MPLS_LABEL_4, + SAI_NATIVE_HASH_FIELD_MPLS_LABEL_4 = 0x00000017, /** Native hash field IPv6 flow label */ - SAI_NATIVE_HASH_FIELD_IPV6_FLOW_LABEL, + SAI_NATIVE_HASH_FIELD_IPV6_FLOW_LABEL = 0x00000018, /** No field - for compatibility, must be last */ - SAI_NATIVE_HASH_FIELD_NONE, + SAI_NATIVE_HASH_FIELD_NONE = 0x00000021, } sai_native_hash_field_t; diff --git a/inc/saiipmcgroup.h b/inc/saiipmcgroup.h index 9272f80c56..7cd90705a4 100644 --- a/inc/saiipmcgroup.h +++ b/inc/saiipmcgroup.h @@ -104,7 +104,7 @@ typedef enum _sai_ipmc_group_member_attr_t SAI_IPMC_GROUP_MEMBER_ATTR_END, /** Custom range base value */ - SAI_IPMC_GROUP_MEMBER_ATTR_CUSTOM_RANGE_START = 0x10000000, + SAI_IPMC_GROUP_MEMBER_ATTR_CUSTOM_RANGE_START = 0x10000000, /** End of custom range base */ SAI_IPMC_GROUP_MEMBER_ATTR_CUSTOM_RANGE_END diff --git a/inc/saiisolationgroup.h b/inc/saiisolationgroup.h index 9def541a1d..da30e351d1 100644 --- a/inc/saiisolationgroup.h +++ b/inc/saiisolationgroup.h @@ -122,7 +122,7 @@ typedef enum _sai_isolation_group_member_attr_t SAI_ISOLATION_GROUP_MEMBER_ATTR_END, /** Custom range base value */ - SAI_ISOLATION_GROUP_MEMBER_ATTR_CUSTOM_RANGE_START = 0x10000000, + SAI_ISOLATION_GROUP_MEMBER_ATTR_CUSTOM_RANGE_START = 0x10000000, /** End of custom range base */ SAI_ISOLATION_GROUP_MEMBER_ATTR_CUSTOM_RANGE_END diff --git a/inc/sail2mcgroup.h b/inc/sail2mcgroup.h index 021b25f9a3..d96b6210c3 100644 --- a/inc/sail2mcgroup.h +++ b/inc/sail2mcgroup.h @@ -114,7 +114,7 @@ typedef enum _sai_l2mc_group_member_attr_t SAI_L2MC_GROUP_MEMBER_ATTR_END, /** Custom range base value */ - SAI_L2MC_GROUP_MEMBER_ATTR_CUSTOM_RANGE_START = 0x10000000, + SAI_L2MC_GROUP_MEMBER_ATTR_CUSTOM_RANGE_START = 0x10000000, /** End of custom range base */ SAI_L2MC_GROUP_MEMBER_ATTR_CUSTOM_RANGE_END diff --git a/inc/saimirror.h b/inc/saimirror.h index d3fb10f37f..3901ae477c 100644 --- a/inc/saimirror.h +++ b/inc/saimirror.h @@ -39,7 +39,7 @@ typedef enum _sai_mirror_session_type_t { /** Local SPAN */ - SAI_MIRROR_SESSION_TYPE_LOCAL = 0, + SAI_MIRROR_SESSION_TYPE_LOCAL, /** Remote SPAN */ SAI_MIRROR_SESSION_TYPE_REMOTE, diff --git a/inc/saimymac.h b/inc/saimymac.h new file mode 100644 index 0000000000..1b193f05fb --- /dev/null +++ b/inc/saimymac.h @@ -0,0 +1,172 @@ +/** + * 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 saimymac.h + * + * @brief This module defines SAI My MAC + */ + +#if !defined (__SAIMYMAC_H_) +#define __SAIMYMAC_H_ + +#include + +/** + * @brief My MAC entry attribute IDs + */ +typedef enum _sai_my_mac_attr_t +{ + /** + * @brief Start of attributes + */ + SAI_MY_MAC_ATTR_START, + + /** + * @brief Priority + * + * Value must be in the range defined in + * \[#SAI_SWITCH_ATTR_MY_MAC_TABLE_MINIMUM_PRIORITY, + * #SAI_SWITCH_ATTR_MY_MAC_TABLE_MAXIMUM_PRIORITY\] + * (default = #SAI_SWITCH_ATTR_MY_MAC_TABLE_MINIMUM_PRIORITY) + * + * @type sai_uint32_t + * @flags CREATE_AND_SET + * @default 0 + */ + SAI_MY_MAC_ATTR_PRIORITY = SAI_MY_MAC_ATTR_START, + + /** + * @brief Associated Port, LAG object id, + * if not specified any port will match + * + * @type sai_object_id_t + * @flags CREATE_ONLY + * @objects SAI_OBJECT_TYPE_PORT, SAI_OBJECT_TYPE_LAG + * @allownull true + * @default SAI_NULL_OBJECT_ID + */ + SAI_MY_MAC_ATTR_PORT_ID, + + /** + * @brief Associated Vlan Id, + * if not specified any vlan id will match + * + * @type sai_uint16_t + * @flags CREATE_ONLY + * @isvlan true + * @default 0 + */ + SAI_MY_MAC_ATTR_VLAN_ID, + + /** + * @brief MAC Address + * + * @type sai_mac_t + * @flags CREATE_ONLY + * @default vendor + */ + SAI_MY_MAC_ATTR_MAC_ADDRESS, + + /** + * @brief MAC Address Mask + * + * @type sai_mac_t + * @flags CREATE_ONLY + * @default vendor + */ + SAI_MY_MAC_ATTR_MAC_ADDRESS_MASK, + + /** + * @brief End of attributes + */ + SAI_MY_MAC_ATTR_END, + + /** Custom range base value */ + SAI_MY_MAC_ATTR_CUSTOM_RANGE_START = 0x10000000, + + /** End of custom range base */ + SAI_MY_MAC_ATTR_CUSTOM_RANGE_END + +} sai_my_mac_attr_t; + +/** + * @brief Create My MAC entry. + * + * @param[out] my_mac_id My MAC 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_my_mac_fn)( + _Out_ sai_object_id_t *my_mac_id, + _In_ sai_object_id_t switch_id, + _In_ uint32_t attr_count, + _In_ const sai_attribute_t *attr_list); + +/** + * @brief Remove My MAC entry + * + * @param[in] my_mac_id My MAC Id + * + * @return #SAI_STATUS_SUCCESS on success, failure status code on error + */ +typedef sai_status_t (*sai_remove_my_mac_fn)( + _In_ sai_object_id_t my_mac_id); + +/** + * @brief Set My MAC entry attribute + * + * @param[in] my_mac_id My MAC id + * @param[in] attr Attribute + * + * @return #SAI_STATUS_SUCCESS on success, failure status code on error + */ +typedef sai_status_t (*sai_set_my_mac_attribute_fn)( + _In_ sai_object_id_t my_mac_id, + _In_ const sai_attribute_t *attr); + +/** + * @brief Get My MAC entry attribute + * + * @param[in] my_mac_id My MAC 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_my_mac_attribute_fn)( + _In_ sai_object_id_t my_mac_id, + _In_ uint32_t attr_count, + _Inout_ sai_attribute_t *attr_list); + +/** + * @brief My MAC methods table retrieved with sai_api_query() + */ +typedef struct _sai_my_mac_api_t +{ + sai_create_my_mac_fn create_my_mac; + sai_remove_my_mac_fn remove_my_mac; + sai_set_my_mac_attribute_fn set_my_mac_attribute; + sai_get_my_mac_attribute_fn get_my_mac_attribute; + +} sai_my_mac_api_t; + +#endif /** __SAIMYMAC_H_ */ diff --git a/inc/sainat.h b/inc/sainat.h index a05e61ebe5..b2ad864d72 100644 --- a/inc/sainat.h +++ b/inc/sainat.h @@ -72,7 +72,7 @@ typedef enum _sai_nat_entry_attr_t * @flags CREATE_AND_SET * @default SAI_NAT_TYPE_NONE */ - SAI_NAT_ENTRY_ATTR_NAT_TYPE = SAI_NAT_ENTRY_ATTR_START, + SAI_NAT_ENTRY_ATTR_NAT_TYPE = SAI_NAT_ENTRY_ATTR_START, /** * @brief Replace source IPv4 address in packet. @@ -493,7 +493,7 @@ typedef enum _sai_nat_zone_counter_attr_t * @flags CREATE_AND_SET * @default SAI_NAT_TYPE_NONE */ - SAI_NAT_ZONE_COUNTER_ATTR_NAT_TYPE = SAI_NAT_ZONE_COUNTER_ATTR_START, + SAI_NAT_ZONE_COUNTER_ATTR_NAT_TYPE = SAI_NAT_ZONE_COUNTER_ATTR_START, /** * @brief NAT Zone ID diff --git a/inc/sainexthopgroup.h b/inc/sainexthopgroup.h index 99c5a4aef2..a7179b7431 100644 --- a/inc/sainexthopgroup.h +++ b/inc/sainexthopgroup.h @@ -53,6 +53,9 @@ typedef enum _sai_next_hop_group_type_t /** Next hop protection group. Contains primary and backup next hops. */ SAI_NEXT_HOP_GROUP_TYPE_PROTECTION, + /** Next hop group is class-based, with members selected by Forwarding class */ + SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED, + /* Other types of next hop group to be defined in the future, e.g., WCMP */ } sai_next_hop_group_type_t; @@ -151,7 +154,7 @@ typedef enum _sai_next_hop_group_attr_t * @type sai_uint32_t * @flags CREATE_ONLY * @default 0 - * @validonly SAI_NEXT_HOP_GROUP_ATTR_TYPE == SAI_NEXT_HOP_GROUP_TYPE_FINE_GRAIN_ECMP + * @validonly SAI_NEXT_HOP_GROUP_ATTR_TYPE == SAI_NEXT_HOP_GROUP_TYPE_FINE_GRAIN_ECMP or SAI_NEXT_HOP_GROUP_ATTR_TYPE == SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED * @isresourcetype true */ SAI_NEXT_HOP_GROUP_ATTR_CONFIGURED_SIZE, @@ -169,6 +172,18 @@ typedef enum _sai_next_hop_group_attr_t */ SAI_NEXT_HOP_GROUP_ATTR_REAL_SIZE, + /** + * @brief Next hop group selection map + * + * @type sai_object_id_t + * @flags CREATE_AND_SET + * @objects SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MAP + * @allownull true + * @default SAI_NULL_OBJECT_ID + * @validonly SAI_NEXT_HOP_GROUP_ATTR_TYPE == SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED + */ + SAI_NEXT_HOP_GROUP_ATTR_SELECTION_MAP, + /** * @brief End of attributes */ @@ -203,7 +218,7 @@ typedef enum _sai_next_hop_group_member_attr_t * * @type sai_object_id_t * @flags MANDATORY_ON_CREATE | CREATE_AND_SET - * @objects SAI_OBJECT_TYPE_NEXT_HOP + * @objects SAI_OBJECT_TYPE_NEXT_HOP, SAI_OBJECT_TYPE_NEXT_HOP_GROUP */ SAI_NEXT_HOP_GROUP_MEMBER_ATTR_NEXT_HOP_ID, @@ -263,7 +278,8 @@ typedef enum _sai_next_hop_group_member_attr_t * * Index specifying the strict member's order. * Allowed value range for is from 0 to SAI_NEXT_HOP_GROUP_ATTR_REAL_SIZE - 1. - * Should only be used if the type of owning group is SAI_NEXT_HOP_GROUP_TYPE_FINE_GRAIN_ECMP. + * Should only be used if the type of owning group is SAI_NEXT_HOP_GROUP_TYPE_FINE_GRAIN_ECMP + * or SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED. * * @type sai_uint32_t * @flags CREATE_ONLY @@ -304,13 +320,57 @@ typedef enum _sai_next_hop_group_member_attr_t SAI_NEXT_HOP_GROUP_MEMBER_ATTR_END, /** Custom range base value */ - SAI_NEXT_HOP_GROUP_MEMBER_ATTR_CUSTOM_RANGE_START = 0x10000000, + SAI_NEXT_HOP_GROUP_MEMBER_ATTR_CUSTOM_RANGE_START = 0x10000000, /** End of custom range base */ SAI_NEXT_HOP_GROUP_MEMBER_ATTR_CUSTOM_RANGE_END } sai_next_hop_group_member_attr_t; +typedef enum _sai_next_hop_group_map_type_t +{ + /** Next hop group map forwarding-class to index */ + SAI_NEXT_HOP_GROUP_MAP_TYPE_FORWARDING_CLASS_TO_INDEX + +} sai_next_hop_group_map_type_t; + +typedef enum _sai_next_hop_group_map_attr_t +{ + /** + * @brief Start of attributes + */ + SAI_NEXT_HOP_GROUP_MAP_ATTR_START, + + /** + * @brief Next hop group map type + * + * @type sai_next_hop_group_map_type_t + * @flags MANDATORY_ON_CREATE | CREATE_ONLY + */ + SAI_NEXT_HOP_GROUP_MAP_ATTR_TYPE = SAI_NEXT_HOP_GROUP_MAP_ATTR_START, + + /** + * @brief Next hop group entries associated with this map. + * + * @type sai_map_list_t + * @flags CREATE_AND_SET + * @default empty + */ + SAI_NEXT_HOP_GROUP_MAP_ATTR_MAP_TO_VALUE_LIST, + + /** + * @brief End of attributes + */ + SAI_NEXT_HOP_GROUP_MAP_ATTR_END, + + /** Custom range base value */ + SAI_NEXT_HOP_GROUP_MAP_ATTR_CUSTOM_RANGE_START = 0x10000000, + + /** End of custom range base */ + SAI_NEXT_HOP_GROUP_MAP_ATTR_CUSTOM_RANGE_END + +} sai_next_hop_group_map_attr_t; + /** * @brief Create next hop group * @@ -390,7 +450,7 @@ typedef sai_status_t (*sai_remove_next_hop_group_member_fn)( _In_ sai_object_id_t next_hop_group_member_id); /** - * @brief Set Next Hop Group attribute + * @brief Set Next Hop Group member attribute * * @param[in] next_hop_group_member_id Next hop group member ID * @param[in] attr Attribute @@ -402,7 +462,7 @@ typedef sai_status_t (*sai_set_next_hop_group_member_attribute_fn)( _In_ const sai_attribute_t *attr); /** - * @brief Get Next Hop Group attribute + * @brief Get Next Hop Group member attribute * * @param[in] next_hop_group_member_id Next hop group member ID * @param[in] attr_count Number of attributes @@ -415,6 +475,58 @@ typedef sai_status_t (*sai_get_next_hop_group_member_attribute_fn)( _In_ uint32_t attr_count, _Inout_ sai_attribute_t *attr_list); +/** + * @brief Create next hop group map + * + * @param[out] next_hop_group_map_id Next hop group map 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_next_hop_group_map_fn)( + _Out_ sai_object_id_t *next_hop_group_map_id, + _In_ sai_object_id_t switch_id, + _In_ uint32_t attr_count, + _In_ const sai_attribute_t *attr_list); + +/** + * @brief Remove next hop group map + * + * @param[in] next_hop_group_map_id Next hop group map ID + * + * @return #SAI_STATUS_SUCCESS on success, failure status code on error + */ +typedef sai_status_t (*sai_remove_next_hop_group_map_fn)( + _In_ sai_object_id_t next_hop_group_map_id); + +/** + * @brief Set Next Hop Group map attribute + * + * @param[in] next_hop_group_map_id Next hop group map ID + * @param[in] attr Attribute + * + * @return #SAI_STATUS_SUCCESS on success, failure status code on error + */ +typedef sai_status_t (*sai_set_next_hop_group_map_attribute_fn)( + _In_ sai_object_id_t next_hop_group_map_id, + _In_ const sai_attribute_t *attr); + +/** + * @brief Get next hop group map attribute + * + * @param[in] next_hop_group_map_id Next hop group map 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_next_hop_group_map_attribute_fn)( + _In_ sai_object_id_t next_hop_group_map_id, + _In_ uint32_t attr_count, + _Inout_ sai_attribute_t *attr_list); + /** * @brief Next Hop methods table retrieved with sai_api_query() */ @@ -430,6 +542,10 @@ typedef struct _sai_next_hop_group_api_t sai_get_next_hop_group_member_attribute_fn get_next_hop_group_member_attribute; sai_bulk_object_create_fn create_next_hop_group_members; sai_bulk_object_remove_fn remove_next_hop_group_members; + sai_create_next_hop_group_map_fn create_next_hop_group_map; + sai_remove_next_hop_group_map_fn remove_next_hop_group_map; + sai_set_next_hop_group_map_attribute_fn set_next_hop_group_map_attribute; + sai_get_next_hop_group_map_attribute_fn get_next_hop_group_map_attribute; } sai_next_hop_group_api_t; /** diff --git a/inc/saiport.h b/inc/saiport.h index 5354f220c3..766f612dbb 100644 --- a/inc/saiport.h +++ b/inc/saiport.h @@ -1036,8 +1036,8 @@ typedef enum _sai_port_attr_t * @brief Port bind point for ingress ACL object * * Bind (or unbind) an ingress ACL table or ACL group on a port. - * Enable/Update ingress ACL table or ACL group filtering by assigning the - * list of valid object id. Disable ingress filtering by assigning + * Enable/Update ingress ACL table or ACL group filtering by assigning + * a valid object id. Disable ingress filtering by assigning * SAI_NULL_OBJECT_ID in the attribute value. * * @type sai_object_id_t @@ -1052,8 +1052,8 @@ typedef enum _sai_port_attr_t * @brief Port bind point for egress ACL object * * Bind (or unbind) an egress ACL tables or ACL group on a port. - * Enable/Update egress ACL table or ACL group filtering by assigning the - * list of valid object id. Disable egress filtering by assigning + * Enable/Update egress ACL table or ACL group filtering by assigning + * a valid object id. Disable egress filtering by assigning * SAI_NULL_OBJECT_ID in the attribute value. * * @type sai_object_id_t @@ -1068,8 +1068,8 @@ typedef enum _sai_port_attr_t * @brief Port bind point for ingress MACsec ACL object * * Bind (or unbind) an ingress MACsec ACL table on a port. - * Enable/Update ingress MACsec ACL table filtering by assigning the - * list of valid object id. Disable ingress filtering by assigning + * Enable/Update ingress MACsec ACL table filtering by assigning + * a valid object id. Disable ingress filtering by assigning * SAI_NULL_OBJECT_ID in the attribute value. * * @type sai_object_id_t @@ -1084,8 +1084,8 @@ typedef enum _sai_port_attr_t * @brief Port bind point for egress MACsec ACL object * * Bind (or unbind) an egress MACsec ACL tables on a port. - * Enable/Update egress MACsec ACL table filtering by assigning the - * list of valid object id. Disable egress filtering by assigning + * Enable/Update egress MACsec ACL table filtering by assigning + * a valid object id. Disable egress filtering by assigning * SAI_NULL_OBJECT_ID in the attribute value. * * @type sai_object_id_t @@ -2004,6 +2004,34 @@ typedef enum _sai_port_attr_t */ SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL_FORWARD, + /** + * @brief Enable DSCP -> Forwarding Class MAP on port + * + * Map id = #SAI_NULL_OBJECT_ID to disable map on port. + * Default no map. + * + * @type sai_object_id_t + * @flags CREATE_AND_SET + * @objects SAI_OBJECT_TYPE_QOS_MAP + * @allownull true + * @default SAI_NULL_OBJECT_ID + */ + SAI_PORT_ATTR_QOS_DSCP_TO_FORWARDING_CLASS_MAP, + + /** + * @brief Enable EXP -> Forwarding Class MAP on port + * + * Map id = #SAI_NULL_OBJECT_ID to disable map on port. + * Default no map. + * + * @type sai_object_id_t + * @flags CREATE_AND_SET + * @objects SAI_OBJECT_TYPE_QOS_MAP + * @allownull true + * @default SAI_NULL_OBJECT_ID + */ + SAI_PORT_ATTR_QOS_MPLS_EXP_TO_FORWARDING_CLASS_MAP, + /** * @brief Associated IPsec port * diff --git a/inc/saiqosmap.h b/inc/saiqosmap.h index d723f15468..5b5d867e4c 100644 --- a/inc/saiqosmap.h +++ b/inc/saiqosmap.h @@ -77,6 +77,12 @@ typedef enum _sai_qos_map_type_t /** QOS Map to set traffic class and color to EXP */ SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_MPLS_EXP = 0x0000000c, + /** QOS Map to set DSCP to Forwarding class */ + SAI_QOS_MAP_TYPE_DSCP_TO_FORWARDING_CLASS = 0x0000000d, + + /** QOS Map to set EXP to Forwarding class */ + SAI_QOS_MAP_TYPE_MPLS_EXP_TO_FORWARDING_CLASS = 0x0000000e, + /** Custom range base value */ SAI_QOS_MAP_TYPE_CUSTOM_RANGE_BASE = 0x10000000 diff --git a/inc/sairpfgroup.h b/inc/sairpfgroup.h index 636f26ac93..ec3a6fcd95 100644 --- a/inc/sairpfgroup.h +++ b/inc/sairpfgroup.h @@ -104,7 +104,7 @@ typedef enum _sai_rpf_group_member_attr_t SAI_RPF_GROUP_MEMBER_ATTR_END, /** Custom range base value */ - SAI_RPF_GROUP_MEMBER_ATTR_CUSTOM_RANGE_START = 0x10000000, + SAI_RPF_GROUP_MEMBER_ATTR_CUSTOM_RANGE_START = 0x10000000, /** End of custom range base */ SAI_RPF_GROUP_MEMBER_ATTR_CUSTOM_RANGE_END diff --git a/inc/saiswitch.h b/inc/saiswitch.h index ad942529b3..36681d6302 100644 --- a/inc/saiswitch.h +++ b/inc/saiswitch.h @@ -909,7 +909,7 @@ typedef enum _sai_switch_attr_t * @brief Switch/Global bind point for ingress ACL object * * Bind (or unbind) an ingress ACL table or ACL group globally. Enable/Update - * ingress ACL table or ACL group filtering by assigning the list of valid + * ingress ACL table or ACL group filtering by assigning a valid * object id. Disable ingress filtering by assigning SAI_NULL_OBJECT_ID * in the attribute value. * @@ -925,7 +925,7 @@ typedef enum _sai_switch_attr_t * @brief Switch/Global bind point for egress ACL object * * Bind (or unbind) an egress ACL tables or ACL group globally. Enable/Update - * egress ACL table or ACL group filtering by assigning the list of valid + * egress ACL table or ACL group filtering by assigning a valid * object id. Disable egress filtering by assigning SAI_NULL_OBJECT_ID * in the attribute value. * @@ -1594,7 +1594,7 @@ typedef enum _sai_switch_attr_t * @brief Enable DSCP -> TC MAP on switch. * * MAP id = #SAI_NULL_OBJECT_ID to disable map on switch. - * To enable/disable trust DSCP, Map ID should be added/removed on port. + * To enable/disable trust DSCP, Map ID should be added/removed on switch. * Default no map. * * @type sai_object_id_t @@ -2525,7 +2525,7 @@ typedef enum _sai_switch_attr_t * @brief Switch/Global bind point for Pre-ingress ACL object * * Bind (or unbind) an Pre-ingress ACL table or ACL group globally. Enable/Update - * Pre-ingress ACL table or ACL group filtering by assigning the list of valid + * Pre-ingress ACL table or ACL group filtering by assigning a valid * object id. Disable pre-ingress filtering by assigning SAI_NULL_OBJECT_ID * in the attribute value. * @@ -2579,6 +2579,83 @@ typedef enum _sai_switch_attr_t */ SAI_SWITCH_ATTR_SLAVE_MDIO_ADDR_LIST, + /** + * @brief Minimum priority for My MAC + * + * @type sai_uint32_t + * @flags READ_ONLY + */ + SAI_SWITCH_ATTR_MY_MAC_TABLE_MINIMUM_PRIORITY, + + /** + * @brief Maximum priority for My MAC + * + * @type sai_uint32_t + * @flags READ_ONLY + */ + SAI_SWITCH_ATTR_MY_MAC_TABLE_MAXIMUM_PRIORITY, + + /** + * @brief My MAC entries installed on the switch + * + * @type sai_object_list_t + * @flags READ_ONLY + * @objects SAI_OBJECT_TYPE_MY_MAC + */ + SAI_SWITCH_ATTR_MY_MAC_LIST, + + /** + * @brief Number of My MAC entries installed on the switch + * + * @type sai_uint32_t + * @flags READ_ONLY + */ + SAI_SWITCH_ATTR_INSTALLED_MY_MAC_ENTRIES, + + /** + * @brief Number of available My MAC entries + * + * @type sai_uint32_t + * @flags READ_ONLY + */ + SAI_SWITCH_ATTR_AVAILABLE_MY_MAC_ENTRIES, + + /** + * @brief Maximum forwarding classes limit + * + * @type sai_uint8_t + * @flags READ_ONLY + */ + SAI_SWITCH_ATTR_MAX_NUMBER_OF_FORWARDING_CLASSES, + + /** + * @brief Enable DSCP -> Forwarding Class MAP on switch + * + * MAP id = #SAI_NULL_OBJECT_ID to disable map on switch. + * Default no map. + * + * @type sai_object_id_t + * @flags CREATE_AND_SET + * @objects SAI_OBJECT_TYPE_QOS_MAP + * @allownull true + * @default SAI_NULL_OBJECT_ID + */ + SAI_SWITCH_ATTR_QOS_DSCP_TO_FORWARDING_CLASS_MAP, + + /** + * @brief Enable EXP -> Forwarding Class MAP on switch + * + * MAP id = #SAI_NULL_OBJECT_ID to disable map on switch. + * Default no map. + * + * @type sai_object_id_t + * @flags CREATE_AND_SET + * @objects SAI_OBJECT_TYPE_QOS_MAP + * @allownull true + * @default SAI_NULL_OBJECT_ID + */ + SAI_SWITCH_ATTR_QOS_MPLS_EXP_TO_FORWARDING_CLASS_MAP, + /** * @brief IPsec object for this switch. * diff --git a/inc/saitam.h b/inc/saitam.h index d7054b1a36..8d09dfbd22 100644 --- a/inc/saitam.h +++ b/inc/saitam.h @@ -274,7 +274,7 @@ typedef enum _sai_tam_event_threshold_unit_t /** * @brief Event threshold unit nanosecond */ - SAI_TAM_EVENT_THRESHOLD_UNIT_NANOSEC = 0, + SAI_TAM_EVENT_THRESHOLD_UNIT_NANOSEC, /** * @brief Event threshold unit micro second @@ -1168,7 +1168,7 @@ typedef enum _sai_tam_report_type_t typedef enum _sai_tam_report_mode_t { /** Report all events */ - SAI_TAM_REPORT_MODE_ALL = 0, + SAI_TAM_REPORT_MODE_ALL, /** Report in a bulk mode */ SAI_TAM_REPORT_MODE_BULK, @@ -1331,7 +1331,7 @@ typedef enum _sai_tam_reporting_unit_t /** * @brief Report Unit second */ - SAI_TAM_REPORTING_UNIT_SEC = 0, + SAI_TAM_REPORTING_UNIT_SEC, /** * @brief Report unit minute diff --git a/inc/saitypes.h b/inc/saitypes.h index 0a7468eeb5..46e3a6a60b 100644 --- a/inc/saitypes.h +++ b/inc/saitypes.h @@ -283,9 +283,11 @@ typedef enum _sai_object_type_t SAI_OBJECT_TYPE_FINE_GRAINED_HASH_FIELD = 94, SAI_OBJECT_TYPE_SWITCH_TUNNEL = 95, SAI_OBJECT_TYPE_MY_SID_ENTRY = 96, - SAI_OBJECT_TYPE_IPSEC = 97, - SAI_OBJECT_TYPE_IPSEC_PORT = 98, - SAI_OBJECT_TYPE_IPSEC_SA = 99, + SAI_OBJECT_TYPE_MY_MAC = 97, + SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MAP = 98, + SAI_OBJECT_TYPE_IPSEC = 99, + SAI_OBJECT_TYPE_IPSEC_PORT = 100, + SAI_OBJECT_TYPE_IPSEC_SA = 101, SAI_OBJECT_TYPE_MAX, /* Must remain in last position */ } sai_object_type_t; @@ -659,6 +661,7 @@ typedef enum _sai_packet_color_t * dot1p/DSCP/MPLS_EXP --> TC * dot1p/DSCP/MPLS_EXP --> Color * dot1p/DSCP/MPLS_EXP --> TC + Color + * DSCP/MPLS_EXP --> FC * TC --> dot1p/DSCP/MPLS_EXP. * TC + color --> dot1p/DSCP/MPLS_EXP. * TC --> Egress Queue. @@ -692,6 +695,9 @@ typedef struct _sai_qos_map_params_t /** MPLS exp value */ sai_uint8_t mpls_exp; + /** Forwarding class */ + sai_uint8_t fc; + } sai_qos_map_params_t; typedef struct _sai_qos_map_t @@ -1045,6 +1051,7 @@ typedef struct _sai_system_port_config_t /** Number of Virtual Output Queues associated with the system port */ uint32_t num_voq; + } sai_system_port_config_t; /** diff --git a/meta/Makefile b/meta/Makefile index 4204d2c397..e71b990147 100644 --- a/meta/Makefile +++ b/meta/Makefile @@ -80,6 +80,8 @@ SYMBOLS = $(OBJ:=.symbols) all: toolsversions saisanitycheck saimetadatatest saiserializetest saidepgraph.svg $(SYMBOLS) ./checkheaders.pl ../inc ../inc + ./checkenumlock.sh + ./checkancestry.sh ./saimetadatatest >/dev/null ./saiserializetest >/dev/null ./saisanitycheck @@ -136,7 +138,7 @@ saidepgraph.svg: saidepgraph.gv .PHONY: clean clean: - rm -f *.o *~ .*~ *.tmp .*.swp .*.swo *.bak sai*.gv sai*.svg *.o.symbols + rm -f *.o *~ .*~ *.tmp .*.swp .*.swo *.bak sai*.gv sai*.svg *.o.symbols doxygen*.db rm -f saimetadata.h saimetadata.c saimetadatatest.c rm -f saisanitycheck saimetadatatest saiserializetest saidepgraphgen - rm -rf xml html dist + rm -rf xml html dist temp diff --git a/meta/ancestry.pl b/meta/ancestry.pl new file mode 100755 index 0000000000..95babbc1e0 --- /dev/null +++ b/meta/ancestry.pl @@ -0,0 +1,243 @@ +#!/usr/bin/perl +# +# Copyright (c) 2021 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 ancestry.pl +# +# @brief This module defines enum ancestry check for SAI headers +# + +BEGIN { push @INC,'.'; } + +use strict; +use warnings; +use diagnostics; +use sort 'stable'; # for enum initializers sort + +use Getopt::Std; +use Data::Dumper; +use utils; + +my %options = (); + +getopts("dsASl", \%options); + +our $optionPrintDebug = 1 if defined $options{d}; +our $optionDisableAspell = 1 if defined $options{A}; +our $optionUseXmlSimple = 1 if defined $options{s}; +our $optionDisableStyleCheck = 1 if defined $options{S}; +our $optionShowLogCaller = 1 if defined $options{l}; + +$SIG{__DIE__} = sub +{ + LogError "FATAL ERROR === MUST FIX === : @_"; + exit 1; +}; + +our $INCLUDE_DIR = "temp"; +our %SAI_ENUMS = (); +our %SAI_DEFINES = (); +our %HISTORY = (); +our %IGNORED = (); + +sub ProcessSingleHeader +{ + my $header = shift; + + my $data = ReadHeaderFile $header; + + my @lines = split/\n/,$data; + + my $currentEnum = "undefined"; + my $currentEnumPrefix = "undefined"; + + my $ignore = ""; + + for my $line (@lines) + { + if ($line =~ /#define\s+(SAI_\w+)\s+(\(?".*"|$NUMBER_REGEX\)?)$/) + { + LogDebug "Defined $1 = $2"; + + $SAI_DEFINES{$1} = $2; + next; + } + + if ($line =~ /^\s*typedef\s+enum\s+_((sai_\w+_)t)/) + { + $currentEnum = $1; + $currentEnumPrefix = uc($2); + + my @values = (); + my @inits = (); + + $SAI_ENUMS{$currentEnum}->{values} = \@values; + $SAI_ENUMS{$currentEnum}->{inits} = \@inits; + + LogDebug "enum found $currentEnum"; + next; + } + + $ignore = "ignore" if $line =~ /\@ignore/; + + if ($line =~ /^\s*(${currentEnumPrefix}\w+)(.*)$/) + { + my $enumName = $1; + my $init = (defined $2) ? $2 : ""; + + $init =~ s!\s*/\*.*\*/!!; # remove potential comment + $init =~ s/^\s*=\s*/= /; # remove assigner + $init =~ s/\s*,\s*$//; # remove comma + + push @{ $SAI_ENUMS{$currentEnum}->{values} }, $enumName; + push @{ $SAI_ENUMS{$currentEnum}->{inits} }, $init; + + $IGNORED{$enumName} = $init if $ignore ne ""; + + $ignore = ""; + } + } +} + +sub ProcessHeaders +{ + my $commit = shift; + + my @headers = GetHeaderFiles("temp/commit-$commit/inc"); + + for my $header (@headers) + { + LogDebug "Processing $header"; + + ProcessSingleHeader "temp/commit-$commit/inc/$header"; + } +} + +sub ProcessAllEnumInitializers +{ + for my $enumTypeName (sort keys %SAI_ENUMS) + { + LogDebug $enumTypeName; + + my $arr_ref = $SAI_ENUMS{$enumTypeName}->{values}; + my $ini_ref = $SAI_ENUMS{$enumTypeName}->{inits}; + + ProcessEnumInitializers($arr_ref, $ini_ref, $enumTypeName, \%SAI_DEFINES); + } +} + +sub BuildCommitHistory +{ + my $commit = shift; + + for my $enumTypeName (sort keys %SAI_ENUMS) + { + LogDebug $enumTypeName; + + my $arr_ref = $SAI_ENUMS{$enumTypeName}->{values}; + my $ini_ref = $SAI_ENUMS{$enumTypeName}->{inits}; + + my $count = scalar @$arr_ref; + + for (my $idx = 0; $idx < $count; $idx++) + { + my $enumName = $arr_ref->[$idx]; + my $enumValue = $ini_ref->[$idx]; + + # CheckAllEnumsEndings make sure _START match _END + + next if $enumName =~ /_START$/; + next if $enumName =~ /_END$/; + next if $enumName =~ /_RANGE_BASE$/; + + next if $enumName eq "SAI_API_MAX"; + next if $enumName eq "SAI_OBJECT_TYPE_MAX"; + + LogError "wrong initializer on $enumName $enumValue" if not $enumValue =~ /^0x[0-9a-f]{8}$/; + + if (defined $HISTORY{$enumTypeName}{$enumName} and $HISTORY{$enumTypeName}{$enumName}{value} eq $enumValue) + { + # ok, value is the same + } + elsif (not defined $HISTORY{$enumTypeName} or not defined $HISTORY{$enumTypeName}{$enumName}) + { + $HISTORY{$enumTypeName}{$enumName}{name} = $enumName; + $HISTORY{$enumTypeName}{$enumName}{value} = $enumValue; + $HISTORY{$enumTypeName}{$enumName}{commit} = $commit; + + if (not defined $HISTORY{$enumTypeName}{$enumValue}) + { + $HISTORY{$enumTypeName}{$enumValue} = $enumName; + } + elsif ($HISTORY{$enumTypeName}{$enumValue} eq $enumName) + { + # ok this is the same enum in history + } + elsif (defined $IGNORED{$enumName}) + { + # ok, values are the sam, but enum is ignored (left for backward compatibility) + # but we don't check if ignored value changed, it potentially switch to different ignore + } + else # 2 enums have same integer value + { + #print "elsif (defined $enumName $IGNORED{$enumName} and $IGNORED{$enumName} eq $HISTORY{$enumTypeName}{$enumName}{name})"; + + LogWarning "Both enums have the same value $enumName and $HISTORY{$enumTypeName}{$enumValue} = $enumValue"; + } + } + else + { + LogError "check ! $enumName value is $enumValue, but on was $HISTORY{$enumTypeName}{$enumName}{value} on commit $HISTORY{$enumTypeName}{$enumName}{commit}"; + + $HISTORY{$enumTypeName}{$enumName}{value} = $enumValue; + $HISTORY{$enumTypeName}{$enumName}{commit} = $commit; + } + } + } +} + +sub CleanData +{ + %SAI_ENUMS = (); + %SAI_DEFINES = (); + %IGNORED = (); +} + +# +# MAIN +# + +for my $commit (@ARGV) +{ + # reset + + LogInfo "processing commit $commit"; + + CleanData(); + + ProcessHeaders $commit; + + ProcessAllEnumInitializers(); + + # print Dumper \%SAI_ENUMS; + + BuildCommitHistory $commit; +} + +ExitOnErrorsOrWarnings(); diff --git a/meta/checkancestry.sh b/meta/checkancestry.sh new file mode 100755 index 0000000000..d4b8443a62 --- /dev/null +++ b/meta/checkancestry.sh @@ -0,0 +1,115 @@ +#!/bin/bash +# +# Copyright (c) 2021 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 checkancestry.sh +# +# @brief This module defines ancestry script +# + + +# To list git ancestry all comitts (even if there is a tree not single line) +# this can be usefull to build histroy of enums from root (enum lock) to the +# current origin/master and current commit - and it will be possible to fix +# mistakes. + +# examples below are to show how to get correct git history tree +# git log --graph --oneline --ancestry-path c388490^..0b90765 | cat +# git rev-list --ancestry-path c388490^..0b90765 + +# If we will have our base commit, we will assume that each previous commit +# followed metadata check, and then we can use naive approach for parsing enum +# values instead of doing gcc compile whch can take long time. With this +# approach we should be able to build entire history from base commit throug +# all commits up to the current PR. This will sure that there will be no +# abnormalities if some enums will be removed and then added again with +# different value. This will also help to track the issue if two PRs will pass +# validation but after they will be merged they could potentially cause enum +# value issue and this approach will catch that. +# +# Working throug 25 commits takes about 0.4 seconds + parsing so it seems like +# not a hudge time to make sure all commits are safe and even if we get at some +# point that this will be "too slow", having all history, we can sometimes +# produce "known" history with enum values and keep that file as a reference +# and load it at begin, and start checking commits from one of the future +# commits, basicially reducing processing time to zero. + +# Just for sanity we can also keep headers check to 1 commit back and alse +# maybe we can add one gcc check current to history, + +set -e + +# 1. get all necessary data to temp directory for future processing +# 2. pass all interesting commits to processor to build history + +function clean_temp_dir() +{ + rm -rf temp +} + +function create_temp_dir() +{ + mkdir temp +} + +function checkout_inc_directories() +{ + echo "git checkout work tree commits:" $LIST + + for commit in $LIST + do + #echo working on commit $commit + + mkdir temp/commit-$commit + mkdir temp/commit-$commit/inc + + git --work-tree=temp/commit-$commit checkout $commit inc 2>/dev/null + + done +} + +function create_commit_list() +{ + local begin=$1 + local end=$2 + + echo "git rev list from $begin to $end" + + LIST=$(git rev-list --ancestry-path ${begin}^..${end} | xargs -n 1 git rev-parse --short | tac) +} + +function check_enum_history() +{ + perl ancestry.pl $LIST +} + +# +# MAIN +# + +# BEGIN_COMMIT is the commit from we want enums to be backward compatible + +BEGIN_COMMIT=3132018 +END_COMMIT=HEAD + +clean_temp_dir +create_temp_dir +create_commit_list $BEGIN_COMMIT $END_COMMIT +checkout_inc_directories +check_enum_history diff --git a/meta/checkenumlock.sh b/meta/checkenumlock.sh new file mode 100755 index 0000000000..f143b36094 --- /dev/null +++ b/meta/checkenumlock.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# +# 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 checkenumlock.sh +# +# @brief This module defines SAI enum values integration check for 2 header directories +# + +set -e + +rm -rf temp + +mkdir temp + +git --work-tree=temp/ checkout origin/master inc + +echo "Checking for possible enum values shift (current branch vs origin/master) ..." + +./checkheaders.pl -s ../inc/ temp/inc/ + +rm -rf temp diff --git a/meta/checkheaders.pl b/meta/checkheaders.pl index e7ce93f3e1..592f68733e 100755 --- a/meta/checkheaders.pl +++ b/meta/checkheaders.pl @@ -31,6 +31,12 @@ use File::Temp qw/ tempfile /; use Data::Dumper; +use Getopt::Std; + +my %options = (); +getopts("s", \%options); + +my $optionSkipSingleDefined = 1 if defined $options{s}; use utils; @@ -176,9 +182,30 @@ sub CheckHash for my $key (sort keys %A) { + if (defined $optionSkipSingleDefined) + { + # ignore attributes end, since those will shift + next if $key =~ /^SAI_\w+_ATTR_END$/; + + next if $key eq "SAI_ACL_TABLE_ATTR_FIELD_END"; + next if $key eq "SAI_ACL_ENTRY_ATTR_FIELD_END"; + next if $key eq "SAI_ACL_ENTRY_ATTR_ACTION_END"; + next if $key eq "SAI_OBJECT_TYPE_MAX"; + next if $key eq "SAI_API_MAX"; + + # NOTE: some other attributes/enum with END range could be added + } + if (not defined $B{$key}) { - LogError "enum $key only defined in $A{$key}{path}:$A{$key}{nr}"; + if (not defined $optionSkipSingleDefined) + { + LogError "enum $key only defined in $A{$key}{path}:$A{$key}{nr}" + } + else + { + LogInfo "enum $key only defined in $A{$key}{path}:$A{$key}{nr}" + } next; } diff --git a/meta/parse.pl b/meta/parse.pl index 75bd8e73ba..042b49d212 100755 --- a/meta/parse.pl +++ b/meta/parse.pl @@ -521,162 +521,6 @@ sub ProcessDefineSection } } -sub ProcessEnumInitializers -{ - # - # This function attempts to figure out enum integers values during paring - # time in similar way as C compiler would do. Because SAI community agreed - # that enum grouping is more beneficial then ordering enums, then enum - # values could be not sorted any more. But if we figure out integers - # values, we could perform stable sort at this parser level, and generate - # enums metadata where enum values are sorted. - # - - my ($arr_ref, $ini_ref, $enumTypeName) = @_; - - return if $enumTypeName =~ /_extensions_t$/; # ignore initializers on extensions - - if (scalar(@$arr_ref) != scalar(@$ini_ref)) - { - LogError "attr array not matching initializers array on $enumTypeName"; - return; - } - - return if grep (/< 0, "should be positive"); @@ -5008,14 +5008,14 @@ void check_acl_user_defined_field() void check_label_size() { - SAI_META_LOG_ENTER(); + META_LOG_ENTER(); META_ASSERT_TRUE(sizeof(sai_label_id_t) == sizeof(uint32_t), "label is expected to be 32 bit"); } void check_switch_notify_list() { - SAI_META_LOG_ENTER(); + META_LOG_ENTER(); size_t i; @@ -5031,7 +5031,7 @@ void check_switch_notify_list() void check_switch_pointers_list() { - SAI_META_LOG_ENTER(); + META_LOG_ENTER(); size_t i; @@ -5047,7 +5047,7 @@ void check_switch_pointers_list() void check_defines() { - SAI_META_LOG_ENTER(); + META_LOG_ENTER(); /* * Check if defines are equal to their static values. @@ -5059,7 +5059,7 @@ void check_defines() void check_object_type_attributes() { - SAI_META_LOG_ENTER(); + META_LOG_ENTER(); size_t i = 0; @@ -5227,9 +5227,15 @@ void check_sai_version() /* SAI_VERSION uses 100 base for each component, so each define must not exceed this value */ - META_ASSERT_TRUE((SAI_MAJOR) >= 0 && (SAI_MAJOR) < 100, "invalid SAI_MAJOR version: %d", (SAI_MAJOR)); - META_ASSERT_TRUE((SAI_MINOR) >= 0 && (SAI_MINOR) < 100, "invalid SAI_MINOR version: %d", (SAI_MINOR)); - META_ASSERT_TRUE((SAI_REVISION) >= 0 && (SAI_REVISION) < 100, "invalid SAI_REVISION version: %d", (SAI_REVISION)); + /* Make sure sai version components are assignable to uint32_t */ + + uint32_t major = SAI_MAJOR; + uint32_t minor = SAI_MINOR; + uint32_t revision = SAI_REVISION; + + META_ASSERT_TRUE((major) < 100, "invalid SAI_MAJOR version: %d", (SAI_MAJOR)); + META_ASSERT_TRUE((minor) < 100, "invalid SAI_MINOR version: %d", (SAI_MINOR)); + META_ASSERT_TRUE((revision) < 100, "invalid SAI_REVISION version: %d", (SAI_REVISION)); } void check_max_conditions_len() diff --git a/meta/saiserializetest.c b/meta/saiserializetest.c index 1e7ab22ad3..e1140eebce 100644 --- a/meta/saiserializetest.c +++ b/meta/saiserializetest.c @@ -512,9 +512,9 @@ void test_serialize_enum() ASSERT_STR_EQ(buf, "-1", res); - res = sai_serialize_enum(buf, &sai_metadata_enum_sai_object_type_t, 127); + res = sai_serialize_enum(buf, &sai_metadata_enum_sai_object_type_t, 128); - ASSERT_STR_EQ(buf, "127", res); + ASSERT_STR_EQ(buf, "128", res); /* test all enums */ diff --git a/meta/style.pm b/meta/style.pm index 23aaa0456b..8d4b82efd7 100644 --- a/meta/style.pm +++ b/meta/style.pm @@ -1024,6 +1024,11 @@ sub CheckHeadersStyle LogWarning "missing empty line before: $header $n: $line"; } + if ($line =~ /_(In|Out|Inout)_.+(\* | \* )/) + { + LogWarning "move * to the right of parameter: $header $n: $line"; + } + if ($line =~ /\*.*SAI_.+(==|!=)/ and not $line =~ /\@(condition|validonly)/) { if (not $line =~ /(condition|validonly|valid when|only when)\s+SAI_/i) @@ -1032,6 +1037,11 @@ sub CheckHeadersStyle } } + if ($line =~ /SAI_\w+ \s+=\s+(0x|S)/) + { + LogWarning "too many spaces before '=' $header:$n: $line" + } + if ($line =~ /__/ and not $line =~ /^#.+__SAI\w*_H_|VA_ARGS|BOOL_DEFINED/) { LogWarning "double underscore detected: $header $n: $line"; diff --git a/meta/utils.pm b/meta/utils.pm index 466f2d34f3..df412dd47e 100644 --- a/meta/utils.pm +++ b/meta/utils.pm @@ -207,7 +207,7 @@ sub GetMetadataSourceFiles my @sources; - push @sources, GetFilesByRegex($dir, '^\w+\.(pm|pl|h|cpp|c)$'); + push @sources, GetFilesByRegex($dir, '^\w+\.(pm|pl|h|cpp|c|sh)$'); push @sources, GetFilesByRegex($dir, '^Makefile$'); return @sources; @@ -373,6 +373,178 @@ sub ExitOnErrors exit 1; } +sub ExitOnErrorsOrWarnings +{ + return if $errors == 0 and $warnings == 0; + + LogError "please corret all $errors error(s) and all $warnings warnings before continue"; + + exit 1; +} + +sub ProcessEnumInitializers +{ + # + # This function attempts to figure out enum integers values during paring + # time in similar way as C compiler would do. Because SAI community agreed + # that enum grouping is more beneficial then ordering enums, then enum + # values could be not sorted any more. But if we figure out integers + # values, we could perform stable sort at this parser level, and generate + # enums metadata where enum values are sorted. + # + + my ($arr_ref, $ini_ref, $enumTypeName, $SAI_DEFINES_REF) = @_; + + return if $enumTypeName =~ /_extensions_t$/; # ignore initializers on extensions + + if (scalar(@$arr_ref) != scalar(@$ini_ref)) + { + LogError "attr array not matching initializers array on $enumTypeName"; + return; + } + + #return if grep (/<{$2}; + + if (not defined $val) + { + LogError "Value $2 not defined using #define directive"; + } + elsif (not $val =~ /^0x[0-9a-f]+$/i) + { + LogError "$val not in hex format 0xYY"; + } + else + { + for my $i (0..$idx) + { + if ($$arr_ref[$i] eq $first) + { + $ini = sprintf("0x%08x", hex(@$ini_ref[$i]) + hex($val)); + + $previousEnumValue = hex($ini); + last; + } + } + + LogError "initializer $ini not found on $enumTypeName before $$arr_ref[$idx]" if not $ini =~ /^0x/; + } + } + elsif ($ini =~/^= (SAI_\w+) \+ (0x[0-9a-f]{1,8})$/) + { + my $first = $1; + my $val = $2; + + for my $i (0..$idx) + { + if ($$arr_ref[$i] eq $first) + { + $ini = sprintf("0x%08x", hex(@$ini_ref[$i]) + hex($val)); + + $previousEnumValue = hex($ini); + last; + } + } + + LogError "initializer $ini not found on $enumTypeName before $$arr_ref[$idx]" if not $ini =~ /^0x/; + } + elsif ($ini =~ /^= \(?(\d+) << (\d+)\)?$/) + { + $previousEnumValue = $1 << $2; + + $ini = sprintf("0x%08x", $previousEnumValue); + } + else + { + LogError "not supported initializer '$ini' on $$arr_ref[$idx], FIXME"; + } + + $idx++; + } + + # in final form all initializers must be hex numbers 8 digits long, since + # they will be used in stable sort + + if (scalar(grep (/^0x[0-9a-f]{8}$/, @$ini_ref)) != scalar(@$ini_ref)) + { + LogError "wrong initializers on $enumTypeName: @$ini_ref"; + return; + } + + my $before = "@$arr_ref"; + + my @joined = (); + + for my $idx (0..$#$arr_ref) + { + push @joined, "$$ini_ref[$idx]$$arr_ref[$idx]"; # format is: 0x00000000SAI_ + } + + my @sorted = sort { substr($a, 0, 10) cmp substr($b, 0, 10) } @joined; + + s/^0x[0-9a-f]{8}SAI/SAI/i for @sorted; + + my $after = "@sorted"; + + return if $after eq $before; + + LogDebug "Need sort initalizers for $enumTypeName"; + + @$arr_ref = (); + + push @$arr_ref, @sorted; +} + + BEGIN { our @ISA = qw(Exporter); @@ -380,7 +552,7 @@ BEGIN LogDebug LogInfo LogWarning LogError WriteFile GetHeaderFiles GetMetaHeaderFiles GetExperimentalHeaderFiles GetMetadataSourceFiles ReadHeaderFile GetNonObjectIdStructNames IsSpecialObject GetStructLists GetStructKeysInOrder - Trim ExitOnErrors + Trim ExitOnErrors ExitOnErrorsOrWarnings ProcessEnumInitializers WriteHeader WriteSource WriteTest WriteSwig WriteMetaDataFiles WriteSectionComment $errors $warnings $NUMBER_REGEX $HEADER_CONTENT $SOURCE_CONTENT $TEST_CONTENT diff --git a/test/saithrift/Makefile b/test/saithrift/Makefile index 57a5e8193b..cbe6f4823f 100644 --- a/test/saithrift/Makefile +++ b/test/saithrift/Makefile @@ -35,7 +35,7 @@ CTYPESGEN = /usr/local/bin/ctypesgen.py endif LIBS = -lthrift -lpthread ifeq ($(platform),vs) -LIBS += -lsaivs -lsaimeta -lsaimetadata +LIBS += -lsaivs -lsaimeta -lsaimetadata -lzmq else LIBS += -lsai endif