| /* |
| ************************************************************************** |
| * Copyright (c) 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_udp_st.h |
| * UDP Speed Test Subsystem interface definitions. |
| */ |
| |
| #ifndef __NSS_UDP_ST_H |
| #define __NSS_UDP_ST_H |
| |
| /** |
| * @addtogroup nss_udp_st_subsystem |
| * @{ |
| */ |
| |
| #define NSS_UDP_ST_TX_CONN_MAX 16 |
| #define NSS_UDP_ST_FLAG_IPV4 4 /**< L3 Protocol - IPv4. */ |
| #define NSS_UDP_ST_FLAG_IPV6 6 /**< L3 Protocol - IPv6. */ |
| |
| /** |
| * nss_udp_st_message_types |
| * UDP speed test message types. |
| */ |
| enum nss_udp_st_message_types { |
| NSS_UDP_ST_START_MSG, /**< Start message. */ |
| NSS_UDP_ST_STOP_MSG, /**< Stop message. */ |
| NSS_UDP_ST_CFG_RULE_MSG, /**< Configure IPv4/IPv6 rule. */ |
| NSS_UDP_ST_UNCFG_RULE_MSG, /**< Unconfigure IPv4/IPv6 rule. */ |
| NSS_UDP_ST_STATS_SYNC_MSG, /**< Statistic syncronization. */ |
| NSS_UDP_ST_TX_CREATE_MSG, /**< Create transmit node. */ |
| NSS_UDP_ST_TX_DESTROY_MSG, /**< Destroy transmit node. */ |
| NSS_UDP_ST_RESET_STATS_MSG, /**< Reset existing statistics. */ |
| NSS_UDP_ST_MAX_MSG_TYPES, /**< Maximum message type. */ |
| }; |
| |
| /** |
| * nss_udp_st_test_types |
| * Test types of the UDP speed test. |
| */ |
| enum nss_udp_st_test_types { |
| NSS_UDP_ST_TEST_RX, /**< Test type is receive. */ |
| NSS_UDP_ST_TEST_TX, /**< Test type is transmit. */ |
| NSS_UDP_ST_TEST_MAX /**< Maximum test type. */ |
| }; |
| |
| /** |
| * nss_udp_st_error |
| * UDP speed test error types. |
| */ |
| enum nss_udp_st_error { |
| NSS_UDP_ST_ERROR_NONE, /**< No error. */ |
| NSS_UDP_ST_ERROR_INCORRECT_RATE, /**< Incorrect Tx rate. */ |
| NSS_UDP_ST_ERROR_INCORRECT_BUFFER_SIZE, /**< Incorrect buffer size. */ |
| NSS_UDP_ST_ERROR_MEMORY_FAILURE, /**< Memory allocation failed. */ |
| NSS_UDP_ST_ERROR_INCORRECT_STATE, /**< Trying to configure during incorrect state. */ |
| NSS_UDP_ST_ERROR_INCORRECT_FLAGS, /**< Incorrect flag configuration. */ |
| NSS_UDP_ST_ERROR_ENTRY_EXIST, /**< Given tunnel entry already exists. */ |
| NSS_UDP_ST_ERROR_ENTRY_ADD_FAILED, /**< UDP ST Encap entry addition failed. */ |
| NSS_UDP_ST_ERROR_ENTRY_NOT_EXIST, /**< Given tunnel entry does not exists. */ |
| NSS_UDP_ST_ERROR_WRONG_START_MSG_TYPE, /**< Start message type error. */ |
| NSS_UDP_ST_ERROR_WRONG_STOP_MSG_TYPE, /**< Stop message type error. */ |
| NSS_UDP_ST_ERROR_TOO_MANY_USERS, /**< Too many users tried to be added. */ |
| NSS_UDP_ST_ERROR_UNKNOWN_MSG_TYPE, /**< Unknown message type failure. */ |
| NSS_UDP_ST_ERROR_PB_ALLOC, /**< Pbuf allocation failed. */ |
| NSS_UDP_ST_ERROR_PB_SIZE, /**< Pbuf size is too small to fit buffer. */ |
| NSS_UDP_ST_ERROR_DROP_QUEUE, /**< Packet dropped enqueue next node. */ |
| UDP_ST_ERROR_TIMER_MISSED, /**< Timer call is missed. */ |
| NSS_UDP_ST_ERROR_MAX, /**< Maximum error type. */ |
| }; |
| |
| /** |
| * nss_udp_st_stats_time |
| * UDP speed test time statistics types. |
| */ |
| enum nss_udp_st_stats_time { |
| NSS_UDP_ST_STATS_TIME_START, /**< Start time of the test. */ |
| NSS_UDP_ST_STATS_TIME_CURRENT, /**< Current time of the running test. */ |
| NSS_UDP_ST_STATS_TIME_ELAPSED, /**< Elapsed time of the current test. */ |
| NSS_UDP_ST_STATS_TIME_MAX /**< Maximum time statistics. */ |
| }; |
| |
| /** |
| * Create TX node to start pushing rules. |
| */ |
| struct nss_udp_st_tx_create { |
| uint32_t rate; /**< Rate in Mbps. */ |
| uint32_t buffer_size; /**< UDP buffer size. */ |
| uint8_t dscp; /**< DSCP value. */ |
| }; |
| |
| /** |
| * Destroy Tx node. |
| */ |
| struct nss_udp_st_tx_destroy { |
| uint32_t flag; /**< Tx destroy flag. */ |
| }; |
| |
| /** |
| * NSS UDP speed test start structure. |
| */ |
| struct nss_udp_st_start { |
| uint32_t type; /**< Started test type (for example, receive or transmit). */ |
| |
| }; |
| |
| /** |
| * NSS UDP speed test stop structure. |
| */ |
| struct nss_udp_st_stop { |
| uint32_t type; /**< Stopped test type (for example, receive or transmit). */ |
| }; |
| |
| /** |
| * NSS UDP speed test ip structure |
| */ |
| struct nss_udp_st_ip { |
| union { |
| uint32_t ipv4; /**< IPv4 address. */ |
| uint32_t ipv6[4]; /**< IPv6 address. */ |
| } ip; |
| }; |
| |
| /** |
| * NSS UDP speed test IPv4/IPv6 configuration structure. |
| */ |
| struct nss_udp_st_cfg { |
| struct nss_udp_st_ip src_ip; /**< Source IP address. */ |
| int32_t src_port; /**< Source L4 port. */ |
| struct nss_udp_st_ip dest_ip; /**< Destination IP address. */ |
| int32_t dest_port; /**< Destination L4 port. */ |
| uint32_t type; /**< Started test type (for example, receive or transmit). */ |
| uint16_t ip_version; /**< IP version to indicate IPv4 or IPv6. */ |
| }; |
| |
| /** |
| * NSS UDP speed test node statistics structure. |
| */ |
| struct nss_udp_st_node_stats { |
| struct nss_cmn_node_stats node_stats; /**< Common node statistics for the UDP speed test. */ |
| uint32_t errors[NSS_UDP_ST_ERROR_MAX]; /**< Error statistics. */ |
| }; |
| |
| /** |
| * NSS UDP speed test statistics structure. |
| */ |
| struct nss_udp_st_stats { |
| struct nss_udp_st_node_stats nstats; /**< Node statistics for the UDP speed test. */ |
| uint32_t time_stats[NSS_UDP_ST_TEST_MAX][NSS_UDP_ST_STATS_TIME_MAX]; |
| /**< Time statistics. */ |
| }; |
| |
| /** |
| * NSS UDP speed test reset statistics structure. |
| */ |
| struct nss_udp_st_reset_stats { |
| uint32_t flag; /**< Reset statistics flag. */ |
| }; |
| |
| /** |
| * Message structure of the UDP speed test commands. |
| */ |
| struct nss_udp_st_msg { |
| struct nss_cmn_msg cm; /**< Message header. */ |
| union { |
| struct nss_udp_st_tx_create create; /**< Prepare transmit message. */ |
| struct nss_udp_st_tx_destroy destroy; /**< Destroy transmit message. */ |
| struct nss_udp_st_start start; /**< Start message. */ |
| struct nss_udp_st_stop stop; /**< Stop message. */ |
| struct nss_udp_st_cfg cfg; /**< IPv4/IPv6 configuration message. */ |
| struct nss_udp_st_cfg uncfg; /**< IPv4/IPv6 unconfiguration message. */ |
| struct nss_udp_st_stats stats; /**< Statistics synchronization message. */ |
| struct nss_udp_st_reset_stats reset_stats; |
| /**< Reset statistics message. */ |
| } msg; |
| }; |
| |
| /** |
| * Callback function for receiving UDP speed test messages. |
| * |
| * @datatypes |
| * nss_udp_st_msg |
| * |
| * @param[in] app_data Pointer to the application context of the message. |
| * @param[in] msg Pointer to the message data. |
| */ |
| typedef void (*nss_udp_st_msg_callback_t)(void *app_data, struct nss_udp_st_msg *msg); |
| |
| /** |
| * nss_udp_st_register_handler |
| * Registers the UDP speed test message handler. |
| * |
| * @datatypes |
| * nss_ctx_instance |
| * |
| * @param[in] nss_ctx Pointer to the NSS context. |
| * |
| * @return |
| * None. |
| */ |
| extern void nss_udp_st_register_handler(struct nss_ctx_instance *nss_ctx); |
| |
| /** |
| * nss_udp_st_tx |
| * Transmits a UDP speed test message to the NSS. |
| * |
| * @datatypes |
| * nss_ctx_instance \n |
| * nss_udp_st_msg |
| * |
| * @param[in] nss_ctx Pointer to the NSS context. |
| * @param[in] num Pointer to the message data. |
| * |
| * @return |
| * Status of the transmit operation. |
| */ |
| extern nss_tx_status_t nss_udp_st_tx(struct nss_ctx_instance *nss_ctx, struct nss_udp_st_msg *num); |
| |
| /** |
| * nss_udp_st_tx_sync |
| * Transmits a synchronous UDP speed test message to the NSS. |
| * |
| * @datatypes |
| * nss_ctx_instance \n |
| * nss_udp_st_msg |
| * |
| * @param[in] nss_ctx Pointer to the NSS context. |
| * @param[in] num Pointer to the message data. |
| * |
| * @return |
| * Status of the transmit operation. |
| */ |
| extern nss_tx_status_t nss_udp_st_tx_sync(struct nss_ctx_instance *nss_ctx, struct nss_udp_st_msg *num); |
| |
| /** |
| * nss_udp_st_msg_init |
| * Initializes UDP speed test messages. |
| * |
| * @datatypes |
| * nss_udp_st_msg \n |
| * nss_udp_st_msg_callback_t |
| * |
| * @param[in,out] num Pointer to the NSS interface message. |
| * @param[in] if_num NSS interface number. |
| * @param[in] type Type of message. |
| * @param[in] len Size of the payload. |
| * @param[in] cb Callback function for the message. |
| * @param[in] app_data Pointer to the application context of the message. |
| * |
| * @return |
| * None. |
| */ |
| extern void nss_udp_st_msg_init(struct nss_udp_st_msg *num, uint16_t if_num, uint32_t type, uint32_t len, |
| nss_udp_st_msg_callback_t cb, void *app_data); |
| |
| /** |
| * nss_udp_st_get_mgr |
| * Gets the NSS context that is managing UDP speed sest processes. |
| * |
| * @return |
| * Pointer to the NSS core context. |
| */ |
| extern struct nss_ctx_instance *nss_udp_st_get_mgr(void); |
| |
| /** |
| *@} |
| */ |
| |
| #endif /* __NSS_UDP_ST_H */ |