experimental/saiexperimentaldashflow.h (189 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 saiexperimentaldashflow.h
*
* @brief This module defines SAI extensions for DASH flow
*
* @warning This module is a SAI experimental module
*/
#if !defined (__SAIEXPERIMENTALDASHFLOW_H_)
#define __SAIEXPERIMENTALDASHFLOW_H_
#include <saitypesextensions.h>
/**
* @defgroup SAIEXPERIMENTALDASHFLOW SAI - Experimental: DASH flow specific API definitions
*
* @{
*/
/**
* @brief Attribute data for #SAI_FLOW_ENTRY_ATTR_ACTION
*/
typedef enum _sai_flow_entry_action_t
{
SAI_FLOW_ENTRY_ACTION_SET_FLOW_ENTRY_ATTR,
} sai_flow_entry_action_t;
/**
* @brief Attribute ID for flow table
*/
typedef enum _sai_flow_table_attr_t
{
/**
* @brief Start of attributes
*/
SAI_FLOW_TABLE_ATTR_START,
/**
* @brief Action parameter max flow count
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_TABLE_ATTR_MAX_FLOW_COUNT = SAI_FLOW_TABLE_ATTR_START,
/**
* @brief Action parameter DASH flow enabled key
*
* @type sai_dash_flow_enabled_key_t
* @flags CREATE_AND_SET
* @default SAI_DASH_FLOW_ENABLED_KEY_ENI_MAC
*/
SAI_FLOW_TABLE_ATTR_DASH_FLOW_ENABLED_KEY,
/**
* @brief Action parameter flow TTL in milliseconds
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_TABLE_ATTR_FLOW_TTL_IN_MILLISECONDS,
/**
* @brief End of attributes
*/
SAI_FLOW_TABLE_ATTR_END,
/** Custom range base value */
SAI_FLOW_TABLE_ATTR_CUSTOM_RANGE_START = 0x10000000,
/** End of custom range base */
SAI_FLOW_TABLE_ATTR_CUSTOM_RANGE_END,
} sai_flow_table_attr_t;
/**
* @brief Entry for flow_entry
*/
typedef struct _sai_flow_entry_t
{
/**
* @brief Switch ID
*
* @objects SAI_OBJECT_TYPE_SWITCH
*/
sai_object_id_t switch_id;
/**
* @brief Exact matched key eni_mac
*/
sai_mac_t eni_mac;
/**
* @brief Exact matched key vnet_id
*/
sai_uint16_t vnet_id;
/**
* @brief Exact matched key ip_proto
*/
sai_uint8_t ip_proto;
/**
* @brief Exact matched key src_ip
*/
sai_ip_address_t src_ip;
/**
* @brief Exact matched key dst_ip
*/
sai_ip_address_t dst_ip;
/**
* @brief Exact matched key src_port
*/
sai_uint16_t src_port;
/**
* @brief Exact matched key dst_port
*/
sai_uint16_t dst_port;
} sai_flow_entry_t;
/**
* @brief Attribute ID for flow entry
*/
typedef enum _sai_flow_entry_attr_t
{
/**
* @brief Start of attributes
*/
SAI_FLOW_ENTRY_ATTR_START,
/**
* @brief Action
*
* @type sai_flow_entry_action_t
* @flags CREATE_AND_SET
* @default SAI_FLOW_ENTRY_ACTION_SET_FLOW_ENTRY_ATTR
*/
SAI_FLOW_ENTRY_ATTR_ACTION = SAI_FLOW_ENTRY_ATTR_START,
/**
* @brief Action parameter version
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_ENTRY_ATTR_VERSION,
/**
* @brief Action parameter DASH direction
*
* @type sai_dash_direction_t
* @flags CREATE_AND_SET
* @default SAI_DASH_DIRECTION_INVALID
*/
SAI_FLOW_ENTRY_ATTR_DASH_DIRECTION,
/**
* @brief Action parameter DASH flow action
*
* @type sai_dash_flow_action_t
* @flags CREATE_AND_SET
* @default SAI_DASH_FLOW_ACTION_NONE
*/
SAI_FLOW_ENTRY_ATTR_DASH_FLOW_ACTION,
/**
* @brief Action parameter meter class
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_ENTRY_ATTR_METER_CLASS,
/**
* @brief Action parameter is unidirectional flow
*
* @type bool
* @flags CREATE_AND_SET
* @default false
*/
SAI_FLOW_ENTRY_ATTR_IS_UNIDIRECTIONAL_FLOW,
/**
* @brief Action parameter reverse flow ENI MAC
*
* @type sai_mac_t
* @flags CREATE_AND_SET
* @default vendor
*/
SAI_FLOW_ENTRY_ATTR_REVERSE_FLOW_ENI_MAC,
/**
* @brief Action parameter reverse flow VNET id
*
* @type sai_uint16_t
* @flags CREATE_AND_SET
* @isvlan true
* @default 0
*/
SAI_FLOW_ENTRY_ATTR_REVERSE_FLOW_VNET_ID,
/**
* @brief Action parameter reverse flow IP protocol
*
* @type sai_uint8_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_ENTRY_ATTR_REVERSE_FLOW_IP_PROTO,
/**
* @brief Action parameter reverse flow src IP
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_FLOW_ENTRY_ATTR_REVERSE_FLOW_SRC_IP,
/**
* @brief Action parameter reverse flow dst IP
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_FLOW_ENTRY_ATTR_REVERSE_FLOW_DST_IP,
/**
* @brief Action parameter reverse flow src port
*
* @type sai_uint16_t
* @flags CREATE_AND_SET
* @isvlan true
* @default 0
*/
SAI_FLOW_ENTRY_ATTR_REVERSE_FLOW_SRC_PORT,
/**
* @brief Action parameter reverse flow dst port
*
* @type sai_uint16_t
* @flags CREATE_AND_SET
* @isvlan true
* @default 0
*/
SAI_FLOW_ENTRY_ATTR_REVERSE_FLOW_DST_PORT,
/**
* @brief Action parameter underlay0 VNET id
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_ENTRY_ATTR_UNDERLAY0_VNET_ID,
/**
* @brief Action parameter underlay0 sip
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_ENTRY_ATTR_UNDERLAY0_SIP,
/**
* @brief Action parameter underlay0 dip
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_ENTRY_ATTR_UNDERLAY0_DIP,
/**
* @brief Action parameter underlay0 DASH encapsulation
*
* @type sai_dash_encapsulation_t
* @flags CREATE_AND_SET
* @default SAI_DASH_ENCAPSULATION_INVALID
*/
SAI_FLOW_ENTRY_ATTR_UNDERLAY0_DASH_ENCAPSULATION,
/**
* @brief Action parameter underlay1 VNET id
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_ENTRY_ATTR_UNDERLAY1_VNET_ID,
/**
* @brief Action parameter underlay1 sip
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_ENTRY_ATTR_UNDERLAY1_SIP,
/**
* @brief Action parameter underlay1 dip
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_ENTRY_ATTR_UNDERLAY1_DIP,
/**
* @brief Action parameter underlay1 source MAC
*
* @type sai_mac_t
* @flags CREATE_AND_SET
* @default vendor
*/
SAI_FLOW_ENTRY_ATTR_UNDERLAY1_SMAC,
/**
* @brief Action parameter underlay1 destination MAC
*
* @type sai_mac_t
* @flags CREATE_AND_SET
* @default vendor
*/
SAI_FLOW_ENTRY_ATTR_UNDERLAY1_DMAC,
/**
* @brief Action parameter underlay1 DASH encapsulation
*
* @type sai_dash_encapsulation_t
* @flags CREATE_AND_SET
* @default SAI_DASH_ENCAPSULATION_INVALID
*/
SAI_FLOW_ENTRY_ATTR_UNDERLAY1_DASH_ENCAPSULATION,
/**
* @brief Action parameter dst MAC
*
* @type sai_mac_t
* @flags CREATE_AND_SET
* @default vendor
*/
SAI_FLOW_ENTRY_ATTR_DST_MAC,
/**
* @brief Action parameter sip
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_FLOW_ENTRY_ATTR_SIP,
/**
* @brief Action parameter dip
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_FLOW_ENTRY_ATTR_DIP,
/**
* @brief Action parameter sip mask
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_FLOW_ENTRY_ATTR_SIP_MASK,
/**
* @brief Action parameter dip mask
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_FLOW_ENTRY_ATTR_DIP_MASK,
/**
* @brief Action parameter vendor metadata
*
* @type sai_u8_list_t
* @flags CREATE_AND_SET
* @default empty
*/
SAI_FLOW_ENTRY_ATTR_VENDOR_METADATA,
/**
* @brief Action parameter flow data protocol buffer
*
* @type sai_u8_list_t
* @flags CREATE_AND_SET
* @default empty
*/
SAI_FLOW_ENTRY_ATTR_FLOW_DATA_PB,
/**
* @brief IP address family for resource accounting
*
* @type sai_ip_addr_family_t
* @flags READ_ONLY
* @isresourcetype true
*/
SAI_FLOW_ENTRY_ATTR_IP_ADDR_FAMILY,
/**
* @brief End of attributes
*/
SAI_FLOW_ENTRY_ATTR_END,
/** Custom range base value */
SAI_FLOW_ENTRY_ATTR_CUSTOM_RANGE_START = 0x10000000,
/** End of custom range base */
SAI_FLOW_ENTRY_ATTR_CUSTOM_RANGE_END,
} sai_flow_entry_attr_t;
/**
* @brief Attribute ID for flow entry bulk get session filter
*/
typedef enum _sai_flow_entry_bulk_get_session_filter_attr_t
{
/**
* @brief Start of attributes
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ATTR_START,
/**
* @brief Action parameter DASH flow entry bulk get session filter key
*
* @type sai_dash_flow_entry_bulk_get_session_filter_key_t
* @flags CREATE_AND_SET
* @default SAI_DASH_FLOW_ENTRY_BULK_GET_SESSION_FILTER_KEY_INVAILD
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ATTR_DASH_FLOW_ENTRY_BULK_GET_SESSION_FILTER_KEY = SAI_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ATTR_START,
/**
* @brief Action parameter DASH flow entry bulk get session op key
*
* @type sai_dash_flow_entry_bulk_get_session_op_key_t
* @flags CREATE_AND_SET
* @default SAI_DASH_FLOW_ENTRY_BULK_GET_SESSION_OP_KEY_FILTER_OP_INVALID
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ATTR_DASH_FLOW_ENTRY_BULK_GET_SESSION_OP_KEY,
/**
* @brief Action parameter int value
*
* @type sai_uint64_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ATTR_INT_VALUE,
/**
* @brief Action parameter IP value
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ATTR_IP_VALUE,
/**
* @brief Action parameter MAC value
*
* @type sai_mac_t
* @flags CREATE_AND_SET
* @default vendor
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ATTR_MAC_VALUE,
/**
* @brief End of attributes
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ATTR_END,
/** Custom range base value */
SAI_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ATTR_CUSTOM_RANGE_START = 0x10000000,
/** End of custom range base */
SAI_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ATTR_CUSTOM_RANGE_END,
} sai_flow_entry_bulk_get_session_filter_attr_t;
/**
* @brief Attribute ID for flow entry bulk get session
*/
typedef enum _sai_flow_entry_bulk_get_session_attr_t
{
/**
* @brief Start of attributes
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_START,
/**
* @brief Action parameter DASH flow entry bulk get session mode
*
* @type sai_dash_flow_entry_bulk_get_session_mode_t
* @flags CREATE_AND_SET
* @default SAI_DASH_FLOW_ENTRY_BULK_GET_SESSION_MODE_SAI_DASH_FLOW_ENTRY_BULK_GET_SESSION_MODE_GRPC
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_DASH_FLOW_ENTRY_BULK_GET_SESSION_MODE = SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_START,
/**
* @brief Action parameter bulk get entry limitation
*
* @type sai_uint32_t
* @flags CREATE_AND_SET
* @default 0
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_BULK_GET_ENTRY_LIMITATION,
/**
* @brief Action parameter bulk get session server IP
*
* @type sai_ip_address_t
* @flags CREATE_AND_SET
* @default 0.0.0.0
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_BULK_GET_SESSION_SERVER_IP,
/**
* @brief Action parameter bulk get session server port
*
* @type sai_uint16_t
* @flags CREATE_AND_SET
* @isvlan true
* @default 0
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_BULK_GET_SESSION_SERVER_PORT,
/**
* @brief Action parameter first flow entry bulk get session filter id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_FLOW_ENTRY_BULK_GET_SESSION_FILTER
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_FIRST_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ID,
/**
* @brief Action parameter second flow entry bulk get session filter id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_FLOW_ENTRY_BULK_GET_SESSION_FILTER
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_SECOND_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ID,
/**
* @brief Action parameter third flow entry bulk get session filter id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_FLOW_ENTRY_BULK_GET_SESSION_FILTER
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_THIRD_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ID,
/**
* @brief Action parameter fourth flow entry bulk get session filter id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_FLOW_ENTRY_BULK_GET_SESSION_FILTER
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_FOURTH_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ID,
/**
* @brief Action parameter fifth flow entry bulk get session filter id
*
* @type sai_object_id_t
* @flags CREATE_AND_SET
* @objects SAI_OBJECT_TYPE_FLOW_ENTRY_BULK_GET_SESSION_FILTER
* @allownull true
* @default SAI_NULL_OBJECT_ID
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_FIFTH_FLOW_ENTRY_BULK_GET_SESSION_FILTER_ID,
/**
* @brief End of attributes
*/
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_END,
/** Custom range base value */
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_CUSTOM_RANGE_START = 0x10000000,
/** End of custom range base */
SAI_FLOW_ENTRY_BULK_GET_SESSION_ATTR_CUSTOM_RANGE_END,
} sai_flow_entry_bulk_get_session_attr_t;
/**
* @brief Create flow table
*
* @param[out] flow_table_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_flow_table_fn)(
_Out_ sai_object_id_t *flow_table_id,
_In_ sai_object_id_t switch_id,
_In_ uint32_t attr_count,
_In_ const sai_attribute_t *attr_list);
/**
* @brief Remove flow table
*
* @param[in] flow_table_id Entry id
*
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
*/
typedef sai_status_t (*sai_remove_flow_table_fn)(
_In_ sai_object_id_t flow_table_id);
/**
* @brief Set attribute for flow table
*
* @param[in] flow_table_id Entry id
* @param[in] attr Attribute
*
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
*/
typedef sai_status_t (*sai_set_flow_table_attribute_fn)(
_In_ sai_object_id_t flow_table_id,
_In_ const sai_attribute_t *attr);
/**
* @brief Get attribute for flow table
*
* @param[in] flow_table_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_flow_table_attribute_fn)(
_In_ sai_object_id_t flow_table_id,
_In_ uint32_t attr_count,
_Inout_ sai_attribute_t *attr_list);
/**
* @brief Create flow entry
*
* @param[in] flow_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_flow_entry_fn)(
_In_ const sai_flow_entry_t *flow_entry,
_In_ uint32_t attr_count,
_In_ const sai_attribute_t *attr_list);
/**
* @brief Remove flow entry
*
* @param[in] flow_entry Entry
*
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
*/
typedef sai_status_t (*sai_remove_flow_entry_fn)(
_In_ const sai_flow_entry_t *flow_entry);
/**
* @brief Set attribute for flow entry
*
* @param[in] flow_entry Entry
* @param[in] attr Attribute
*
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
*/
typedef sai_status_t (*sai_set_flow_entry_attribute_fn)(
_In_ const sai_flow_entry_t *flow_entry,
_In_ const sai_attribute_t *attr);
/**
* @brief Get attribute for flow entry
*
* @param[in] flow_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_flow_entry_attribute_fn)(
_In_ const sai_flow_entry_t *flow_entry,
_In_ uint32_t attr_count,
_Inout_ sai_attribute_t *attr_list);
/**
* @brief Bulk create flow entry
*
* @param[in] object_count Number of objects to create
* @param[in] flow_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_flow_entry_fn)(
_In_ uint32_t object_count,
_In_ const sai_flow_entry_t *flow_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 flow entry
*
* @param[in] object_count Number of objects to remove
* @param[in] flow_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_flow_entry_fn)(
_In_ uint32_t object_count,
_In_ const sai_flow_entry_t *flow_entry,
_In_ sai_bulk_op_error_mode_t mode,
_Out_ sai_status_t *object_statuses);
/**
* @brief Create flow entry bulk get session filter
*
* @param[out] flow_entry_bulk_get_session_filter_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_flow_entry_bulk_get_session_filter_fn)(
_Out_ sai_object_id_t *flow_entry_bulk_get_session_filter_id,
_In_ sai_object_id_t switch_id,
_In_ uint32_t attr_count,
_In_ const sai_attribute_t *attr_list);
/**
* @brief Remove flow entry bulk get session filter
*
* @param[in] flow_entry_bulk_get_session_filter_id Entry id
*
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
*/
typedef sai_status_t (*sai_remove_flow_entry_bulk_get_session_filter_fn)(
_In_ sai_object_id_t flow_entry_bulk_get_session_filter_id);
/**
* @brief Set attribute for flow entry bulk get session filter
*
* @param[in] flow_entry_bulk_get_session_filter_id Entry id
* @param[in] attr Attribute
*
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
*/
typedef sai_status_t (*sai_set_flow_entry_bulk_get_session_filter_attribute_fn)(
_In_ sai_object_id_t flow_entry_bulk_get_session_filter_id,
_In_ const sai_attribute_t *attr);
/**
* @brief Get attribute for flow entry bulk get session filter
*
* @param[in] flow_entry_bulk_get_session_filter_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_flow_entry_bulk_get_session_filter_attribute_fn)(
_In_ sai_object_id_t flow_entry_bulk_get_session_filter_id,
_In_ uint32_t attr_count,
_Inout_ sai_attribute_t *attr_list);
/**
* @brief Create flow entry bulk get session
*
* @param[out] flow_entry_bulk_get_session_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_flow_entry_bulk_get_session_fn)(
_Out_ sai_object_id_t *flow_entry_bulk_get_session_id,
_In_ sai_object_id_t switch_id,
_In_ uint32_t attr_count,
_In_ const sai_attribute_t *attr_list);
/**
* @brief Remove flow entry bulk get session
*
* @param[in] flow_entry_bulk_get_session_id Entry id
*
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
*/
typedef sai_status_t (*sai_remove_flow_entry_bulk_get_session_fn)(
_In_ sai_object_id_t flow_entry_bulk_get_session_id);
/**
* @brief Set attribute for flow entry bulk get session
*
* @param[in] flow_entry_bulk_get_session_id Entry id
* @param[in] attr Attribute
*
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
*/
typedef sai_status_t (*sai_set_flow_entry_bulk_get_session_attribute_fn)(
_In_ sai_object_id_t flow_entry_bulk_get_session_id,
_In_ const sai_attribute_t *attr);
/**
* @brief Get attribute for flow entry bulk get session
*
* @param[in] flow_entry_bulk_get_session_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_flow_entry_bulk_get_session_attribute_fn)(
_In_ sai_object_id_t flow_entry_bulk_get_session_id,
_In_ uint32_t attr_count,
_Inout_ sai_attribute_t *attr_list);
typedef struct _sai_dash_flow_api_t
{
sai_create_flow_table_fn create_flow_table;
sai_remove_flow_table_fn remove_flow_table;
sai_set_flow_table_attribute_fn set_flow_table_attribute;
sai_get_flow_table_attribute_fn get_flow_table_attribute;
sai_bulk_object_create_fn create_flow_tables;
sai_bulk_object_remove_fn remove_flow_tables;
sai_create_flow_entry_fn create_flow_entry;
sai_remove_flow_entry_fn remove_flow_entry;
sai_set_flow_entry_attribute_fn set_flow_entry_attribute;
sai_get_flow_entry_attribute_fn get_flow_entry_attribute;
sai_bulk_create_flow_entry_fn create_flow_entries;
sai_bulk_remove_flow_entry_fn remove_flow_entries;
sai_create_flow_entry_bulk_get_session_filter_fn create_flow_entry_bulk_get_session_filter;
sai_remove_flow_entry_bulk_get_session_filter_fn remove_flow_entry_bulk_get_session_filter;
sai_set_flow_entry_bulk_get_session_filter_attribute_fn set_flow_entry_bulk_get_session_filter_attribute;
sai_get_flow_entry_bulk_get_session_filter_attribute_fn get_flow_entry_bulk_get_session_filter_attribute;
sai_bulk_object_create_fn create_flow_entry_bulk_get_session_filters;
sai_bulk_object_remove_fn remove_flow_entry_bulk_get_session_filters;
sai_create_flow_entry_bulk_get_session_fn create_flow_entry_bulk_get_session;
sai_remove_flow_entry_bulk_get_session_fn remove_flow_entry_bulk_get_session;
sai_set_flow_entry_bulk_get_session_attribute_fn set_flow_entry_bulk_get_session_attribute;
sai_get_flow_entry_bulk_get_session_attribute_fn get_flow_entry_bulk_get_session_attribute;
sai_bulk_object_create_fn create_flow_entry_bulk_get_sessions;
sai_bulk_object_remove_fn remove_flow_entry_bulk_get_sessions;
} sai_dash_flow_api_t;
/**
* @}
*/
#endif /** __SAIEXPERIMENTALDASHFLOW_H_ */