Morse Micro IoT SDK  2.10.4
mmiperf.h
1/*
2 * Copyright 2021-2024 Morse Micro
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
16#pragma once
17
18#include <stdbool.h>
19#include <stdint.h>
20
21#ifdef __cplusplus
22extern "C"
23{
24#endif
25
28#define BLOCK_DURATION_MS 200
29
31#define IPV6_HEADER_SIZE_DIFF (20)
32
34#define MMIPERF_DEFAULT_PORT (5001)
36#define MMIPERF_DEFAULT_UDP_PACKET_SIZE_V4 (1460)
38#define MMIPERF_DEFAULT_UDP_PACKET_SIZE_V6 (1440)
41#define MMIPERF_DEFAULT_AMOUNT (-1000)
43#define MMIPERF_DEFAULT_BANDWIDTH (0)
44
46#define MMIPERF_IPADDR_MAXLEN (48)
47
48#ifndef MMIPERF_STACK_SIZE
50#define MMIPERF_STACK_SIZE 512
51#endif
52
55{
74};
75
78{
85};
86
89{
94};
95
97typedef struct mmiperf_state *mmiperf_handle_t;
98
101{
107 uint16_t local_port;
111 uint16_t remote_port;
115 uint32_t duration_ms;
119 uint32_t tx_frames;
121 uint32_t rx_frames;
125 uint32_t error_count;
127 uint32_t ipg_count;
134 uint32_t ipg_sum_ms;
135};
136
144typedef void (
145 *mmiperf_report_fn)(const struct mmiperf_report *report, void *arg, mmiperf_handle_t handle);
146
158{
162 uint16_t server_port;
164 uint32_t target_bw;
169 uint32_t packet_size;
172 int32_t amount;
179};
180
182#define MMIPERF_CLIENT_ARGS_DEFAULT \
183 { \
184 { 0 }, MMIPERF_DEFAULT_PORT, MMIPERF_DEFAULT_BANDWIDTH, 0, MMIPERF_DEFAULT_AMOUNT, NULL, \
185 NULL, IPERF_VERSION_2_0_13, \
186 }
187
199{
203 uint16_t local_port;
210};
211
213#define MMIPERF_SERVER_ARGS_DEFAULT \
214 { \
215 { 0 }, MMIPERF_DEFAULT_PORT, NULL, NULL, IPERF_VERSION_2_0_13, \
216 }
217
226
235
244
253
266
267#ifdef __cplusplus
268}
269#endif
270
mmiperf_handle_t mmiperf_start_tcp_client(const struct mmiperf_client_args *args)
Start a TCP iperf client.
traffic_agent_state
Enumeration of traffic agent state.
Definition: mmiperf.h:78
mmiperf_handle_t mmiperf_start_udp_client(const struct mmiperf_client_args *args)
Start a UDP iperf client.
mmiperf_report_type
Enumeration of iperf report types.
Definition: mmiperf.h:55
mmiperf_handle_t mmiperf_start_udp_server(const struct mmiperf_server_args *args)
Start a UDP iperf server.
iperf_version
Enumeration of Iperf versions.
Definition: mmiperf.h:89
#define MMIPERF_IPADDR_MAXLEN
Maximum length of an IP address string including null-terminator.
Definition: mmiperf.h:46
struct mmiperf_state * mmiperf_handle_t
Iperf client/server handle.
Definition: mmiperf.h:97
void(* mmiperf_report_fn)(const struct mmiperf_report *report, void *arg, mmiperf_handle_t handle)
Report callback function prototype.
Definition: mmiperf.h:145
mmiperf_handle_t mmiperf_start_tcp_server(const struct mmiperf_server_args *args)
Start a TCP iperf server.
bool mmiperf_get_interim_report(mmiperf_handle_t handle, struct mmiperf_report *report)
Retrieve report for an in progress iperf session.
@ TRAFFIC_AGENT_STOPPED
Traffic agent has stopped.
Definition: mmiperf.h:84
@ TRAFFIC_AGENT_NOT_STARTED
Traffic agent has not started.
Definition: mmiperf.h:80
@ TRAFFIC_AGENT_RUNNING
Traffic agent is running.
Definition: mmiperf.h:82
@ MMIPERF_UDP_DONE_CLIENT
The client side test is done.
Definition: mmiperf.h:71
@ MMIPERF_TCP_ABORTED_LOCAL_TXERROR
Transmit error lead to test abort.
Definition: mmiperf.h:65
@ MMIPERF_INTERRIM_REPORT
Interrim report requested via mmiperf_get_interim_report().
Definition: mmiperf.h:73
@ MMIPERF_TCP_ABORTED_LOCAL
Local error lead to test abort.
Definition: mmiperf.h:61
@ MMIPERF_TCP_DONE_CLIENT
The client side test is done.
Definition: mmiperf.h:59
@ MMIPERF_TCP_ABORTED_REMOTE
Remote side aborted the test.
Definition: mmiperf.h:67
@ MMIPERF_TCP_ABORTED_LOCAL_DATAERROR
Data check error lead to test abort.
Definition: mmiperf.h:63
@ MMIPERF_UDP_DONE_SERVER
The server side test is done.
Definition: mmiperf.h:69
@ MMIPERF_TCP_DONE_SERVER
The server side test is done.
Definition: mmiperf.h:57
@ IPERF_VERSION_2_0_13
Iperf version 2.0.13.
Definition: mmiperf.h:91
@ IPERF_VERSION_2_0_9
Iperf version 2.0.9.
Definition: mmiperf.h:93
Iperf client arguments data structure.
Definition: mmiperf.h:158
char server_addr[MMIPERF_IPADDR_MAXLEN]
IP address of iperf server to communicate with (as a string).
Definition: mmiperf.h:160
uint32_t packet_size
Packet size to use.
Definition: mmiperf.h:169
mmiperf_report_fn report_fn
Report callback function to invoke on completion/abort.
Definition: mmiperf.h:174
uint32_t target_bw
Bandwidth limit (in kbps) to communicate with (0 indicates no limit).
Definition: mmiperf.h:164
int32_t amount
If positive specifies how many bytes to transfer; if negative the absolute value specifies the durati...
Definition: mmiperf.h:172
void * report_arg
Opaque argument to pass to the report callback.
Definition: mmiperf.h:176
enum iperf_version version
Iperf version used to parse packet header.
Definition: mmiperf.h:178
uint16_t server_port
Port on iperf server to communicate with.
Definition: mmiperf.h:162
Report data structure.
Definition: mmiperf.h:101
uint32_t ipg_sum_ms
Sum of inter-packet gaps (UDP only).
Definition: mmiperf.h:134
enum mmiperf_report_type report_type
Type of report.
Definition: mmiperf.h:103
char local_addr[MMIPERF_IPADDR_MAXLEN]
Local address (as string).
Definition: mmiperf.h:105
uint16_t local_port
Local port.
Definition: mmiperf.h:107
uint16_t remote_port
Remote port.
Definition: mmiperf.h:111
uint32_t bandwidth_kbitpsec
Average throughput in kbps.
Definition: mmiperf.h:117
uint32_t rx_frames
Number of frames received during test (UDP only).
Definition: mmiperf.h:121
char remote_addr[MMIPERF_IPADDR_MAXLEN]
Remote address (as string).
Definition: mmiperf.h:109
uint32_t out_of_sequence_frames
Number of out of sequence frames received during test (UDP only).
Definition: mmiperf.h:123
uint32_t ipg_count
Number of inter-packet gaps (UDP only).
Definition: mmiperf.h:127
uint64_t bytes_transferred
Number of bytes of data transferred during test.
Definition: mmiperf.h:113
uint32_t tx_frames
Number of frames transmitted during test (UDP only).
Definition: mmiperf.h:119
uint32_t duration_ms
Duration of the test in milliseconds.
Definition: mmiperf.h:115
uint32_t error_count
Number of packet errors (UDP only).
Definition: mmiperf.h:125
Iperf server arguments data structure.
Definition: mmiperf.h:199
enum iperf_version version
Iperf version used to parse packet header.
Definition: mmiperf.h:209
mmiperf_report_fn report_fn
Report callback function to invoke on completion/abort.
Definition: mmiperf.h:205
void * report_arg
Opaque argument to pass to the report callback.
Definition: mmiperf.h:207
uint16_t local_port
Local port to listen on.
Definition: mmiperf.h:203
char local_addr[MMIPERF_IPADDR_MAXLEN]
Local address to listen on (as a string).
Definition: mmiperf.h:201