blob: 32ef356b0ac7ba84b7a2211714a7919b19040a96 [file] [log] [blame]
/*
**************************************************************************
* Copyright (c) 2014-2015, 2017, 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_sjack.h
* NSS SJACK interface definitions.
*/
#ifndef __NSS_SJACK_H
#define __NSS_SJACK_H
/**
* @addtogroup nss_sjack_subsystem
* @{
*/
/**
* nss_sjack_msg_types
* Message types for SJACK requests and responses.
*/
enum nss_sjack_msg_types {
NSS_SJACK_CONFIGURE_MSG,
NSS_SJACK_UNCONFIGURE_MSG,
NSS_SJACK_STATS_SYNC_MSG,
NSS_SJACK_MAX_MSG_TYPE
};
/**
* nss_sjack_configure_msg
* Message information for configuring the SJACK interface.
*/
struct nss_sjack_configure_msg {
uint32_t ingress_if_num;
/**< Ingress interface number corresponding to the SJACK device. */
uint32_t egress_if_num;
/**< Egress interface number corresponding to the SJACK device. */
uint16_t tunnel_id; /**< SJACK tunnel ID. */
uint8_t ip_dscp; /**< Differentiated services code point value. */
uint8_t gre_prio; /**< GRE priority information. */
uint8_t gre_flags; /**< GRE flags. */
uint8_t use_ipsec_sa_pattern; /**< IPsec security association pattern flag. */
};
/**
* nss_sjack_unconfigure_msg
* Message information for de-configuring the SJACK interface.
*/
struct nss_sjack_unconfigure_msg {
uint32_t ingress_if_num;
/**< Ingress interface number corresponding to the SJACK device. */
};
/**
* nss_sjack_stats_sync_msg
* Message information for SJACK synchronization statistics.
*/
struct nss_sjack_stats_sync_msg {
struct nss_cmn_node_stats node_stats; /**< Common node statistics. */
};
/**
* nss_sjack_msg
* Data for sending and receiving SJACK messages.
*/
struct nss_sjack_msg {
struct nss_cmn_msg cm; /**< Common message header. */
/**
* Payload of an SJACK message.
*/
union {
struct nss_sjack_configure_msg configure;
/**< Configure SJACK. */
struct nss_sjack_unconfigure_msg unconfigure;
/**< De-configure SJACK. */
struct nss_sjack_stats_sync_msg stats_sync;
/**< Synchronized statistics for SJACK. */
} msg; /**< Message payload for SJACK interface messages exchanged with NSS core. */
};
/**
* Callback function for receiving SJACK 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_sjack_msg_callback_t)(void *app_data, struct nss_cmn_msg *msg);
/**
* nss_sjack_register_if
* Registers with the NSS for sending and receiving SJACK messages.
*
* @datatypes
* net_device \n
* nss_sjack_msg_callback_t
*
* @param[in] dev Pointer to the associated network device.
* @param[in] if_num NSS interface number.
* @param[in] event_callback Callback for the message.
*
* @return
* Pointer to the NSS core context.
*/
extern struct nss_ctx_instance *nss_sjack_register_if(uint32_t if_num, struct net_device *dev, nss_sjack_msg_callback_t event_callback);
/**
* nss_sjack_unregister_if
* Deregisters the SJACK interface from the NSS.
*
* @param[in] if_num NSS interface number.
*
* @return
* None.
*
* @dependencies
* The interface must have been previously registered.
*/
extern void nss_sjack_unregister_if(uint32_t if_num);
/**
* nss_sjack_tx_msg
* Send SJACK messages to the NSS.
*
* @datatypes
* nss_ctx_instance \n
* nss_sjack_msg
*
* @param[in,out] 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_sjack_tx_msg(struct nss_ctx_instance *nss_ctx, struct nss_sjack_msg *msg);
/** @} */ /* end_addtogroup nss_sjack_subsystem */
#endif /* __NSS_SJACK_H */