Skip to content

Commit

Permalink
SAI Periodic and Timeslice telemetry
Browse files Browse the repository at this point in the history
Signed-off-by: Jason Bos <[email protected]>
  • Loading branch information
j-bos committed Dec 15, 2022
1 parent e6b1f3f commit af41a7c
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 3 deletions.
Binary file not shown.
68 changes: 66 additions & 2 deletions inc/saitam.h
Original file line number Diff line number Diff line change
Expand Up @@ -891,7 +891,13 @@ typedef enum _sai_tam_telemetry_type_t
* @brief INT TAM
* All the data relevant on a per packet basis
*/
SAI_TAM_TELEMETRY_TYPE_INT
SAI_TAM_TELEMETRY_TYPE_INT,

/**
* @brief Object Stat
* Collect specific statistics for requested object-types
*/
SAI_TAM_TELEMETRY_TYPE_OBJECT_STAT,

} sai_tam_telemetry_type_t;

Expand Down Expand Up @@ -1052,6 +1058,15 @@ typedef enum _sai_tam_tel_type_attr_t
*/
SAI_TAM_TEL_TYPE_ATTR_REPORT_ID,

/**
* @brief Tam list of stats to collect
*
* @type sai_object_stat_list_t
* @flags CREATE_AND_SET
* @default empty
*/
SAI_TAM_TEL_TYPE_ATTR_OBJECT_STATS,

/**
* @brief End of Attributes
*/
Expand Down Expand Up @@ -1160,6 +1175,12 @@ typedef enum _sai_tam_report_type_t
* @brief Report using vendor extensions
*/
SAI_TAM_REPORT_TYPE_VENDOR_EXTN,

/**
* @brief Report using time slice
*/
SAI_TAM_REPORT_TYPE_TIMESLICE,

} sai_tam_report_type_t;

/**
Expand All @@ -1175,6 +1196,28 @@ typedef enum _sai_tam_report_mode_t

} sai_tam_report_mode_t;

/**
* @brief TAM report interval units
*/
typedef enum _sai_tam_report_interval_unit_t
{
/**
* @brief Report interval unit nanosecond
*/
SAI_TAM_REPORT_INTERVAL_UNIT_NANOSEC,

/**
* @brief Report interval unit microsecond
*/
SAI_TAM_REPORT_INTERVAL_UNIT_USEC,

/**
* @brief Report interval unit millisecond
*/
SAI_TAM_REPORT_INTERVAL_UNIT_MSEC,

} sai_tam_report_interval_unit_t;

/**
* @brief Attributes for TAM report
*/
Expand Down Expand Up @@ -1239,7 +1282,7 @@ typedef enum _sai_tam_report_attr_t
SAI_TAM_REPORT_ATTR_REPORT_MODE,

/**
* @brief Report Interval in micro seconds
* @brief Report Interval
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
Expand Down Expand Up @@ -1268,6 +1311,26 @@ typedef enum _sai_tam_report_attr_t
*/
SAI_TAM_REPORT_ATTR_TEMPLATE_REPORT_INTERVAL,

/**
* @brief Report Interval Units
*
* @type sai_tam_report_interval_unit_t
* @flags CREATE_AND_SET
* @default SAI_TAM_REPORT_INTERVAL_UNIT_USEC
* @validonly SAI_TAM_REPORT_ATTR_REPORT_MODE == SAI_TAM_REPORT_MODE_BULK
*/
SAI_TAM_REPORT_ATTR_REPORT_INTERVAL_UNIT,

/**
* @brief Number of time slices per report
*
* @type sai_uint32_t
* @flags CREATE_ONLY
* @default 0
* @validonly SAI_TAM_REPORT_ATTR_TYPE == SAI_TAM_REPORT_TYPE_TIMESLICE
*/
SAI_TAM_REPORT_ATTR_NUMBER_OF_TIMESLICES,

/**
* @brief End of Attributes
*/
Expand Down Expand Up @@ -1858,6 +1921,7 @@ typedef enum _sai_tam_event_type_t
* @brief Buffer service pool threshold event
*/
SAI_TAM_EVENT_TYPE_BSP,

} sai_tam_event_type_t;

/**
Expand Down
20 changes: 20 additions & 0 deletions inc/saitypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -1194,6 +1194,23 @@ typedef struct _sai_port_err_status_list_t
sai_port_err_status_t *list;
} sai_port_err_status_list_t;

typedef struct _sai_object_stat_id_t
{
/** Object type */
sai_object_type_t object_type;

/** Stat enum value */
sai_stat_id_t stat_enum;

} sai_object_stat_id_t;

typedef struct _sai_object_stat_list_t
{
uint32_t count;
sai_object_stat_id_t *list;

} sai_object_stat_list_t;

/**
* @brief Data Type
*
Expand Down Expand Up @@ -1377,6 +1394,9 @@ typedef union _sai_attribute_value_t

/** @validonly meta->attrvaluetype == SAI_ATTR_VALUE_TYPE_IP_PREFIX_LIST */
sai_ip_prefix_list_t ipprefixlist;

/** @validonly meta->attrvaluetype == SAI_ATTR_VALUE_TYPE_OBJECT_STAT_LIST */
sai_object_stat_list_t objectstatlist;
} sai_attribute_value_t;

/**
Expand Down
2 changes: 1 addition & 1 deletion meta/parse.pl
Original file line number Diff line number Diff line change
Expand Up @@ -3974,7 +3974,7 @@ sub ProcessStructItem

return if $type eq "bool";

return if $type =~ /^sai_(u?int\d+|ip[46]|mac|cos|vlan_id|queue_index)_t/; # primitives, we could get that from defines
return if $type =~ /^sai_(u?int\d+|ip[46]|mac|cos|vlan_id|queue_index|stat_id)_t/; # primitives, we could get that from defines
return if $type =~ /^u?int\d+_t/;
return if $type =~ /^sai_[su]\d+_list_t/;

Expand Down
6 changes: 6 additions & 0 deletions meta/saimetadatatypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,12 @@ typedef enum _sai_attr_value_type_t
* @brief Attribute value is IP prefix list.
*/
SAI_ATTR_VALUE_TYPE_IP_PREFIX_LIST,

/**
* @brief Attribute value is an object stat list.
*/
SAI_ATTR_VALUE_TYPE_OBJECT_STAT_LIST,

} sai_attr_value_type_t;

/**
Expand Down
6 changes: 6 additions & 0 deletions meta/saisanitycheck.c
Original file line number Diff line number Diff line change
Expand Up @@ -670,6 +670,7 @@ void check_attr_object_type_provided(
case SAI_ATTR_VALUE_TYPE_PORT_LANE_LATCH_STATUS_LIST:
case SAI_ATTR_VALUE_TYPE_TIMESPEC:
case SAI_ATTR_VALUE_TYPE_JSON:
case SAI_ATTR_VALUE_TYPE_OBJECT_STAT_LIST:

case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_BOOL:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8:
Expand Down Expand Up @@ -970,6 +971,7 @@ void check_attr_default_required(
case SAI_ATTR_VALUE_TYPE_PORT_EYE_VALUES_LIST:
case SAI_ATTR_VALUE_TYPE_PORT_LANE_LATCH_STATUS_LIST:
case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
case SAI_ATTR_VALUE_TYPE_OBJECT_STAT_LIST:

if (((md->objecttype == SAI_OBJECT_TYPE_PORT) || (md->objecttype == SAI_OBJECT_TYPE_PORT_SERDES))
&& md->defaultvaluetype == SAI_DEFAULT_VALUE_TYPE_SWITCH_INTERNAL)
Expand Down Expand Up @@ -1178,6 +1180,7 @@ void check_attr_default_value_type(
case SAI_ATTR_VALUE_TYPE_PORT_EYE_VALUES_LIST:
case SAI_ATTR_VALUE_TYPE_PORT_LANE_LATCH_STATUS_LIST:
case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
case SAI_ATTR_VALUE_TYPE_OBJECT_STAT_LIST:
break;

default:
Expand Down Expand Up @@ -1781,6 +1784,7 @@ void check_attr_allow_flags(
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
case SAI_ATTR_VALUE_TYPE_PORT_ERR_STATUS_LIST:
case SAI_ATTR_VALUE_TYPE_OBJECT_STAT_LIST:
break;

default:
Expand Down Expand Up @@ -2625,6 +2629,8 @@ void check_attr_is_primitive(
case SAI_ATTR_VALUE_TYPE_PORT_LANE_LATCH_STATUS_LIST:
case SAI_ATTR_VALUE_TYPE_JSON:
case SAI_ATTR_VALUE_TYPE_IP_PREFIX_LIST:
case SAI_ATTR_VALUE_TYPE_OBJECT_STAT_LIST:


if (md->isprimitive)
{
Expand Down

0 comments on commit af41a7c

Please sign in to comment.