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 (/<, @$ini_ref); # skip shifted flags enum
-
- my $previousEnumValue = -1;
-
- my $idx = 0;
-
- # using reference here, will cause update $ini inside initializer table
- # reference and that's what we want
-
- for my $ini (@$ini_ref)
- {
- if ($ini eq "")
- {
- $previousEnumValue += 1;
-
- $ini = sprintf("0x%08x", $previousEnumValue);
- }
- elsif ($ini =~ /^= (0x[0-9a-f]{8})$/)
- {
- $previousEnumValue = hex($1);
-
- $ini = sprintf("0x%08x", $previousEnumValue);
- }
- elsif ($ini =~ /^=\s+(\d+)$/)
- {
- $previousEnumValue = hex($1);
-
- $ini = sprintf("0x%08x", $previousEnumValue);
- }
- elsif ($ini =~ /= (SAI_\w+)$/)
- {
- for my $i (0..$idx)
- {
- if ($$arr_ref[$i] eq $1)
- {
- $ini = @$ini_ref[$i];
-
- $previousEnumValue = hex($ini);
- last;
- }
- }
-
- LogError "initializer $ini not found on $enumTypeName before $$arr_ref[$idx]" if not $ini =~ /^0x/;
- }
- elsif ($ini =~ /^= (SAI_\w+) \+ (SAI_\w+)$/) # special case SAI_ACL_USER_DEFINED_FIELD_ATTR_ID_RANGE
- {
- # this case is in form: = (sai enum value) + (sai define)
-
- my $first = $1;
-
- my $val = $SAI_DEFINES{$2};
-
- if (not defined $val)
- {
- LogError "$val 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/;
- }
- 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;
-
- LogInfo "Need sort initalizers for $enumTypeName";
-
- @$arr_ref = ();
-
- push @$arr_ref, @sorted;
-}
-
sub ProcessEnumSection
{
my $section = shift;
@@ -772,7 +616,7 @@ sub ProcessEnumSection
}
}
- ProcessEnumInitializers(\@arr,\@initializers, $enumtypename);
+ ProcessEnumInitializers(\@arr,\@initializers, $enumtypename, \%SAI_DEFINES);
# TODO stable sort values based on calculated values from initializer (https://perldoc.perl.org/sort)
# TODO add param to disable this
@@ -4025,6 +3869,14 @@ sub ProcessStructItem
$ProcessedItems{$item} = 1;
}
+
+ my $count = scalar(keys %S);
+ my @k = sort keys %S;
+
+ if ($type =~ /^sai_(\w+)_list_t$/ and $count != 2)
+ {
+ LogError "lists must contain 2 elements (count, list), but $type has $count (@k), it's not a list then, fix this";
+ }
}
sub CheckAttributeValueUnion
@@ -4144,6 +3996,28 @@ sub CreateNotificationEnum
CreateEnumHelperMethod("sai_switch_notification_type_t");
}
+sub CreateNotificationNames
+{
+ #
+ # create notification names to have string representation
+ #
+
+ WriteSectionComment "SAI notifications names";
+
+ for my $name (sort keys %NOTIFICATIONS)
+ {
+ if (not $name =~ /^sai_(\w+)_notification_fn/)
+ {
+ LogWarning "notification function '$name' is not ending on _notification_fn";
+ next;
+ }
+
+ $name = uc $1;
+
+ WriteHeader "#define SAI_SWITCH_NOTIFICATION_NAME_$name \"$1\"";
+ }
+}
+
sub CreateSwitchNotificationAttributesList
{
#
@@ -4755,6 +4629,8 @@ sub CreateDefineMaxConditionsLen
CreateNotificationEnum();
+CreateNotificationNames();
+
CreateSwitchNotificationAttributesList();
CreateSwitchPointersStruct();
diff --git a/meta/saisanitycheck.c b/meta/saisanitycheck.c
index dded2869a1..8c1681605c 100644
--- a/meta/saisanitycheck.c
+++ b/meta/saisanitycheck.c
@@ -4995,7 +4995,7 @@ void check_get_attr_metadata()
void check_acl_user_defined_field()
{
- SAI_META_LOG_ENTER();
+ META_LOG_ENTER();
META_ASSERT_TRUE(SAI_ACL_USER_DEFINED_FIELD_ATTR_ID_RANGE > 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 (/<, @$ini_ref); # skip shifted flags enum
+
+ my $previousEnumValue = -1;
+
+ my $idx = 0;
+
+ # using reference here, will cause update $ini inside initializer table
+ # reference and that's what we want
+
+ for my $ini (@$ini_ref)
+ {
+ if ($ini eq "")
+ {
+ $previousEnumValue += 1;
+
+ $ini = sprintf("0x%08x", $previousEnumValue);
+ }
+ elsif ($ini =~ /^= (0x[0-9a-f]{8})$/)
+ {
+ $previousEnumValue = hex($1);
+
+ $ini = sprintf("0x%08x", $previousEnumValue);
+ }
+ elsif ($ini =~ /^=\s+(\d+)$/)
+ {
+ $previousEnumValue = hex($1);
+
+ $ini = sprintf("0x%08x", $previousEnumValue);
+ }
+ elsif ($ini =~ /= (SAI_\w+)$/)
+ {
+ for my $i (0..$idx)
+ {
+ if ($$arr_ref[$i] eq $1)
+ {
+ $ini = @$ini_ref[$i];
+
+ $previousEnumValue = hex($ini);
+ last;
+ }
+ }
+
+ LogError "initializer $ini not found on $enumTypeName before $$arr_ref[$idx]" if not $ini =~ /^0x/;
+ }
+ elsif ($ini =~ /^= (SAI_\w+) \+ (SAI_\w+)$/) # special case SAI_ACL_USER_DEFINED_FIELD_ATTR_ID_RANGE
+ {
+ # this case is in form: = (sai enum value) + (sai define)
+
+ my $first = $1;
+
+ my $val = $SAI_DEFINES_REF->{$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