experimental/saiexperimentaldasheni.h (224 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 saiexperimentaldasheni.h
*
* @brief This module defines SAI extensions for DASH ENI
*
* @warning This module is a SAI experimental module
*/
#if !defined (__SAIEXPERIMENTALDASHENI_H_)
#define __SAIEXPERIMENTALDASHENI_H_
#include <saitypesextensions.h>
/**
* @defgroup SAIEXPERIMENTALDASHENI SAI - Experimental: DASH ENI specific API definitions
*
* @{
*/
/**
* @brief Attribute data for #SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ACTION
*/
typedef enum _sai_eni_ether_address_map_entry_action_t
{
SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ACTION_SET_ENI,
} sai_eni_ether_address_map_entry_action_t;
/**
* @brief Entry for eni_ether_address_map_entry
*/
typedef struct _sai_eni_ether_address_map_entry_t
{
/**
* @brief Switch ID
*
* @objects SAI_OBJECT_TYPE_SWITCH
*/
sai_object_id_t switch_id;
/**
* @brief Exact matched key address
*/
sai_mac_t address;
} sai_eni_ether_address_map_entry_t;
/**
* @brief Attribute ID for ENI ether address map entry
*/
typedef enum _sai_eni_ether_address_map_entry_attr_t
{
/**
* @brief Start of attributes
*/
SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_START,
/**
* @brief Action
*
* @type sai_eni_ether_address_map_entry_action_t
* @flags CREATE_AND_SET
* @default SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ACTION_SET_ENI
*/
SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ACTION = SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_START,
/**
* @brief Action parameter ENI id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_ENI
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID,
/**
* @brief End of attributes
*/
SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_END,
/** Custom range base value */
SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_CUSTOM_RANGE_START = 0x10000000,
/** End of custom range base */
SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_CUSTOM_RANGE_END,
} sai_eni_ether_address_map_entry_attr_t;
/**
* @brief Attribute ID for ENI
*/
typedef enum _sai_eni_attr_t
{
/**
* @brief Start of attributes
*/
SAI_ENI_ATTR_START,
/**
* @brief Action parameter CPS
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_ENI_ATTR_CPS = SAI_ENI_ATTR_START,
/**
* @brief Action parameter PPS
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_ENI_ATTR_PPS,
/**
* @brief Action parameter flows
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_ENI_ATTR_FLOWS,
/**
* @brief Action parameter admin state
*
* @type bool
* @flags CREATE_AND_SET
* @default false
*/
SAI_ENI_ATTR_ADMIN_STATE,
/**
* @brief Action parameter HA scope id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_HA_SCOPE
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_HA_SCOPE_ID,
/**
* @brief Action parameter underlay dip
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_ENI_ATTR_VM_UNDERLAY_DIP,
/**
* @brief Action parameter VNI
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_ENI_ATTR_VM_VNI,
/**
* @brief Action parameter VNET id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_VNET
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_VNET_ID,
/**
* @brief Action parameter PL sip
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_ENI_ATTR_PL_SIP,
/**
* @brief Action parameter PL sip mask
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_ENI_ATTR_PL_SIP_MASK,
/**
* @brief Action parameter PL underlay sip
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_ENI_ATTR_PL_UNDERLAY_SIP,
/**
* @brief Action parameter v4 meter policy id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_METER_POLICY
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_V4_METER_POLICY_ID,
/**
* @brief Action parameter v6 meter policy id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_METER_POLICY
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_V6_METER_POLICY_ID,
/**
* @brief Action parameter DASH tunnel DSCP mode
*
* @type sai_dash_tunnel_dscp_mode_t
* @flags CREATE_AND_SET
* @default SAI_DASH_TUNNEL_DSCP_MODE_PRESERVE_MODEL
*/
SAI_ENI_ATTR_DASH_TUNNEL_DSCP_MODE,
/**
* @brief Action parameter DSCP
*
* @type sai_uint8_t
* @flags CREATE_AND_SET
* @default 0
* @validonly SAI_ENI_ATTR_DASH_TUNNEL_DSCP_MODE == SAI_DASH_TUNNEL_DSCP_MODE_PIPE_MODEL
*/
SAI_ENI_ATTR_DSCP,
/**
* @brief Action parameter inbound v4 stage1 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_INBOUND_V4_STAGE1_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter inbound v4 stage2 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_INBOUND_V4_STAGE2_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter inbound v4 stage3 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_INBOUND_V4_STAGE3_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter inbound v4 stage4 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_INBOUND_V4_STAGE4_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter inbound v4 stage5 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_INBOUND_V4_STAGE5_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter inbound v6 stage1 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_INBOUND_V6_STAGE1_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter inbound v6 stage2 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_INBOUND_V6_STAGE2_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter inbound v6 stage3 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_INBOUND_V6_STAGE3_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter inbound v6 stage4 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_INBOUND_V6_STAGE4_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter inbound v6 stage5 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_INBOUND_V6_STAGE5_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter outbound v4 stage1 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_OUTBOUND_V4_STAGE1_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter outbound v4 stage2 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_OUTBOUND_V4_STAGE2_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter outbound v4 stage3 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_OUTBOUND_V4_STAGE3_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter outbound v4 stage4 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_OUTBOUND_V4_STAGE4_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter outbound v4 stage5 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_OUTBOUND_V4_STAGE5_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter outbound v6 stage1 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_OUTBOUND_V6_STAGE1_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter outbound v6 stage2 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_OUTBOUND_V6_STAGE2_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter outbound v6 stage3 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_OUTBOUND_V6_STAGE3_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter outbound v6 stage4 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter outbound v6 stage5 DASH ACL group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_DASH_ACL_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID,
/**
* @brief Action parameter disable fast path ICMP flow redirection
*
* @type bool
* @flags CREATE_AND_SET
* @default false
*/
SAI_ENI_ATTR_DISABLE_FAST_PATH_ICMP_FLOW_REDIRECTION,
/**
* @brief Action parameter full flow re-simulation requested
*
* @type bool
* @flags CREATE_AND_SET
* @default false
*/
SAI_ENI_ATTR_FULL_FLOW_RESIMULATION_REQUESTED,
/**
* @brief Action parameter max re-simulated flow per second
*
* @type sai_uint64_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_ENI_ATTR_MAX_RESIMULATED_FLOW_PER_SECOND,
/**
* @brief Action parameter outbound routing group id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_ENI_ATTR_OUTBOUND_ROUTING_GROUP_ID,
/**
* @brief Action parameter is HA flow owner
*
* @type bool
* @flags CREATE_AND_SET
* @default false
*/
SAI_ENI_ATTR_IS_HA_FLOW_OWNER,
/**
* @brief Action parameter enable reverse tunnel learning
*
* @type bool
* @flags CREATE_AND_SET
* @default false
*/
SAI_ENI_ATTR_ENABLE_REVERSE_TUNNEL_LEARNING,
/**
* @brief Action parameter reverse tunnel sip
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_ENI_ATTR_REVERSE_TUNNEL_SIP,
/**
* @brief End of attributes
*/
SAI_ENI_ATTR_END,
/** Custom range base value */
SAI_ENI_ATTR_CUSTOM_RANGE_START = 0x10000000,
/** End of custom range base */
SAI_ENI_ATTR_CUSTOM_RANGE_END,
} sai_eni_attr_t;
/**
* @brief Counter IDs for ENI
*/
typedef enum _sai_eni_stat_t
{
/** DASH ENI RX_BYTES stat count */
SAI_ENI_STAT_RX_BYTES,
/** DASH ENI RX_PACKETS stat count */
SAI_ENI_STAT_RX_PACKETS,
/** DASH ENI TX_BYTES stat count */
SAI_ENI_STAT_TX_BYTES,
/** DASH ENI TX_PACKETS stat count */
SAI_ENI_STAT_TX_PACKETS,
/** DASH ENI OUTBOUND_RX_BYTES stat count */
SAI_ENI_STAT_OUTBOUND_RX_BYTES,
/** DASH ENI OUTBOUND_RX_PACKETS stat count */
SAI_ENI_STAT_OUTBOUND_RX_PACKETS,
/** DASH ENI OUTBOUND_TX_BYTES stat count */
SAI_ENI_STAT_OUTBOUND_TX_BYTES,
/** DASH ENI OUTBOUND_TX_PACKETS stat count */
SAI_ENI_STAT_OUTBOUND_TX_PACKETS,
/** DASH ENI INBOUND_RX_BYTES stat count */
SAI_ENI_STAT_INBOUND_RX_BYTES,
/** DASH ENI INBOUND_RX_PACKETS stat count */
SAI_ENI_STAT_INBOUND_RX_PACKETS,
/** DASH ENI INBOUND_TX_BYTES stat count */
SAI_ENI_STAT_INBOUND_TX_BYTES,
/** DASH ENI INBOUND_TX_PACKETS stat count */
SAI_ENI_STAT_INBOUND_TX_PACKETS,
/** DASH ENI LB_FAST_PATH_ICMP_IN_BYTES stat count */
SAI_ENI_STAT_LB_FAST_PATH_ICMP_IN_BYTES,
/** DASH ENI LB_FAST_PATH_ICMP_IN_PACKETS stat count */
SAI_ENI_STAT_LB_FAST_PATH_ICMP_IN_PACKETS,
/** DASH ENI FLOW_CREATED stat count */
SAI_ENI_STAT_FLOW_CREATED,
/** DASH ENI FLOW_CREATE_FAILED stat count */
SAI_ENI_STAT_FLOW_CREATE_FAILED,
/** DASH ENI FLOW_UPDATED stat count */
SAI_ENI_STAT_FLOW_UPDATED,
/** DASH ENI FLOW_UPDATE_FAILED stat count */
SAI_ENI_STAT_FLOW_UPDATE_FAILED,
/** DASH ENI FLOW_UPDATED_BY_RESIMULATION stat count */
SAI_ENI_STAT_FLOW_UPDATED_BY_RESIMULATION,
/** DASH ENI FLOW_UPDATE_BY_RESIMULATION_FAILED stat count */
SAI_ENI_STAT_FLOW_UPDATE_BY_RESIMULATION_FAILED,
/** DASH ENI FLOW_DELETED stat count */
SAI_ENI_STAT_FLOW_DELETED,
/** DASH ENI FLOW_DELETE_FAILED stat count */
SAI_ENI_STAT_FLOW_DELETE_FAILED,
/** DASH ENI FLOW_AGED stat count */
SAI_ENI_STAT_FLOW_AGED,
/** DASH ENI INLINE_SYNC_PACKET_RX_BYTES stat count */
SAI_ENI_STAT_INLINE_SYNC_PACKET_RX_BYTES,
/** DASH ENI INLINE_SYNC_PACKET_RX_PACKETS stat count */
SAI_ENI_STAT_INLINE_SYNC_PACKET_RX_PACKETS,
/** DASH ENI INLINE_SYNC_PACKET_TX_BYTES stat count */
SAI_ENI_STAT_INLINE_SYNC_PACKET_TX_BYTES,
/** DASH ENI INLINE_SYNC_PACKET_TX_PACKETS stat count */
SAI_ENI_STAT_INLINE_SYNC_PACKET_TX_PACKETS,
/** DASH ENI TIMED_SYNC_PACKET_RX_BYTES stat count */
SAI_ENI_STAT_TIMED_SYNC_PACKET_RX_BYTES,
/** DASH ENI TIMED_SYNC_PACKET_RX_PACKETS stat count */
SAI_ENI_STAT_TIMED_SYNC_PACKET_RX_PACKETS,
/** DASH ENI TIMED_SYNC_PACKET_TX_BYTES stat count */
SAI_ENI_STAT_TIMED_SYNC_PACKET_TX_BYTES,
/** DASH ENI TIMED_SYNC_PACKET_TX_PACKETS stat count */
SAI_ENI_STAT_TIMED_SYNC_PACKET_TX_PACKETS,
/** DASH ENI INLINE_FLOW_CREATE_REQ_SENT stat count */
SAI_ENI_STAT_INLINE_FLOW_CREATE_REQ_SENT,
/** DASH ENI INLINE_FLOW_CREATE_REQ_RECV stat count */
SAI_ENI_STAT_INLINE_FLOW_CREATE_REQ_RECV,
/** DASH ENI INLINE_FLOW_CREATE_REQ_FAILED stat count */
SAI_ENI_STAT_INLINE_FLOW_CREATE_REQ_FAILED,
/** DASH ENI INLINE_FLOW_CREATE_REQ_IGNORED stat count */
SAI_ENI_STAT_INLINE_FLOW_CREATE_REQ_IGNORED,
/** DASH ENI INLINE_FLOW_CREATE_ACK_RECV stat count */
SAI_ENI_STAT_INLINE_FLOW_CREATE_ACK_RECV,
/** DASH ENI INLINE_FLOW_CREATE_ACK_FAILED stat count */
SAI_ENI_STAT_INLINE_FLOW_CREATE_ACK_FAILED,
/** DASH ENI INLINE_FLOW_CREATE_ACK_IGNORED stat count */
SAI_ENI_STAT_INLINE_FLOW_CREATE_ACK_IGNORED,
/** DASH ENI TIMED_FLOW_CREATE_REQ_SENT stat count */
SAI_ENI_STAT_TIMED_FLOW_CREATE_REQ_SENT,
/** DASH ENI TIMED_FLOW_CREATE_REQ_RECV stat count */
SAI_ENI_STAT_TIMED_FLOW_CREATE_REQ_RECV,
/** DASH ENI TIMED_FLOW_CREATE_REQ_FAILED stat count */
SAI_ENI_STAT_TIMED_FLOW_CREATE_REQ_FAILED,
/** DASH ENI TIMED_FLOW_CREATE_REQ_IGNORED stat count */
SAI_ENI_STAT_TIMED_FLOW_CREATE_REQ_IGNORED,
/** DASH ENI TIMED_FLOW_CREATE_ACK_RECV stat count */
SAI_ENI_STAT_TIMED_FLOW_CREATE_ACK_RECV,
/** DASH ENI TIMED_FLOW_CREATE_ACK_FAILED stat count */
SAI_ENI_STAT_TIMED_FLOW_CREATE_ACK_FAILED,
/** DASH ENI TIMED_FLOW_CREATE_ACK_IGNORED stat count */
SAI_ENI_STAT_TIMED_FLOW_CREATE_ACK_IGNORED,
/** DASH ENI INLINE_FLOW_UPDATE_REQ_SENT stat count */
SAI_ENI_STAT_INLINE_FLOW_UPDATE_REQ_SENT,
/** DASH ENI INLINE_FLOW_UPDATE_REQ_RECV stat count */
SAI_ENI_STAT_INLINE_FLOW_UPDATE_REQ_RECV,
/** DASH ENI INLINE_FLOW_UPDATE_REQ_FAILED stat count */
SAI_ENI_STAT_INLINE_FLOW_UPDATE_REQ_FAILED,
/** DASH ENI INLINE_FLOW_UPDATE_REQ_IGNORED stat count */
SAI_ENI_STAT_INLINE_FLOW_UPDATE_REQ_IGNORED,
/** DASH ENI INLINE_FLOW_UPDATE_ACK_RECV stat count */
SAI_ENI_STAT_INLINE_FLOW_UPDATE_ACK_RECV,
/** DASH ENI INLINE_FLOW_UPDATE_ACK_FAILED stat count */
SAI_ENI_STAT_INLINE_FLOW_UPDATE_ACK_FAILED,
/** DASH ENI INLINE_FLOW_UPDATE_ACK_IGNORED stat count */
SAI_ENI_STAT_INLINE_FLOW_UPDATE_ACK_IGNORED,
/** DASH ENI TIMED_FLOW_UPDATE_REQ_SENT stat count */
SAI_ENI_STAT_TIMED_FLOW_UPDATE_REQ_SENT,
/** DASH ENI TIMED_FLOW_UPDATE_REQ_RECV stat count */
SAI_ENI_STAT_TIMED_FLOW_UPDATE_REQ_RECV,
/** DASH ENI TIMED_FLOW_UPDATE_REQ_FAILED stat count */
SAI_ENI_STAT_TIMED_FLOW_UPDATE_REQ_FAILED,
/** DASH ENI TIMED_FLOW_UPDATE_REQ_IGNORED stat count */
SAI_ENI_STAT_TIMED_FLOW_UPDATE_REQ_IGNORED,
/** DASH ENI TIMED_FLOW_UPDATE_ACK_RECV stat count */
SAI_ENI_STAT_TIMED_FLOW_UPDATE_ACK_RECV,
/** DASH ENI TIMED_FLOW_UPDATE_ACK_FAILED stat count */
SAI_ENI_STAT_TIMED_FLOW_UPDATE_ACK_FAILED,
/** DASH ENI TIMED_FLOW_UPDATE_ACK_IGNORED stat count */
SAI_ENI_STAT_TIMED_FLOW_UPDATE_ACK_IGNORED,
/** DASH ENI INLINE_FLOW_DELETE_REQ_SENT stat count */
SAI_ENI_STAT_INLINE_FLOW_DELETE_REQ_SENT,
/** DASH ENI INLINE_FLOW_DELETE_REQ_RECV stat count */
SAI_ENI_STAT_INLINE_FLOW_DELETE_REQ_RECV,
/** DASH ENI INLINE_FLOW_DELETE_REQ_FAILED stat count */
SAI_ENI_STAT_INLINE_FLOW_DELETE_REQ_FAILED,
/** DASH ENI INLINE_FLOW_DELETE_REQ_IGNORED stat count */
SAI_ENI_STAT_INLINE_FLOW_DELETE_REQ_IGNORED,
/** DASH ENI INLINE_FLOW_DELETE_ACK_RECV stat count */
SAI_ENI_STAT_INLINE_FLOW_DELETE_ACK_RECV,
/** DASH ENI INLINE_FLOW_DELETE_ACK_FAILED stat count */
SAI_ENI_STAT_INLINE_FLOW_DELETE_ACK_FAILED,
/** DASH ENI INLINE_FLOW_DELETE_ACK_IGNORED stat count */
SAI_ENI_STAT_INLINE_FLOW_DELETE_ACK_IGNORED,
/** DASH ENI TIMED_FLOW_DELETE_REQ_SENT stat count */
SAI_ENI_STAT_TIMED_FLOW_DELETE_REQ_SENT,
/** DASH ENI TIMED_FLOW_DELETE_REQ_RECV stat count */
SAI_ENI_STAT_TIMED_FLOW_DELETE_REQ_RECV,
/** DASH ENI TIMED_FLOW_DELETE_REQ_FAILED stat count */
SAI_ENI_STAT_TIMED_FLOW_DELETE_REQ_FAILED,
/** DASH ENI TIMED_FLOW_DELETE_REQ_IGNORED stat count */
SAI_ENI_STAT_TIMED_FLOW_DELETE_REQ_IGNORED,
/** DASH ENI TIMED_FLOW_DELETE_ACK_RECV stat count */
SAI_ENI_STAT_TIMED_FLOW_DELETE_ACK_RECV,
/** DASH ENI TIMED_FLOW_DELETE_ACK_FAILED stat count */
SAI_ENI_STAT_TIMED_FLOW_DELETE_ACK_FAILED,
/** DASH ENI TIMED_FLOW_DELETE_ACK_IGNORED stat count */
SAI_ENI_STAT_TIMED_FLOW_DELETE_ACK_IGNORED,
/** DASH ENI OUTBOUND_ROUTING_ENTRY_MISS_DROP_PACKETS stat count */
SAI_ENI_STAT_OUTBOUND_ROUTING_ENTRY_MISS_DROP_PACKETS,
/** DASH ENI OUTBOUND_CA_PA_ENTRY_MISS_DROP_PACKETS stat count */
SAI_ENI_STAT_OUTBOUND_CA_PA_ENTRY_MISS_DROP_PACKETS,
/** DASH ENI INBOUND_ROUTING_ENTRY_MISS_DROP_PACKETS stat count */
SAI_ENI_STAT_INBOUND_ROUTING_ENTRY_MISS_DROP_PACKETS,
/** DASH ENI OUTBOUND_ROUTING_GROUP_MISS_DROP_PACKETS stat count */
SAI_ENI_STAT_OUTBOUND_ROUTING_GROUP_MISS_DROP_PACKETS,
/** DASH ENI OUTBOUND_ROUTING_GROUP_DISABLED_DROP_PACKETS stat count */
SAI_ENI_STAT_OUTBOUND_ROUTING_GROUP_DISABLED_DROP_PACKETS,
} sai_eni_stat_t;
/**
* @brief Create ENI ether address map entry
*
* @param[in] eni_ether_address_map_entry Entry
* @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_eni_ether_address_map_entry_fn)(
_In_ const sai_eni_ether_address_map_entry_t *eni_ether_address_map_entry,
_In_ uint32_t attr_count,
_In_ const sai_attribute_t *attr_list);
/**
* @brief Remove ENI ether address map entry
*
* @param[in] eni_ether_address_map_entry Entry
*
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
*/
typedef sai_status_t (*sai_remove_eni_ether_address_map_entry_fn)(
_In_ const sai_eni_ether_address_map_entry_t *eni_ether_address_map_entry);
/**
* @brief Set attribute for ENI ether address map entry
*
* @param[in] eni_ether_address_map_entry Entry
* @param[in] attr Attribute
*
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
*/
typedef sai_status_t (*sai_set_eni_ether_address_map_entry_attribute_fn)(
_In_ const sai_eni_ether_address_map_entry_t *eni_ether_address_map_entry,
_In_ const sai_attribute_t *attr);
/**
* @brief Get attribute for ENI ether address map entry
*
* @param[in] eni_ether_address_map_entry Entry
* @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_eni_ether_address_map_entry_attribute_fn)(
_In_ const sai_eni_ether_address_map_entry_t *eni_ether_address_map_entry,
_In_ uint32_t attr_count,
_Inout_ sai_attribute_t *attr_list);
/**
* @brief Bulk create ENI ether address map entry
*
* @param[in] object_count Number of objects to create
* @param[in] eni_ether_address_map_entry List of object to create
* @param[in] attr_count List of attr_count. Caller passes the number
* of attribute for each object to create.
* @param[in] attr_list List of attributes for every object.
* @param[in] mode Bulk operation error handling mode.
* @param[out] object_statuses List of status for every object. Caller needs to
* allocate the buffer
*
* @return #SAI_STATUS_SUCCESS on success when all objects are created or
* #SAI_STATUS_FAILURE when any of the objects fails to create. When there is
* failure, Caller is expected to go through the list of returned statuses to
* find out which fails and which succeeds.
*/
typedef sai_status_t (*sai_bulk_create_eni_ether_address_map_entry_fn)(
_In_ uint32_t object_count,
_In_ const sai_eni_ether_address_map_entry_t *eni_ether_address_map_entry,
_In_ const uint32_t *attr_count,
_In_ const sai_attribute_t **attr_list,
_In_ sai_bulk_op_error_mode_t mode,
_Out_ sai_status_t *object_statuses);
/**
* @brief Bulk remove ENI ether address map entry
*
* @param[in] object_count Number of objects to remove
* @param[in] eni_ether_address_map_entry List of objects to remove
* @param[in] mode Bulk operation error handling mode.
* @param[out] object_statuses List of status for every object. Caller needs to
* allocate the buffer
*
* @return #SAI_STATUS_SUCCESS on success when all objects are removed or
* #SAI_STATUS_FAILURE when any of the objects fails to remove. When there is
* failure, Caller is expected to go through the list of returned statuses to
* find out which fails and which succeeds.
*/
typedef sai_status_t (*sai_bulk_remove_eni_ether_address_map_entry_fn)(
_In_ uint32_t object_count,
_In_ const sai_eni_ether_address_map_entry_t *eni_ether_address_map_entry,
_In_ sai_bulk_op_error_mode_t mode,
_Out_ sai_status_t *object_statuses);
/**
* @brief Create ENI
*
* @param[out] eni_id Entry 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_eni_fn)(
_Out_ sai_object_id_t *eni_id,
_In_ sai_object_id_t switch_id,
_In_ uint32_t attr_count,
_In_ const sai_attribute_t *attr_list);
/**
* @brief Remove ENI
*
* @param[in] eni_id Entry id
*
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
*/
typedef sai_status_t (*sai_remove_eni_fn)(
_In_ sai_object_id_t eni_id);
/**
* @brief Set attribute for ENI
*
* @param[in] eni_id Entry id
* @param[in] attr Attribute
*
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
*/
typedef sai_status_t (*sai_set_eni_attribute_fn)(
_In_ sai_object_id_t eni_id,
_In_ const sai_attribute_t *attr);
/**
* @brief Get attribute for ENI
*
* @param[in] eni_id Entry 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_eni_attribute_fn)(
_In_ sai_object_id_t eni_id,
_In_ uint32_t attr_count,
_Inout_ sai_attribute_t *attr_list);
/**
* @brief Get ENI statistics counters. Deprecated for backward compatibility.
*
* @param[in] eni_id Entry 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_eni_stats_fn)(
_In_ sai_object_id_t eni_id,
_In_ uint32_t number_of_counters,
_In_ const sai_stat_id_t *counter_ids,
_Out_ uint64_t *counters);
/**
* @brief Get ENI statistics counters extended.
*
* @param[in] eni_id Entry 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_eni_stats_ext_fn)(
_In_ sai_object_id_t eni_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 ENI statistics counters.
*
* @param[in] eni_id Entry 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_eni_stats_fn)(
_In_ sai_object_id_t eni_id,
_In_ uint32_t number_of_counters,
_In_ const sai_stat_id_t *counter_ids);
typedef struct _sai_dash_eni_api_t
{
sai_create_eni_ether_address_map_entry_fn create_eni_ether_address_map_entry;
sai_remove_eni_ether_address_map_entry_fn remove_eni_ether_address_map_entry;
sai_set_eni_ether_address_map_entry_attribute_fn set_eni_ether_address_map_entry_attribute;
sai_get_eni_ether_address_map_entry_attribute_fn get_eni_ether_address_map_entry_attribute;
sai_bulk_create_eni_ether_address_map_entry_fn create_eni_ether_address_map_entries;
sai_bulk_remove_eni_ether_address_map_entry_fn remove_eni_ether_address_map_entries;
sai_create_eni_fn create_eni;
sai_remove_eni_fn remove_eni;
sai_set_eni_attribute_fn set_eni_attribute;
sai_get_eni_attribute_fn get_eni_attribute;
sai_get_eni_stats_fn get_eni_stats;
sai_get_eni_stats_ext_fn get_eni_stats_ext;
sai_clear_eni_stats_fn clear_eni_stats;
sai_bulk_object_create_fn create_enis;
sai_bulk_object_remove_fn remove_enis;
} sai_dash_eni_api_t;
/**
* @}
*/
#endif /** __SAIEXPERIMENTALDASHENI_H_ */