blob: b271841c80678dd2f6b40493bcdfc25b047a58d7 [file] [log] [blame]
/*
**************************************************************************
* Copyright (c) 2014-2015, 2017-2021, The Linux Foundation. All rights reserved.
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all copies.
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
**************************************************************************
*/
/**
* @file nss_gre_redir.h
* NSS GRE Redirect interface definitions.
*/
#ifndef __NSS_GRE_REDIR_H
#define __NSS_GRE_REDIR_H
/**
* @addtogroup nss_gre_redirect_subsystem
* @{
*/
#define NSS_GRE_REDIR_MAX_INTERFACES 24 /**< Maximum number of redirect interfaces. */
#define NSS_GRE_REDIR_IP_DF_OVERRIDE_FLAG 0x80 /**< Override Do not Fragment bit in IPv4 flags. */
#define NSS_GRE_REDIR_PER_PACKET_METADATA_OFFSET 4 /**< Offset of per packet metadata from start of packet. */
#define NSS_GRE_REDIR_MAX_RADIO 5 /**< Maximum number of radios. */
#define NSS_GRE_REDIR_HEADER_VERSION 0 /**< Version for GRE header. */
/**
* nss_gre_redir_ip_hdr_type
* IP header types.
*/
enum nss_gre_redir_ip_hdr_type {
NSS_GRE_REDIR_IP_HDR_TYPE_IPV4 = 1,
NSS_GRE_REDIR_IP_HDR_TYPE_IPV6 = 2,
};
/**
* nss_gre_redir_message_types
* Message types for GRE redirect requests and responses.
*/
enum nss_gre_redir_message_types {
NSS_GRE_REDIR_TX_TUNNEL_INNER_CONFIGURE_MSG, /**< Configure message for inner node. */
NSS_GRE_REDIR_TX_TUNNEL_OUTER_CONFIGURE_MSG, /**< Configure message for outer node. */
NSS_GRE_REDIR_TX_INTERFACE_MAP_MSG, /**< Interface map message. */
NSS_GRE_REDIR_TX_INTERFACE_UNMAP_MSG, /**< Interface unmap message. */
NSS_GRE_REDIR_TX_SJACK_MAP_MSG, /**< SJACK map message. */
NSS_GRE_REDIR_TX_SJACK_UNMAP_MSG, /**< SJACK unmap message. */
NSS_GRE_REDIR_RX_STATS_SYNC_MSG, /**< Statistics synchronization message. */
NSS_GRE_REDIR_EXCEPTION_DS_REG_CB_MSG, /**< Configure message to register callback. */
NSS_GRE_REDIR_MAX_MSG_TYPES, /**< Maximum message type. */
};
/**
* nss_gre_redir_error_types
* Error types for GRE redirect configuration messages.
*/
enum nss_gre_redir_error_types {
NSS_GRE_REDIR_ERROR_NONE, /**< Configuration successful. */
NSS_GRE_REDIR_ERROR_UNKNOWN_MSG_TYPE, /**< Unknown configuration message type error. */
NSS_GRE_REDIR_ERROR_INVALID_IP_HDR_TYPE, /**< Invalid IP header type error. */
NSS_GRE_REDIR_ERROR_MAP_TABLE_FULL, /**< Map table full error. */
NSS_GRE_REDIR_ERROR_MAP_INVALID_PARAM, /**< Invalid parameter with map message error. */
NSS_GRE_REDIR_ERROR_UNMAP_INVALID_PARAM, /**< Invalid parameter with unmap message error. */
NSS_GRE_REDIR_ERROR_ENCAP_MAP_EXIST, /**< Encapsulation map entry already exist. */
NSS_GRE_REDIR_ERROR_DECAP_MAP_EXIST, /**< Decapsulation map entry already exist. */
NSS_GRE_REDIR_ERROR_ENCAP_MAP_ALLOC_FAIL, /**< Encapsulation map entry allocation failure error. */
NSS_GRE_REDIR_ERROR_DECAP_MAP_ALLOC_FAIL, /**< Decapsulation map entry allocation failure error. */
NSS_GRE_REDIR_ERROR_ENCAP_ENTRY_UNMAPPED, /**< Encapsulation map entry already unmapped. */
NSS_GRE_REDIR_ERROR_DECAP_ENTRY_UNMAPPED, /**< Decapsulation map entry already unmapped. */
NSS_GRE_REDIR_ERROR_INVALID_ETH_IF, /**< Invalid Ethernet NSS interface. */
NSS_GRE_REDIR_ERROR_INVALID_VAP_NEXTHOP_IF, /**< Invalid nexthop NSS interface. */
NSS_GRE_REDIR_ERROR_INVALID_PEER_INTERFACE, /**< Invalid peer interface during tunnel configuration. */
};
/**
* nss_gre_redir_tunnel_types
* GRE tunnel types.
*/
enum nss_gre_redir_tunnel_types {
NSS_GRE_REDIR_TUNNEL_TYPE_UNKNOWN, /**< Reserved. */
NSS_GRE_REDIR_TUNNEL_TYPE_TUN, /**< Tunnel mode. */
NSS_GRE_REDIR_TUNNEL_TYPE_DTUN, /**< D-tunnel mode. */
NSS_GRE_REDIR_TUNNEL_TYPE_SPLIT, /**< Split mode. */
NSS_GRE_REDIR_TUNNEL_TYPE_MAX, /**< Maximum tunnel type. */
};
/**
* nss_gre_redir_stats_types
* GRE redirect statistics types.
*/
enum nss_gre_redir_stats_types {
NSS_GRE_REDIR_STATS_TX_DROPS = NSS_STATS_NODE_MAX,
/**< Dropped transmit packets. */
NSS_GRE_REDIR_STATS_SJACK_RX_PKTS, /**< SJACK receive packet counter. */
NSS_GRE_REDIR_STATS_SJACK_TX_PKTS, /**< SJACK transmit packet counter. */
NSS_GRE_REDIR_STATS_OFFLOAD_RX_PKTS_0, /**< Offload receive packet counter 0. */
NSS_GRE_REDIR_STATS_OFFLOAD_RX_PKTS_1, /**< Offload receive packet counter 1. */
NSS_GRE_REDIR_STATS_OFFLOAD_RX_PKTS_2, /**< Offload receive packet counter 2. */
NSS_GRE_REDIR_STATS_OFFLOAD_RX_PKTS_3, /**< Offload receive packet counter 3. */
NSS_GRE_REDIR_STATS_OFFLOAD_RX_PKTS_4, /**< Offload receive packet counter 4. */
NSS_GRE_REDIR_STATS_OFFLOAD_TX_PKTS_0, /**< Offload transmit packet counter 0. */
NSS_GRE_REDIR_STATS_OFFLOAD_TX_PKTS_1, /**< Offload transmit packet counter 1. */
NSS_GRE_REDIR_STATS_OFFLOAD_TX_PKTS_2, /**< Offload transmit packet counter 2. */
NSS_GRE_REDIR_STATS_OFFLOAD_TX_PKTS_3, /**< Offload transmit packet counter 3. */
NSS_GRE_REDIR_STATS_OFFLOAD_TX_PKTS_4, /**< Offload transmit packet counter 4. */
NSS_GRE_REDIR_STATS_EXCEPTION_US_RX_PKTS,
/**< Upstream exception receive packet counter. */
NSS_GRE_REDIR_STATS_EXCEPTION_US_TX_PKTS,
/**< Upstream exception transmit packet counter. */
NSS_GRE_REDIR_STATS_EXCEPTION_DS_RX_PKTS,
/**< Downstream exception receive packet counter. */
NSS_GRE_REDIR_STATS_EXCEPTION_DS_TX_PKTS,
/**< Downstream exception transmit packet counter. */
NSS_GRE_REDIR_STATS_ENCAP_SG_ALLOC_DROP,
/**< Encapsulation drop counters due to scatter gather buffer allocation failure. */
NSS_GRE_REDIR_STATS_DECAP_FAIL_DROP,
/**< Decapsulation drop counters due to invalid IP header. */
NSS_GRE_REDIR_STATS_DECAP_SPLIT_DROP,
/**< Decapsulation drop counters due to split flow processing. */
NSS_GRE_REDIR_STATS_SPLIT_SG_ALLOC_FAIL,
/**< Split processing fail counter due to scatter gather buffer allocation failure. */
NSS_GRE_REDIR_STATS_SPLIT_LINEAR_COPY_FAIL,
/**< Split processing fail counter due to linear copy fail. */
NSS_GRE_REDIR_STATS_SPLIT_NOT_ENOUGH_TAILROOM,
/**< Split processing fail counter due to insufficient tailroom. */
NSS_GRE_REDIR_STATS_EXCEPTION_DS_INVALID_DST_DROP,
/**< Downstream exception handling fail counter due to invalid destination. */
NSS_GRE_REDIR_STATS_DECAP_EAPOL_FRAMES,
/**< Decapsulation EAPoL frame counters. */
NSS_GRE_REDIR_STATS_EXCEPTION_DS_INV_APPID,
/**< Invalid application ID for the transmit completion packets on exception downstream node. */
NSS_GRE_REDIR_STATS_HEADROOM_UNAVAILABLE,
/**< Packet headroom unavailable to write metadata. */
NSS_GRE_REDIR_STATS_TX_COMPLETION_SUCCESS,
/**< Host enqueue success count for the transmit completion packets. */
NSS_GRE_REDIR_STATS_TX_COMPLETION_DROP,
/**< Host enqueue drop count for the transmit completion packets. */
NSS_GRE_REDIR_STATS_MAX /**< Maximum statistics type. */
};
/**
* nss_gre_redir_inner_configure_msg
* Message information for configuring GRE inner node.
*/
struct nss_gre_redir_inner_configure_msg {
uint32_t ip_hdr_type; /**< IP header type (IPv4 or IPv6). */
/**
* IPv4 or IPv6 source address (lower 4 bytes are applicable for IPv4).
*/
uint32_t ip_src_addr[4];
/**
* IPv4 or IPv6 destination address (lower 4 bytes are applicable for IPv4).
*/
uint32_t ip_dest_addr[4];
/**
* The host outer-interface which handles post-encapsulation exception packets
* originating from this inner interface.
*/
uint32_t except_outerif;
uint8_t ip_df_policy; /**< Default Do Not Fragment policy for the IP header. */
uint8_t ip_ttl; /**< Time-to-live value for the IP header. */
uint8_t gre_version; /**< Header version. */
};
/**
* nss_gre_redir_outer_configure_msg
* Message information for configuring GRE outer node.
*/
struct nss_gre_redir_outer_configure_msg {
uint32_t ip_hdr_type; /**< IP header type (IPv4 or IPv6). */
/**
* The host inner-interface which handles post-decapsulation exception packets
* originating from this outer interface, for flows destined to a VAP handled
* by host.
*/
uint32_t except_hostif;
/**
* The host inner-interface which handles post-decapsulation exception packets
* originating from this outer interface, for flows destined to a VAP handled
* by NSS.
*/
uint32_t except_offlif;
/**
* The host inner-interface which handles post-decapsulation exception packets
* originating from this outer interface, for flows destined to SJACK.
*/
uint32_t except_sjackif;
/**
* CPU core to which these packets should be steered.
* - 0 -- Use core 0
* - 1 -- Use core 1
* - 2 -- Use core 2
* - 3 -- Use core 3
*/
uint8_t rps_hint;
/**
* Flag to indicate validity of RPS hint.
*/
uint8_t rps_hint_valid;
};
/**
* nss_gre_redir_exception_ds_reg_cb_msg
* Message information to register callback on VAP for GRE exception downstream.
*/
struct nss_gre_redir_exception_ds_reg_cb_msg {
uint32_t dst_vap_nssif; /**< NSS VAP interface on which the callback is registered. */
};
/**
* nss_gre_redir_interface_map_msg
* Message information for adding a VAP interface-to-tunnel ID mapping.
*/
struct nss_gre_redir_interface_map_msg {
uint32_t vap_nssif; /**< NSS VAP interface. */
uint32_t nexthop_nssif; /**< Next hop NSS interface number. */
uint16_t radio_id; /**< Radio ID to derive tunnel ID. */
uint16_t vap_id; /**< VAP ID to derive tunnel ID. */
uint16_t lag_en; /**< Flag for LAG mode. */
uint16_t tunnel_type; /**< Type of tunnel. */
/**
* IPsec security association pattern. Pattern
* 0x5A is supported only.
*/
uint8_t ipsec_pattern;
};
/**
* nss_gre_redir_interface_unmap_msg
* Message information for deleting a VAP interface-to-tunnel ID mapping.
*/
struct nss_gre_redir_interface_unmap_msg {
uint32_t vap_nssif; /**< NSS VAP interface. */
uint16_t radio_id; /**< Radio ID to derive tunnel ID. */
uint16_t vap_id; /**< VAP ID to derive tunnel ID. */
};
/**
* nss_gre_redir_sjack_map_msg
* Message information for adding an Ethernet interface-to-tunnel ID mapping.
*/
struct nss_gre_redir_sjack_map_msg {
uint32_t eth_nssif; /**< NSS Ethernet interface number. */
uint32_t eth_id; /**< Ethernet interface ID. */
/**
* IPsec security association pattern. Pattern
* 0x5A is supported only.
*/
uint8_t ipsec_pattern;
};
/**
* nss_gre_redir_sjack_unmap_msg
* Message information for deleting an Ethernet interface-to-tunnel ID mapping.
*/
struct nss_gre_redir_sjack_unmap_msg {
uint32_t eth_nssif; /**< NSS Ethernet interface number. */
uint32_t eth_id; /**< Ethernet interface ID. */
};
/**
* nss_gre_redir_stats_sync_msg
* Message information for synchronized GRE redirect statistics.
*/
struct nss_gre_redir_stats_sync_msg {
struct nss_cmn_node_stats node_stats; /**< Common node statistics. */
uint32_t sjack_rx_packets; /**< SJACK packet counter. */
uint32_t offl_rx_pkts[NSS_GRE_REDIR_MAX_RADIO]; /**< Offload packet counter. */
uint32_t encap_sg_alloc_drop; /**< Encapsulation drop counters due to scatter gather buffer allocation failure. */
uint32_t decap_fail_drop; /**< Decapsulation drop counters due to invalid IP header. */
uint32_t decap_split_drop; /**< Decapsulation drop counters due to split flow processing. */
uint32_t split_sg_alloc_fail; /**< Split processing fail counter due to scatter gather buffer allocation failure. */
uint32_t split_linear_copy_fail; /**< Split processing fail counter due to linear copy fail. */
uint32_t split_not_enough_tailroom; /**< Split processing fail counter due to insufficient tailroom. */
uint32_t exception_ds_invalid_dst_drop; /**< Downstream exception handling fail counter due to invalid destination. */
uint32_t decap_eapol_frames; /**< Decapsulation EAPoL frame counters. */
uint32_t exception_ds_inv_appid; /**< Invalid application ID for the Tx completion packets on exception downstream node. */
uint32_t headroom_unavail; /**< Packet headroom unavailable to write metadata. */
uint32_t tx_completion_success; /**< Host enqueue success count for the Tx completion packets. */
uint32_t tx_completion_drop; /**< Host enqueue drop count for the Tx completion packets. */
};
/**
* nss_gre_redir_tun_stats
* GRE redirect statistics to accumulate all stats values.
*/
struct nss_gre_redir_tun_stats {
uint64_t rx_packets; /**< Number of packets received. */
uint64_t rx_bytes; /**< Number of bytes received. */
uint64_t tx_packets; /**< Number of packets transmitted. */
uint64_t tx_bytes; /**< Number of bytes transmitted. */
uint64_t rx_dropped[NSS_MAX_NUM_PRI];
/**< Packets dropped on receive due to queue full. */
uint64_t tx_dropped; /**< Dropped transmit packets. */
uint64_t sjack_rx_packets; /**< SJACK receive packet counter. */
uint64_t sjack_tx_packets; /**< SJACK transmit packet counter. */
uint64_t offl_rx_pkts[NSS_GRE_REDIR_MAX_RADIO]; /**< Offload receive packet counter per radio. */
uint64_t offl_tx_pkts[NSS_GRE_REDIR_MAX_RADIO]; /**< Offload transmit packet counter per radio. */
uint64_t exception_us_rx; /**< Upstream exception receive packet counter. */
uint64_t exception_us_tx; /**< Upstream exception transmit packet counter. */
uint64_t exception_ds_rx; /**< Downstream exception receive packet counter. */
uint64_t exception_ds_tx; /**< Downstream exception transmit packet counter. */
uint64_t encap_sg_alloc_drop;
/**< Encapsulation drop counters due to scatter gather buffer allocation failure. */
uint64_t decap_fail_drop; /**< Decapsulation drop counters due to invalid IP header. */
uint64_t decap_split_drop; /**< Decapsulation drop counters due to split flow processing. */
uint64_t split_sg_alloc_fail;
/**< Split processing fail counter due to scatter gather buffer allocation failure. */
uint64_t split_linear_copy_fail;
/**< Split processing fail counter due to linear copy fail. */
uint64_t split_not_enough_tailroom;
/**< Split processing fail counter due to insufficient tailroom. */
uint64_t exception_ds_invalid_dst_drop;
/**< Downstream exception handling fail counter due to invalid destination. */
uint64_t decap_eapol_frames; /**< Decapsulation EAPoL frame counters. */
uint64_t exception_ds_inv_appid;
/**< Invalid application ID for the transmit completion packets on exception downstream node. */
uint64_t headroom_unavail; /**< Packet headroom unavailable to write metadata. */
uint64_t tx_completion_success; /**< Host enqueue success count for the transmit completion packets. */
uint64_t tx_completion_drop; /**< Host enqueue drop count for the transmit completion packets. */
};
/**
* nss_gre_redir_tunnel_stats
* GRE redirect statistics as seen by the HLOS.
*/
struct nss_gre_redir_tunnel_stats {
struct net_device *dev; /**< Net device. */
struct nss_gre_redir_tun_stats tstats; /**< Structure to accumulate all the statistics. */
uint32_t ref_count; /**< Reference count for statistics. */
};
/**
* nss_gre_redir_stats_notification
* GRE redirect transmission statistics structure.
*/
struct nss_gre_redir_stats_notification {
struct nss_gre_redir_tunnel_stats stats_ctx; /**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
* nss_gre_redir_msg
* Data for sending and receiving GRE tunnel redirect messages.
*/
struct nss_gre_redir_msg {
struct nss_cmn_msg cm; /**< Common message header. */
/**
* Payload of a GRE tunnel redirect message.
*/
union {
struct nss_gre_redir_inner_configure_msg inner_configure;
/**< Configure a GRE inner node. */
struct nss_gre_redir_outer_configure_msg outer_configure;
/**< Configure a GRE outer node. */
struct nss_gre_redir_interface_map_msg interface_map;
/**< Add a VAP interface-to-tunnel ID mapping. */
struct nss_gre_redir_interface_unmap_msg interface_unmap;
/**< Delete a VAP interafce-to-tunnel ID mapping. */
struct nss_gre_redir_sjack_map_msg sjack_map;
/**< Add an Ethernet interface-to-tunnel ID mapping for SJACK. */
struct nss_gre_redir_sjack_unmap_msg sjack_unmap;
/**< Delete an Ethernet interface-to-tunnel ID mapping for SJACK. */
struct nss_gre_redir_stats_sync_msg stats_sync;
/**< Synchronized tunnel statistics. */
struct nss_gre_redir_exception_ds_reg_cb_msg exception_ds_configure;
/**< Registering callback on VAP for the GRE downstream flows. */
} msg; /**< Message payload for GRE redirect messages exchanged with NSS core. */
};
/**
* nss_gre_redir_encap_per_pkt_metadata
* Metadata information for an HLOS-to-NSS packet.
*/
struct nss_gre_redir_encap_per_pkt_metadata {
uint16_t gre_tunnel_id; /**< ID of the tunnel. */
uint8_t gre_flags; /**< Flags field from GRE header. */
uint8_t gre_prio; /**< Priority field from GRE header. */
uint8_t gre_seq; /**< Sequence number. */
uint8_t ip_dscp; /**< DSCP values. */
/**
* Override the default DF policy for the packet by setting bit 8.
* The lower 7 bits provide the DF value to be used for this packet.
*/
uint8_t ip_df_override;
/**
* IPsec security association pattern. Pattern
* 0x5A is supported only.
*/
uint8_t ipsec_pattern;
};
/**
* nss_gre_redir_decap_per_pkt_metadata
* Metadata information for an NSS-to-HLOS packet.
*/
struct nss_gre_redir_decap_per_pkt_metadata {
uint32_t src_if_num; /**< Number of the source Ethernet interface. */
uint16_t gre_tunnel_id; /**< ID of the tunnel. */
uint8_t gre_flags; /**< Flags from GRE header. */
uint8_t gre_prio; /**< Priority from GRE header. */
uint8_t gre_seq; /**< Sequence number. */
};
/**
* nss_gre_redir_exception_us_metadata
* Metadata information for upstream exception packet.
*
* Note: Additional fields need to be added by customer as required.
*/
struct nss_gre_redir_exception_us_metadata {
uint8_t tid; /**< TID value. */
};
/**
* nss_gre_redir_exception_ds_metadata
* Metadata information for downstream exception packet.
*
* Note: Additional fields need to be added by customer as required.
*/
struct nss_gre_redir_exception_ds_metadata {
uint32_t dst_vap_nssif; /**< Destination VAP interface number. */
uint8_t tid; /**< TID value. */
uint8_t app_id; /**< Application ID. */
uint16_t hw_hash_idx; /**< Hardware AST hash index value. */
uint32_t tx_status; /**< Tx status. */
};
/**
* Callback function for receiving GRE tunnel data.
*
* @datatypes
* net_device \n
* sk_buff \n
* napi_struct
*
* @param[in] netdev Pointer to the associated network device.
* @param[in] skb Pointer to the data socket buffer.
* @param[in] napi Pointer to the NAPI structure.
*/
typedef void (*nss_gre_redir_data_callback_t)(struct net_device *netdev, struct sk_buff *skb, struct napi_struct *napi);
/**
* Callback function for receiving GRE tunnel messages.
*
* @datatypes
* nss_cmn_msg
*
* @param[in] app_data Pointer to the application context of the message.
* @param[in] msg Pointer to the message data.
*/
typedef void (*nss_gre_redir_msg_callback_t)(void *app_data, struct nss_cmn_msg *msg);
/**
* nss_gre_redir_unregister_if
* Deregisters a GRE tunnel interface from the NSS.
*
* @param[in] if_num NSS interface number.
. *
* @return
* None.
*
* @dependencies
* The tunnel interface must have been previously registered.
*
* @return
* True if successful, else false.
*/
extern bool nss_gre_redir_unregister_if(uint32_t if_num);
/**
* nss_gre_redir_tx_msg
* Sends GRE redirect tunnel messages.
*
* @datatypes
* nss_ctx_instance \n
* nss_gre_redir_msg
*
* @param[in] nss_ctx Pointer to the NSS context.
* @param[in] msg Pointer to the message data.
*
* @return
* Status of the Tx operation.
*/
extern nss_tx_status_t nss_gre_redir_tx_msg(struct nss_ctx_instance *nss_ctx, struct nss_gre_redir_msg *msg);
/**
* nss_gre_redir_tx_buf
* Sends GRE redirect tunnel packets.
*
* @datatypes
* nss_ctx_instance \n
* sk_buff
*
* @param[in] nss_ctx Pointer to the NSS context.
* @param[in] os_buf Pointer to the OS buffer (e.g., skbuff).
* @param[in] if_num Tunnel interface number.
*
* @return
* Status of the Tx operation.
*/
extern nss_tx_status_t nss_gre_redir_tx_buf(struct nss_ctx_instance *nss_ctx, struct sk_buff *os_buf,
uint32_t if_num);
/**
* nss_gre_redir_tx_buf_noreuse
* Sends GRE redirect tunnel packets.
*
* Note: The buffers will be not be reused or
* kept in the accelerator.
*
* @datatypes
* nss_ctx_instance \n
* sk_buff
*
* @param[in] nss_ctx Pointer to the NSS context.
* @param[in] os_buf Pointer to the OS buffer (e.g., skbuff).
* @param[in] if_num Tunnel interface number.
*
* @return
* Status of the Tx operation.
*/
extern nss_tx_status_t nss_gre_redir_tx_buf_noreuse(struct nss_ctx_instance *nss_ctx, struct sk_buff *os_buf,
uint32_t if_num);
/**
* nss_gre_redir_stats_get
* Gets GRE redirect tunnel statistics.
*
* @datatypes
* nss_gre_redir_tunnel_stats
*
* @param[in] index Index in the tunnel statistics array.
* @param[out] stats Pointer to the tunnel statistics.
*
* @return
* TRUE or FALSE.
*/
extern bool nss_gre_redir_stats_get(int index, struct nss_gre_redir_tunnel_stats *stats);
/**
* nss_gre_redir_alloc_and_register_node
* Allocates and registers GRE redirect dynamic node with NSS.
*
* @datatypes
* net_device \n
* nss_gre_redir_data_callback_t \n
* nss_gre_redir_msg_callback_t \n
*
* @param[in] dev Pointer to the associated network device.
* @param[in] data_cb Callback for the data.
* @param[in] msg_cb Callback for the message.
* @param[in] type Type of dynamic node.
* @param[in] app_ctx Application context for notify callback.
*
* @return
* NSS interface number allocated.
*/
extern int nss_gre_redir_alloc_and_register_node(struct net_device *dev,
nss_gre_redir_data_callback_t data_cb,
nss_gre_redir_msg_callback_t msg_cb,
uint32_t type, void *app_ctx);
/**
* nss_gre_redir_configure_inner_node
* Configures inner GRE redirect node.
*
* @datatypes
* nss_gre_redir_inner_configure_msg
*
* @param[in] ifnum NSS interface number.
* @param[in] ngrcm Inner node configuration message.
*
* @return
* Status of Tx operation.
*/
extern nss_tx_status_t nss_gre_redir_configure_inner_node(int ifnum,
struct nss_gre_redir_inner_configure_msg *ngrcm);
/**
* nss_gre_redir_configure_outer_node
* Configures outer GRE redirect node.
*
* @datatypes
* nss_gre_redir_outer_configure_msg
*
* @param[in] ifnum NSS interface number.
* @param[in] ngrcm Outer node configuration message.
*
* @return
* Status of Tx operation.
*/
extern nss_tx_status_t nss_gre_redir_configure_outer_node(int ifnum,
struct nss_gre_redir_outer_configure_msg *ngrcm);
/**
* nss_gre_redir_exception_ds_reg_cb
* Configure a callback on VAP for downstream GRE exception flows.
*
* @datatypes
* nss_gre_redir_exception_ds_reg_cb_msg
*
* @param[in] ifnum NSS interface number.
* @param[in] ngrcm Downstream exception callback registration message.
*
* @return
* Status of Tx operation.
*/
extern nss_tx_status_t nss_gre_redir_exception_ds_reg_cb(int ifnum,
struct nss_gre_redir_exception_ds_reg_cb_msg *ngrcm);
/**
* nss_gre_redir_tx_msg_sync
* Sends messages to NSS firmware synchronously.
*
* @datatypes
* nss_ctx_instance \n
* nss_gre_redir_msg
*
* @param[in] nss_ctx NSS core context.
* @param[in] ngrm Pointer to GRE redirect message data.
*
* @return
* Status of Tx operation.
*/
extern nss_tx_status_t nss_gre_redir_tx_msg_sync(struct nss_ctx_instance *nss_ctx, struct nss_gre_redir_msg *ngrm);
/**
* nss_gre_redir_get_context
* Gets the GRE redirect context.
*
* @return
* Pointer to the NSS core context.
*/
extern struct nss_ctx_instance *nss_gre_redir_get_context(void);
/**
* nss_gre_redir_get_dentry
* Returns directory entry created in debugfs for statistics.
*
* @return
* Pointer to created directory entry for GRE redirect.
*/
extern struct dentry *nss_gre_redir_get_dentry(void);
/**
* nss_gre_redir_get_device
* Gets the original device from probe.
*
* @return
* Pointer to the device.
*/
extern struct device *nss_gre_redir_get_device(void);
/**
* nss_gre_redir_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_redir_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_gre_redir_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_redir_stats_register_notifier(struct notifier_block *nb);
/**
* @}
*/
#endif /* __NSS_GRE_REDIR_H */