blob: f93fe8e7e3412b4d977b3f930536f3c95ed14baa [file] [log] [blame]
/*
* Copyright (c) 2016 Intel Corporation
* Copyright (c) 2022 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file zperf.h
*
* @brief Zperf API
* @defgroup zperf Zperf API
* @ingroup networking
* @{
*/
#ifndef ZEPHYR_INCLUDE_NET_ZPERF_H_
#define ZEPHYR_INCLUDE_NET_ZPERF_H_
#include <zephyr/net/net_ip.h>
#ifdef __cplusplus
extern "C" {
#endif
enum zperf_status {
ZPERF_SESSION_STARTED,
ZPERF_SESSION_FINISHED,
ZPERF_SESSION_ERROR
} __packed;
struct zperf_upload_params {
struct sockaddr peer_addr;
uint32_t duration_ms;
uint32_t rate_kbps;
uint16_t packet_size;
struct {
uint8_t tos;
} options;
};
struct zperf_download_params {
uint16_t port;
};
struct zperf_results {
uint32_t nb_packets_sent;
uint32_t nb_packets_rcvd;
uint32_t nb_packets_lost;
uint32_t nb_packets_outorder;
uint32_t total_len;
uint32_t time_in_us;
uint32_t jitter_in_us;
uint32_t client_time_in_us;
uint32_t packet_size;
uint32_t nb_packets_errors;
};
/**
* @brief Zperf callback function used for asynchronous operations.
*
* @param status Session status.
* @param result Session results. May be NULL for certain events.
* @param user_data A pointer to the user provided data.
*/
typedef void (*zperf_callback)(enum zperf_status status,
struct zperf_results *result,
void *user_data);
/**
* @brief Synchronous UDP upload operation. The function blocks until the upload
* is complete.
*
* @param param Upload parameters.
* @param result Session results.
*
* @return 0 if session completed successfully, a negative error code otherwise.
*/
int zperf_udp_upload(const struct zperf_upload_params *param,
struct zperf_results *result);
/**
* @brief Synchronous TCP upload operation. The function blocks until the upload
* is complete.
*
* @param param Upload parameters.
* @param result Session results.
*
* @return 0 if session completed successfully, a negative error code otherwise.
*/
int zperf_tcp_upload(const struct zperf_upload_params *param,
struct zperf_results *result);
/**
* @brief Asynchronous UDP upload operation.
*
* @note Only one asynchronous upload can be performed at a time.
*
* @param param Upload parameters.
* @param callback Session results callback.
* @param user_data A pointer to the user data to be provided with the callback.
*
* @return 0 if session was scheduled successfully, a negative error code
* otherwise.
*/
int zperf_udp_upload_async(const struct zperf_upload_params *param,
zperf_callback callback, void *user_data);
/**
* @brief Asynchronous TCP upload operation.
*
* @note Only one asynchronous upload can be performed at a time.
*
* @param param Upload parameters.
* @param callback Session results callback.
* @param user_data A pointer to the user data to be provided with the callback.
*
* @return 0 if session was scheduled successfully, a negative error code
* otherwise.
*/
int zperf_tcp_upload_async(const struct zperf_upload_params *param,
zperf_callback callback, void *user_data);
/**
* @brief Start UDP server.
*
* @note Only one UDP server instance can run at a time.
*
* @param param Download parameters.
* @param callback Session results callback.
* @param user_data A pointer to the user data to be provided with the callback.
*
* @return 0 if server was started, a negative error code otherwise.
*/
int zperf_udp_download(const struct zperf_download_params *param,
zperf_callback callback, void *user_data);
/**
* @brief Start TCP server.
*
* @note Only one TCP server instance can run at a time.
*
* @param param Download parameters.
* @param callback Session results callback.
* @param user_data A pointer to the user data to be provided with the callback.
*
* @return 0 if server was started, a negative error code otherwise.
*/
int zperf_tcp_download(const struct zperf_download_params *param,
zperf_callback callback, void *user_data);
/**
* @brief Stop UDP server.
*
* @return 0 if server was stopped successfully, a negative error code otherwise.
*/
int zperf_udp_download_stop(void);
/**
* @brief Stop TCP server.
*
* @return 0 if server was stopped successfully, a negative error code otherwise.
*/
int zperf_tcp_download_stop(void);
#ifdef __cplusplus
}
#endif
/**
* @}
*/
#endif /* ZEPHYR_INCLUDE_NET_ZPERF_H_ */