diff --git a/inc/saiacl.h b/inc/saiacl.h index c1f2d274f..48ec1284e 100644 --- a/inc/saiacl.h +++ b/inc/saiacl.h @@ -1579,10 +1579,73 @@ typedef enum _sai_acl_table_attr_t */ SAI_ACL_TABLE_ATTR_FIELD_DST_PREFIX_META = SAI_ACL_TABLE_ATTR_FIELD_START + 0x161, + /** + * @brief EtherType + * + * @type bool + * @flags CREATE_ONLY + * @default false + */ + SAI_ACL_TABLE_ATTR_FIELD_CSIG_COMPACT_ETHER_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x162, + + /** + * @brief EtherType + * + * @type bool + * @flags CREATE_ONLY + * @default false + */ + SAI_ACL_TABLE_ATTR_FIELD_CSIG_WIDE_ETHER_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x163, + + /** + * @brief CSIG ABW Signal + * + * @type bool + * @flags CREATE_ONLY + * @default false + */ + SAI_ACL_TABLE_ATTR_FIELD_CSIG_ABW = SAI_ACL_TABLE_ATTR_FIELD_START + 0x164, + + /** + * @brief CSIG ABW/C Signal + * + * @type bool + * @flags CREATE_ONLY + * @default false + */ + SAI_ACL_TABLE_ATTR_FIELD_CSIG_ABW_C = SAI_ACL_TABLE_ATTR_FIELD_START + 0x165, + + /** + * @brief CSIG Delay Signal + * + * @type bool + * @flags CREATE_ONLY + * @default false + */ + SAI_ACL_TABLE_ATTR_FIELD_CSIG_DELAY = SAI_ACL_TABLE_ATTR_FIELD_START + 0x166, + + /** + * @brief CSIG NQD Signal + * + * @type bool + * @flags CREATE_ONLY + * @default false + */ + SAI_ACL_TABLE_ATTR_FIELD_CSIG_NQD = SAI_ACL_TABLE_ATTR_FIELD_START + 0x167, + + /** + * @brief CSIG TRIM Bit D + * + * @type bool + * @flags CREATE_ONLY + * @default false + */ + SAI_ACL_TABLE_ATTR_FIELD_CSIG_D = SAI_ACL_TABLE_ATTR_FIELD_START + 0x168, + /** * @brief End of ACL Table Match Field */ - SAI_ACL_TABLE_ATTR_FIELD_END = SAI_ACL_TABLE_ATTR_FIELD_DST_PREFIX_META, + SAI_ACL_TABLE_ATTR_FIELD_END = SAI_ACL_TABLE_ATTR_FIELD_CSIG_D, /** * @brief ACL table entries associated with this table. @@ -2707,10 +2770,75 @@ typedef enum _sai_acl_entry_attr_t */ SAI_ACL_ENTRY_ATTR_FIELD_DST_PREFIX_META = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x161, + /** + * @brief CSIG Compact Ether Type + * + * @type sai_acl_field_data_t sai_uint16_t + * @flags CREATE_AND_SET + * @isvlan false + * @default disabled + */ + SAI_ACL_ENTRY_ATTR_FIELD_CSIG_COMPACT_ETHER_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x162, + + /** + * @brief CSIG Wide Ether Type + * + * @type sai_acl_field_data_t sai_uint16_t + * @flags CREATE_AND_SET + * @isvlan false + * @default disabled + */ + SAI_ACL_ENTRY_ATTR_FIELD_CSIG_WIDE_ETHER_TYPE = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x163, + + /** + * @brief CSIG ABW Signal + * + * @type sai_acl_field_data_t sai_uint8_t + * @flags CREATE_AND_SET + * @default disabled + */ + SAI_ACL_ENTRY_ATTR_FIELD_CSIG_ABW = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x164, + + /** + * @brief CSIG ABW/C Signal + * + * @type sai_acl_field_data_t sai_uint8_t + * @flags CREATE_AND_SET + * @default disabled + */ + SAI_ACL_ENTRY_ATTR_FIELD_CSIG_ABW_C = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x165, + + /** + * @brief CSIG Delay Signal + * + * @type sai_acl_field_data_t sai_uint8_t + * @flags CREATE_AND_SET + * @default disabled + */ + SAI_ACL_ENTRY_ATTR_FIELD_CSIG_DELAY = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x166, + + /** + * @brief CSIG NQD Signal + * + * @type sai_acl_field_data_t sai_uint8_t + * @flags CREATE_AND_SET + * @default disabled + */ + SAI_ACL_ENTRY_ATTR_FIELD_CSIG_NQD = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x167, + + /** + * @brief CSIG TRIM Bit D + * + * @type sai_acl_field_data_t bool + * @flags CREATE_AND_SET + * @default disabled + */ + SAI_ACL_ENTRY_ATTR_FIELD_CSIG_D = SAI_ACL_ENTRY_ATTR_FIELD_START + 0x168, + /** * @brief End of Rule Match Fields */ - SAI_ACL_ENTRY_ATTR_FIELD_END = SAI_ACL_ENTRY_ATTR_FIELD_DST_PREFIX_META, + SAI_ACL_ENTRY_ATTR_FIELD_END = SAI_ACL_ENTRY_ATTR_FIELD_CSIG_D, /* * Actions [sai_acl_action_data_t] diff --git a/inc/saiport.h b/inc/saiport.h index ae7196fbb..27918345b 100644 --- a/inc/saiport.h +++ b/inc/saiport.h @@ -2687,6 +2687,15 @@ typedef enum _sai_port_attr_t */ SAI_PORT_ATTR_PAM4_EYE_VALUES, + /** + * @brief Enable INT metadata deletion + * + * @type bool + * @flags CREATE_AND_SET + * @default false + */ + SAI_PORT_ATTR_INT_DELETE, + /** * @brief End of attributes */ diff --git a/inc/saitam.h b/inc/saitam.h index 3e16ab418..9df90e39a 100644 --- a/inc/saitam.h +++ b/inc/saitam.h @@ -481,6 +481,16 @@ typedef enum _sai_tam_int_type_t */ SAI_TAM_INT_TYPE_PATH_TRACING, + /** + * @brief INT type Congestion Signalling compact tag + */ + SAI_TAM_INT_TYPE_CSIG_COMPACT, + + /** + * @brief INT type Congestion Signalling wide tag + */ + SAI_TAM_INT_TYPE_CSIG_WIDE, + } sai_tam_int_type_t; /** @@ -509,8 +519,12 @@ typedef enum _sai_tam_int_presence_type_t /** * @brief INT presence type DSCP */ - SAI_TAM_INT_PRESENCE_TYPE_DSCP + SAI_TAM_INT_PRESENCE_TYPE_DSCP, + /** + * @brief INT presence type Ether Type Code Point + */ + SAI_TAM_INT_PRESENCE_TYPE_ETH_TYPE, } sai_tam_int_presence_type_t; /** @@ -798,6 +812,237 @@ typedef enum _sai_tam_int_attr_t */ SAI_TAM_INT_ATTR_REPORT_ID, + /** + * @brief Ethernet code point value that indicates presence of CSIG compact tag in a packet + * + * @type sai_uint16_t + * @flags MANDATORY_ON_CREATE | CREATE_ONLY + * @isvlan false + * @condition SAI_TAM_INT_ATTR_INT_PRESENCE_TYPE == SAI_TAM_INT_PRESENCE_TYPE_ETH_TYPE and SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT + */ + SAI_TAM_INT_ATTR_ETH_TYPE_CSIG_COMPACT, + + /** + * @brief Ethernet code point value that indicates presence of CSIG wide tag in a packet + * + * @type sai_uint16_t + * @flags MANDATORY_ON_CREATE | CREATE_ONLY + * @isvlan false + * @condition SAI_TAM_INT_ATTR_INT_PRESENCE_TYPE == SAI_TAM_INT_PRESENCE_TYPE_ETH_TYPE and SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_ETH_TYPE_CSIG_WIDE, + + /** + * @brief Enable min available bandwidth signal: min(ABW) + * + * @type bool + * @flags CREATE_AND_SET + * @default false + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT or SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_CSIG_MIN_ABW, + + /** + * @brief Enable relative min available bandwidth signal: min(ABW/C) + * + * @type bool + * @flags CREATE_AND_SET + * @default false + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT or SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_CSIG_MIN_ABW_C, + + /** + * @brief Enable maximum per hop delay signal: max(Delay) + * + * @type bool + * @flags CREATE_AND_SET + * @default false + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT or SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_CSIG_MAX_HOP_DELAY, + + /** + * @brief Enable maximum per hop normalized queue delay signal: max(NQD) + * + * @type bool + * @flags CREATE_AND_SET + * @default false + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT or SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_CSIG_MAX_NQD, + + /** + * @brief Strip the CSIG header and forward the packet + * + * @type bool + * @flags CREATE_AND_SET + * @default false + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT or SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_CSIG_STRIP_AND_FORWARD, + + /** + * @brief Update the D bit indicating the packet is trimmed + * DSCP value configured for TRIM packets comes from the TRIM configuration + * + * @type bool + * @flags CREATE_AND_SET + * @default false + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT or SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_CSIG_D_BIT, + + /** + * @brief Time interval for bandwidth computation in nanosecond + * + * @type sai_uint32_t + * @flags CREATE_AND_SET + * @default 256 + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT or SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_BW_TIME_INTERVAL, + + /** + * @brief Number of quantization bands support for compact CSIG tag + * + * @type sai_uint32_t + * @flags CREATE_AND_SET + * @default 32 + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT + */ + SAI_TAM_INT_ATTR_COMPACT_QUANT_BANDS, + + /** + * @brief Number of quantization bands support for wide CSIG tag + * + * @type sai_uint32_t + * @flags CREATE_AND_SET + * @default 1048576 + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_WIDE_QUANT_BANDS, + + /** + * @brief Quantization band range values for ABW signal. This is applicable only if ABW signal is enabled. + * + * @type sai_u32_range_list_t + * @flags CREATE_AND_SET + * @default empty + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT + */ + SAI_TAM_INT_ATTR_ABW_QUANT_BAND_UINT32_RANGE_LIST, + + /** + * @brief Quantization band range values for ABW/C signal. This is applicable only if ABW/C signal is enabled. + * + * @type sai_u32_range_list_t + * @flags CREATE_AND_SET + * @default empty + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT + */ + SAI_TAM_INT_ATTR_ABW_C_QUANT_BAND_UINT32_RANGE_LIST, + + /** + * @brief Quantization band range values for delay signal. This is applicable only if delay signal is enabled. + * + * @type sai_u32_range_list_t + * @flags CREATE_AND_SET + * @default empty + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT + */ + SAI_TAM_INT_ATTR_HOP_DELAY_QUANT_BAND_UINT32_RANGE_LIST, + + /** + * @brief Quantization band range values for queue depth signal. This is applicable only if queue depth is enabled. + * + * @type sai_u32_range_list_t + * @flags CREATE_AND_SET + * @default empty + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_COMPACT + */ + SAI_TAM_INT_ATTR_HOP_NQD_QUANT_BAND_UINT32_RANGE_LIST, + + /** + * @brief Base value for CSIG wide tag ABW signal quantization. Must be power of 2 + * + * @type sai_uint32_t + * @flags CREATE_AND_SET + * @default 0 + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_WIDE_ABW_QUANT_BASE_VALUE, + + /** + * @brief Step value for CSIG wide tag ABW signal quantization. Must be power of 2 + * + * @type sai_uint32_t + * @flags CREATE_AND_SET + * @default 0 + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_WIDE_ABW_QUANT_STEP_VALUE, + + /** + * @brief Base value for CSIG wide tag ABW/C signal quantization. Must be power of 2 + * + * @type sai_uint32_t + * @flags CREATE_AND_SET + * @default 0 + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_WIDE_ABW_C_QUANT_BASE_VALUE, + + /** + * @brief Step value for CSIG wide tag ABW/C signal quantization. Must be power of 2 + * + * @type sai_uint32_t + * @flags CREATE_AND_SET + * @default 0 + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_WIDE_ABW_C_QUANT_STEP_VALUE, + + /** + * @brief Base value for CSIG wide tag delay signal quantization. Must be power of 2 + * + * @type sai_uint32_t + * @flags CREATE_AND_SET + * @default 0 + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_WIDE_HOP_DELAY_QUANT_BASE_VALUE, + + /** + * @brief Step value for CSIG wide tag delay signal quantization. Must be power of 2 + * + * @type sai_uint32_t + * @flags CREATE_AND_SET + * @default 0 + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_WIDE_HOP_DELAY_QUANT_STEP_VALUE, + + /** + * @brief Base value for CSIG wide tag queue depth signal quantization. Must be power of 2 + * + * @type sai_uint32_t + * @flags CREATE_AND_SET + * @default 0 + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_WIDE_NQD_QUANT_BASE_VALUE, + + /** + * @brief Step value for CSIG wide tag queue depth signal quantization. Must be power of 2 + * + * @type sai_uint32_t + * @flags CREATE_AND_SET + * @default 0 + * @validonly SAI_TAM_INT_ATTR_TYPE == SAI_TAM_INT_TYPE_CSIG_WIDE + */ + SAI_TAM_INT_ATTR_WIDE_NQD_QUANT_STEP_VALUE, + /** * @brief End of Attributes */ diff --git a/inc/saitypes.h b/inc/saitypes.h index 066bcac64..e930bc93b 100644 --- a/inc/saitypes.h +++ b/inc/saitypes.h @@ -379,6 +379,12 @@ typedef struct _sai_u16_range_list_t sai_u16_range_t *list; } sai_u16_range_list_t; +typedef struct _sai_u32_range_list_t +{ + uint32_t count; + sai_u32_range_t *list; +} sai_u32_range_list_t; + /** * @brief Defines a vlan list data structure */ @@ -1593,6 +1599,9 @@ typedef union _sai_attribute_value_t /** @validonly meta->attrvaluetype == SAI_ATTR_VALUE_TYPE_UINT16_RANGE_LIST */ sai_u16_range_list_t u16rangelist; + /** @validonly meta->attrvaluetype == SAI_ATTR_VALUE_TYPE_UINT32_RANGE_LIST */ + sai_u32_range_list_t u32rangelist; + /** @validonly meta->attrvaluetype == SAI_ATTR_VALUE_TYPE_VLAN_LIST */ sai_vlan_list_t vlanlist; diff --git a/meta/acronyms.txt b/meta/acronyms.txt index 8ff0c0530..9b0777d06 100644 --- a/meta/acronyms.txt +++ b/meta/acronyms.txt @@ -1,4 +1,5 @@ # this file defines acronyms, one acronym per line +ABW - Available Bandwidth ACL - Access Control List AES - Advanced Encryption Standard AN - Association Number @@ -27,6 +28,7 @@ CMIS - Common Management Interface Specification CPLD - Complex programmable logic device CPU - Central Processing Unit CRC - Cyclic Redundancy Code +CSIG - Congestion Signaling DHCP - Dynamic Host Configuration Protocol DHCPV6 - Dynamic Host Configuration Protocol for IPv6 DLD - Dead Lock Detection @@ -101,6 +103,7 @@ NAPT - Network Address Port Translation NHLFE - Next Hop Label Forwarding Entry NMOS - N-channel Metal Oxide Semiconductor NPU - Numeric Processing Unit +NQD - Normalized Queue Depth NRZ - Non Return to Zero NTPCLIENT - Network Time Protocol Client NTPSERVER - Network Time Protocol Server diff --git a/meta/saimetadatatypes.h b/meta/saimetadatatypes.h index 9643e2c1c..4b2dd4701 100644 --- a/meta/saimetadatatypes.h +++ b/meta/saimetadatatypes.h @@ -500,6 +500,12 @@ typedef enum _sai_attr_value_type_t * @brief Attribute value is port PAM4 eye values list. */ SAI_ATTR_VALUE_TYPE_PORT_PAM4_EYE_VALUES_LIST, + + /** + * @brief Attribute value is 32 bit unsigned integer range list. + */ + SAI_ATTR_VALUE_TYPE_UINT32_RANGE_LIST, + } sai_attr_value_type_t; /** diff --git a/meta/saisanitycheck.c b/meta/saisanitycheck.c index 709479429..7197c46ba 100644 --- a/meta/saisanitycheck.c +++ b/meta/saisanitycheck.c @@ -791,6 +791,7 @@ void check_attr_object_type_provided( case SAI_ATTR_VALUE_TYPE_UINT32_RANGE: case SAI_ATTR_VALUE_TYPE_UINT16_RANGE_LIST: case SAI_ATTR_VALUE_TYPE_UINT32_LIST: + case SAI_ATTR_VALUE_TYPE_UINT32_RANGE_LIST: case SAI_ATTR_VALUE_TYPE_QOS_MAP_LIST: case SAI_ATTR_VALUE_TYPE_MAP_LIST: case SAI_ATTR_VALUE_TYPE_ACL_CAPABILITY: @@ -1161,6 +1162,15 @@ void check_attr_default_required( META_MD_ASSERT_FAIL(md, "default value list is needed on this attr value type but list is NULL"); + case SAI_ATTR_VALUE_TYPE_UINT32_RANGE_LIST: + + if (md->defaultvaluetype == SAI_DEFAULT_VALUE_TYPE_EMPTY_LIST) + { + break; + } + + META_MD_ASSERT_FAIL(md, "default value list is needed on this attr value type but list is NULL"); + case SAI_ATTR_VALUE_TYPE_POINTER: /* @@ -1306,6 +1316,7 @@ void check_attr_default_value_type( switch (md->attrvaluetype) { + case SAI_ATTR_VALUE_TYPE_UINT32_RANGE_LIST: case SAI_ATTR_VALUE_TYPE_UINT32_LIST: case SAI_ATTR_VALUE_TYPE_INT32_LIST: case SAI_ATTR_VALUE_TYPE_UINT8_LIST: @@ -2067,6 +2078,7 @@ void check_attr_allow_flags( case SAI_ATTR_VALUE_TYPE_INT32_LIST: case SAI_ATTR_VALUE_TYPE_VLAN_LIST: case SAI_ATTR_VALUE_TYPE_UINT32_LIST: + case SAI_ATTR_VALUE_TYPE_UINT32_RANGE_LIST: case SAI_ATTR_VALUE_TYPE_QOS_MAP_LIST: case SAI_ATTR_VALUE_TYPE_MAP_LIST: case SAI_ATTR_VALUE_TYPE_ACL_RESOURCE_LIST: @@ -2974,6 +2986,7 @@ void check_attr_is_primitive( case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST: case SAI_ATTR_VALUE_TYPE_PORT_ERR_STATUS_LIST: case SAI_ATTR_VALUE_TYPE_UINT16_RANGE_LIST: + case SAI_ATTR_VALUE_TYPE_UINT32_RANGE_LIST: case SAI_ATTR_VALUE_TYPE_PORT_LANE_LATCH_STATUS_LIST: case SAI_ATTR_VALUE_TYPE_JSON: case SAI_ATTR_VALUE_TYPE_IP_PREFIX_LIST: