inc/saibridge.h (169 lines of code) (raw):

/** * Copyright (c) 2014 Microsoft Open Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may obtain * a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT * LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS * FOR A PARTICULAR PURPOSE, MERCHANTABILITY OR NON-INFRINGEMENT. * * See the Apache Version 2.0 License for specific language governing * permissions and limitations under the License. * * Microsoft would like to thank the following companies for their review and * assistance with these files: Intel Corporation, Mellanox Technologies Ltd, * Dell Products, L.P., Facebook, Inc., Marvell International Ltd. * * @file saibridge.h * * @brief This module defines SAI Bridge */ #if !defined (__SAIBRIDGE_H_) #define __SAIBRIDGE_H_ #include <saitypes.h> /** * @defgroup SAIBRIDGE SAI - Bridge specific API definitions * * @{ */ /** * @brief Attribute data for #SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_MODE */ typedef enum _sai_bridge_port_fdb_learning_mode_t { /** Drop packets with unknown source MAC. Do not learn. Do not forward */ SAI_BRIDGE_PORT_FDB_LEARNING_MODE_DROP, /** Do not learn unknown source MAC. Forward based on destination MAC */ SAI_BRIDGE_PORT_FDB_LEARNING_MODE_DISABLE, /** Hardware learning. Learn source MAC. Forward based on destination MAC */ SAI_BRIDGE_PORT_FDB_LEARNING_MODE_HW, /** Trap packets with unknown source MAC to CPU. Do not learn. Do not forward */ SAI_BRIDGE_PORT_FDB_LEARNING_MODE_CPU_TRAP, /** Trap packets with unknown source MAC to CPU. Do not learn. Forward based on destination MAC */ SAI_BRIDGE_PORT_FDB_LEARNING_MODE_CPU_LOG, /** * @brief Notify unknown source MAC using FDB callback. * * Do not learn in hardware. Do not forward. When a packet from unknown * source MAC comes this mode will trigger a new learn notification via FDB * callback for the MAC address. This mode will generate only one * notification per unknown source MAC to FDB callback. */ SAI_BRIDGE_PORT_FDB_LEARNING_MODE_FDB_NOTIFICATION, } sai_bridge_port_fdb_learning_mode_t; /** * @brief Attribute data for #SAI_BRIDGE_PORT_ATTR_TYPE */ typedef enum _sai_bridge_port_type_t { /** Port or LAG or System Port */ SAI_BRIDGE_PORT_TYPE_PORT, /** Port or LAG.vlan */ SAI_BRIDGE_PORT_TYPE_SUB_PORT, /** Bridge router port */ SAI_BRIDGE_PORT_TYPE_1Q_ROUTER, /** Bridge router port */ SAI_BRIDGE_PORT_TYPE_1D_ROUTER, /** Bridge tunnel port */ SAI_BRIDGE_PORT_TYPE_TUNNEL, } sai_bridge_port_type_t; /** * @brief Attribute data for #SAI_BRIDGE_PORT_ATTR_TAGGING_MODE */ typedef enum _sai_bridge_port_tagging_mode_t { /** Untagged mode */ SAI_BRIDGE_PORT_TAGGING_MODE_UNTAGGED, /** Tagged mode */ SAI_BRIDGE_PORT_TAGGING_MODE_TAGGED, } sai_bridge_port_tagging_mode_t; /** * @brief SAI attributes for Bridge Port */ typedef enum _sai_bridge_port_attr_t { /** * @brief Start of attributes */ SAI_BRIDGE_PORT_ATTR_START, /** * @brief Bridge port type * * @type sai_bridge_port_type_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY */ SAI_BRIDGE_PORT_ATTR_TYPE = SAI_BRIDGE_PORT_ATTR_START, /** * @brief Associated Port or LAG object id * * The CPU port is not a member of any bridge. * * @type sai_object_id_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY * @objects SAI_OBJECT_TYPE_PORT, SAI_OBJECT_TYPE_LAG, SAI_OBJECT_TYPE_SYSTEM_PORT * @condition SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_SUB_PORT */ SAI_BRIDGE_PORT_ATTR_PORT_ID, /** * @brief Tagging mode of the bridge port * * Specifies the tagging mode to be used during egress. * * @type sai_bridge_port_tagging_mode_t * @flags CREATE_AND_SET * @default SAI_BRIDGE_PORT_TAGGING_MODE_TAGGED * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_SUB_PORT */ SAI_BRIDGE_PORT_ATTR_TAGGING_MODE, /** * @brief Associated Vlan * * @type sai_uint16_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY * @isvlan true * @condition SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_SUB_PORT */ SAI_BRIDGE_PORT_ATTR_VLAN_ID, /** * @brief Associated router interface object id * * Please note that for SAI_BRIDGE_PORT_TYPE_1Q_ROUTER, * all vlan interfaces are auto bounded for the bridge port. * * @type sai_object_id_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY * @objects SAI_OBJECT_TYPE_ROUTER_INTERFACE * @condition SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_1D_ROUTER */ SAI_BRIDGE_PORT_ATTR_RIF_ID, /** * @brief Associated tunnel id * * @type sai_object_id_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY * @objects SAI_OBJECT_TYPE_TUNNEL * @condition SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL */ SAI_BRIDGE_PORT_ATTR_TUNNEL_ID, /** * @brief Associated bridge id * * @type sai_object_id_t * @flags MANDATORY_ON_CREATE | CREATE_AND_SET * @objects SAI_OBJECT_TYPE_BRIDGE * @condition SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_SUB_PORT or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_1D_ROUTER or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL */ SAI_BRIDGE_PORT_ATTR_BRIDGE_ID, /** * @brief FDB Learning mode * * @type sai_bridge_port_fdb_learning_mode_t * @flags CREATE_AND_SET * @default SAI_BRIDGE_PORT_FDB_LEARNING_MODE_HW */ SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_MODE, /** * @brief Maximum number of learned MAC addresses * * @type sai_uint32_t * @flags CREATE_AND_SET * @default 0 */ SAI_BRIDGE_PORT_ATTR_MAX_LEARNED_ADDRESSES, /** * @brief Action for packets with unknown source MAC address * when FDB learning limit is reached. * * @type sai_packet_action_t * @flags CREATE_AND_SET * @default SAI_PACKET_ACTION_DROP */ SAI_BRIDGE_PORT_ATTR_FDB_LEARNING_LIMIT_VIOLATION_PACKET_ACTION, /** * @brief Admin Mode. * * Before removing a bridge port, need to disable it by setting admin mode * to false, then flush the FDB entries, and then remove it. * * @type bool * @flags CREATE_AND_SET * @default false */ SAI_BRIDGE_PORT_ATTR_ADMIN_STATE, /** * @brief Ingress filtering (drop frames with unknown VLANs) * * @type bool * @flags CREATE_AND_SET * @default false */ SAI_BRIDGE_PORT_ATTR_INGRESS_FILTERING, /** * @brief Egress filtering (drop frames with unknown VLANs at egress) * * @type bool * @flags CREATE_AND_SET * @default false * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT */ SAI_BRIDGE_PORT_ATTR_EGRESS_FILTERING, /** * @brief Isolation group id * * Packets ingressing on the bridge port should not be forwarded to the * members present in the isolation group.The isolation group type should * SAI_ISOLATION_GROUP_TYPE_BRIDGE_PORT. * * @type sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_ISOLATION_GROUP * @allownull true * @default SAI_NULL_OBJECT_ID */ SAI_BRIDGE_PORT_ATTR_ISOLATION_GROUP, /** * @brief Set bridge port statistics counting mode * * @type sai_stats_count_mode_t * @flags CREATE_AND_SET * @default SAI_STATS_COUNT_MODE_PACKET_AND_BYTE */ SAI_BRIDGE_PORT_ATTR_STATS_COUNT_MODE, /** * @brief Attach counter object list * * Counter object should be of type Selective. * Fill (#SAI_COUNTER_ATTR_TYPE with #SAI_COUNTER_TYPE_SELECTIVE). * * @type sai_object_list_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_COUNTER * @default empty */ SAI_BRIDGE_PORT_ATTR_SELECTIVE_COUNTER_LIST, /** * @brief End of attributes */ SAI_BRIDGE_PORT_ATTR_END, /** Custom range base value */ SAI_BRIDGE_PORT_ATTR_CUSTOM_RANGE_START = 0x10000000, /** End of custom range base */ SAI_BRIDGE_PORT_ATTR_CUSTOM_RANGE_END } sai_bridge_port_attr_t; /** * @brief Bridge port counter IDs in sai_get_bridge_port_stats() call */ typedef enum _sai_bridge_port_stat_t { /** Ingress byte stat count */ SAI_BRIDGE_PORT_STAT_IN_OCTETS, /** Ingress packet stat count */ SAI_BRIDGE_PORT_STAT_IN_PACKETS, /** Egress byte stat count */ SAI_BRIDGE_PORT_STAT_OUT_OCTETS, /** Egress packet stat count */ SAI_BRIDGE_PORT_STAT_OUT_PACKETS } sai_bridge_port_stat_t; /** * @brief Create bridge port * * @param[out] bridge_port_id Bridge port ID * @param[in] switch_id Switch object id * @param[in] attr_count Number of attributes * @param[in] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_create_bridge_port_fn)( _Out_ sai_object_id_t *bridge_port_id, _In_ sai_object_id_t switch_id, _In_ uint32_t attr_count, _In_ const sai_attribute_t *attr_list); /** * @brief Remove bridge port * * @param[in] bridge_port_id Bridge port ID * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_remove_bridge_port_fn)( _In_ sai_object_id_t bridge_port_id); /** * @brief Set attribute for bridge port * * @param[in] bridge_port_id Bridge port ID * @param[in] attr Attribute to set * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_set_bridge_port_attribute_fn)( _In_ sai_object_id_t bridge_port_id, _In_ const sai_attribute_t *attr); /** * @brief Get attributes of bridge port * * @param[in] bridge_port_id Bridge port 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_bridge_port_attribute_fn)( _In_ sai_object_id_t bridge_port_id, _In_ uint32_t attr_count, _Inout_ sai_attribute_t *attr_list); /** * @brief Get bridge port statistics counters. Deprecated for backward compatibility. * * @param[in] bridge_port_id Bridge port id * @param[in] number_of_counters Number of counters in the array * @param[in] counter_ids Specifies the array of counter ids * @param[out] counters Array of resulting counter values. * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_get_bridge_port_stats_fn)( _In_ sai_object_id_t bridge_port_id, _In_ uint32_t number_of_counters, _In_ const sai_stat_id_t *counter_ids, _Out_ uint64_t *counters); /** * @brief Get bridge port statistics counters extended. * * @param[in] bridge_port_id Bridge port id * @param[in] number_of_counters Number of counters in the array * @param[in] counter_ids Specifies the array of counter ids * @param[in] mode Statistics mode * @param[out] counters Array of resulting counter values. * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_get_bridge_port_stats_ext_fn)( _In_ sai_object_id_t bridge_port_id, _In_ uint32_t number_of_counters, _In_ const sai_stat_id_t *counter_ids, _In_ sai_stats_mode_t mode, _Out_ uint64_t *counters); /** * @brief Clear bridge port statistics counters. * * @param[in] bridge_port_id Bridge port id * @param[in] number_of_counters Number of counters in the array * @param[in] counter_ids Specifies the array of counter ids * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_clear_bridge_port_stats_fn)( _In_ sai_object_id_t bridge_port_id, _In_ uint32_t number_of_counters, _In_ const sai_stat_id_t *counter_ids); /** * @brief Attribute data for #SAI_BRIDGE_ATTR_TYPE */ typedef enum _sai_bridge_type_t { /** Vlan aware bridge */ SAI_BRIDGE_TYPE_1Q, /** Non vlan aware bridge */ SAI_BRIDGE_TYPE_1D, } sai_bridge_type_t; /** * @brief Attribute data for unknown unicast, unknown multicast * and broadcast flood controls */ typedef enum _sai_bridge_flood_control_type_t { /** * @brief Flood on all sub-ports * * When setting sub-ports to broadcast or unknown multicast flood, it also * includes flooding to the router. When setting sub-ports to unknown * unicast flood, it does not include flooding to the router */ SAI_BRIDGE_FLOOD_CONTROL_TYPE_SUB_PORTS, /** Disable flooding */ SAI_BRIDGE_FLOOD_CONTROL_TYPE_NONE, /** Flood on the L2MC group */ SAI_BRIDGE_FLOOD_CONTROL_TYPE_L2MC_GROUP, /** * @brief Flood on all sub-ports and L2MC group * * Flood on all sub-ports, without the router * In addition, flood on the supplied L2MC group */ SAI_BRIDGE_FLOOD_CONTROL_TYPE_COMBINED } sai_bridge_flood_control_type_t; /** * @brief SAI attributes for Bridge */ typedef enum _sai_bridge_attr_t { /** * @brief Start of attributes */ SAI_BRIDGE_ATTR_START, /** * @brief Bridge type * * @type sai_bridge_type_t * @flags MANDATORY_ON_CREATE | CREATE_ONLY */ SAI_BRIDGE_ATTR_TYPE = SAI_BRIDGE_ATTR_START, /** * @brief List of bridge ports associated to this bridge * * @type sai_object_list_t * @flags READ_ONLY * @objects SAI_OBJECT_TYPE_BRIDGE_PORT */ SAI_BRIDGE_ATTR_PORT_LIST, /** * @brief Maximum number of learned MAC addresses * * Zero means learning limit is disabled. * * @type sai_uint32_t * @flags CREATE_AND_SET * @default 0 */ SAI_BRIDGE_ATTR_MAX_LEARNED_ADDRESSES, /** * @brief To disable learning on a bridge * * @type bool * @flags CREATE_AND_SET * @default false */ SAI_BRIDGE_ATTR_LEARN_DISABLE, /** * @brief Unknown unicast flood control type * * @type sai_bridge_flood_control_type_t * @flags CREATE_AND_SET * @default SAI_BRIDGE_FLOOD_CONTROL_TYPE_SUB_PORTS */ SAI_BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE, /** * @brief Unknown unicast flood group. * * Provides control on the set of bridge ports on which unknown unicast * packets need to be flooded. This attribute would be used only when * the SAI_BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE is set as * SAI_BRIDGE_FLOOD_CONTROL_TYPE_L2MC_GROUP. When this attribute's value is * SAI_NULL_OBJECT_ID, then flooding would be disabled. * * @type sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_L2MC_GROUP * @allownull true * @default SAI_NULL_OBJECT_ID * @validonly SAI_BRIDGE_ATTR_TYPE == SAI_BRIDGE_TYPE_1D and (SAI_BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE == SAI_BRIDGE_FLOOD_CONTROL_TYPE_L2MC_GROUP or SAI_BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE == SAI_BRIDGE_FLOOD_CONTROL_TYPE_COMBINED) */ SAI_BRIDGE_ATTR_UNKNOWN_UNICAST_FLOOD_GROUP, /** * @brief Unknown unicast flood control type * * @type sai_bridge_flood_control_type_t * @flags CREATE_AND_SET * @default SAI_BRIDGE_FLOOD_CONTROL_TYPE_SUB_PORTS */ SAI_BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE, /** * @brief Unknown multicast flood group. * * Provides control on the set of bridge ports on which unknown multicast * packets need to be flooded. This attribute would be used only when * the SAI_BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE is set as * SAI_BRIDGE_FLOOD_CONTROL_TYPE_L2MC_GROUP.When this attribute's value is * SAI_NULL_OBJECT_ID, then flooding would be disabled. * * @type sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_L2MC_GROUP * @allownull true * @default SAI_NULL_OBJECT_ID * @validonly SAI_BRIDGE_ATTR_TYPE == SAI_BRIDGE_TYPE_1D and (SAI_BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE == SAI_BRIDGE_FLOOD_CONTROL_TYPE_L2MC_GROUP or SAI_BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE == SAI_BRIDGE_FLOOD_CONTROL_TYPE_COMBINED) */ SAI_BRIDGE_ATTR_UNKNOWN_MULTICAST_FLOOD_GROUP, /** * @brief Broadcast flood control type * * @type sai_bridge_flood_control_type_t * @flags CREATE_AND_SET * @default SAI_BRIDGE_FLOOD_CONTROL_TYPE_SUB_PORTS */ SAI_BRIDGE_ATTR_BROADCAST_FLOOD_CONTROL_TYPE, /** * @brief Broadcast flood group. * * Provides control on the set of bridge ports on which broadcast * packets need to be flooded. This attribute would be used only when * the SAI_BRIDGE_ATTR_BROADCAST_FLOOD_CONTROL_TYPE is set as * SAI_BRIDGE_FLOOD_CONTROL_TYPE_L2MC_GROUP.When this attribute's value is * SAI_NULL_OBJECT_ID, then flooding would be disabled. * * @type sai_object_id_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_L2MC_GROUP * @allownull true * @default SAI_NULL_OBJECT_ID * @validonly SAI_BRIDGE_ATTR_TYPE == SAI_BRIDGE_TYPE_1D and (SAI_BRIDGE_ATTR_BROADCAST_FLOOD_CONTROL_TYPE == SAI_BRIDGE_FLOOD_CONTROL_TYPE_L2MC_GROUP or SAI_BRIDGE_ATTR_BROADCAST_FLOOD_CONTROL_TYPE == SAI_BRIDGE_FLOOD_CONTROL_TYPE_COMBINED) */ SAI_BRIDGE_ATTR_BROADCAST_FLOOD_GROUP, /** * @brief Set bridge statistics counting mode * * @type sai_stats_count_mode_t * @flags CREATE_AND_SET * @default SAI_STATS_COUNT_MODE_PACKET_AND_BYTE */ SAI_BRIDGE_ATTR_STATS_COUNT_MODE, /** * @brief Attach counter object list * * Counter object should be of type Selective. * Fill (#SAI_COUNTER_ATTR_TYPE with #SAI_COUNTER_TYPE_SELECTIVE). * * @type sai_object_list_t * @flags CREATE_AND_SET * @objects SAI_OBJECT_TYPE_COUNTER * @default empty */ SAI_BRIDGE_ATTR_SELECTIVE_COUNTER_LIST, /** * @brief End of attributes */ SAI_BRIDGE_ATTR_END, /** Custom range base value */ SAI_BRIDGE_ATTR_CUSTOM_RANGE_START = 0x10000000, /** End of custom range base */ SAI_BRIDGE_ATTR_CUSTOM_RANGE_END } sai_bridge_attr_t; /** * @brief Bridge counter IDs in sai_get_bridge_stats() call */ typedef enum _sai_bridge_stat_t { /** Ingress byte stat count */ SAI_BRIDGE_STAT_IN_OCTETS, /** Ingress packet stat count */ SAI_BRIDGE_STAT_IN_PACKETS, /** Egress byte stat count */ SAI_BRIDGE_STAT_OUT_OCTETS, /** Egress packet stat count */ SAI_BRIDGE_STAT_OUT_PACKETS } sai_bridge_stat_t; /** * @brief Create bridge * * @param[out] bridge_id Bridge ID * @param[in] switch_id Switch object id * @param[in] attr_count Number of attributes * @param[in] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_create_bridge_fn)( _Out_ sai_object_id_t *bridge_id, _In_ sai_object_id_t switch_id, _In_ uint32_t attr_count, _In_ const sai_attribute_t *attr_list); /** * @brief Remove bridge * * @param[in] bridge_id Bridge ID * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_remove_bridge_fn)( _In_ sai_object_id_t bridge_id); /** * @brief Set attribute for bridge * * @param[in] bridge_id Bridge ID * @param[in] attr Attribute to set * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_set_bridge_attribute_fn)( _In_ sai_object_id_t bridge_id, _In_ const sai_attribute_t *attr); /** * @brief Get attributes of bridge * * @param[in] bridge_id Bridge 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_bridge_attribute_fn)( _In_ sai_object_id_t bridge_id, _In_ uint32_t attr_count, _Inout_ sai_attribute_t *attr_list); /** * @brief Get bridge statistics counters. Deprecated for backward compatibility. * * @param[in] bridge_id Bridge id * @param[in] number_of_counters Number of counters in the array * @param[in] counter_ids Specifies the array of counter ids * @param[out] counters Array of resulting counter values. * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_get_bridge_stats_fn)( _In_ sai_object_id_t bridge_id, _In_ uint32_t number_of_counters, _In_ const sai_stat_id_t *counter_ids, _Out_ uint64_t *counters); /** * @brief Get bridge statistics counters extended. * * @param[in] bridge_id Bridge id * @param[in] number_of_counters Number of counters in the array * @param[in] counter_ids Specifies the array of counter ids * @param[in] mode Statistics mode * @param[out] counters Array of resulting counter values. * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_get_bridge_stats_ext_fn)( _In_ sai_object_id_t bridge_id, _In_ uint32_t number_of_counters, _In_ const sai_stat_id_t *counter_ids, _In_ sai_stats_mode_t mode, _Out_ uint64_t *counters); /** * @brief Clear bridge statistics counters. * * @param[in] bridge_id Bridge id * @param[in] number_of_counters Number of counters in the array * @param[in] counter_ids Specifies the array of counter ids * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ typedef sai_status_t (*sai_clear_bridge_stats_fn)( _In_ sai_object_id_t bridge_id, _In_ uint32_t number_of_counters, _In_ const sai_stat_id_t *counter_ids); /** * @brief Bridge methods table retrieved with sai_api_query() */ typedef struct _sai_bridge_api_t { sai_create_bridge_fn create_bridge; sai_remove_bridge_fn remove_bridge; sai_set_bridge_attribute_fn set_bridge_attribute; sai_get_bridge_attribute_fn get_bridge_attribute; sai_get_bridge_stats_fn get_bridge_stats; sai_get_bridge_stats_ext_fn get_bridge_stats_ext; sai_clear_bridge_stats_fn clear_bridge_stats; sai_create_bridge_port_fn create_bridge_port; sai_remove_bridge_port_fn remove_bridge_port; sai_set_bridge_port_attribute_fn set_bridge_port_attribute; sai_get_bridge_port_attribute_fn get_bridge_port_attribute; sai_get_bridge_port_stats_fn get_bridge_port_stats; sai_get_bridge_port_stats_ext_fn get_bridge_port_stats_ext; sai_clear_bridge_port_stats_fn clear_bridge_port_stats; } sai_bridge_api_t; /** * @} */ #endif /** __SAIBRIDGE_H_ */