Morse Micro IoT SDK  2.11.2
mmiperf.h
1/*
2 * Copyright 2021-2026 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{
76};
77
80{
87};
88
91{
96};
97
99typedef struct mmiperf_state *mmiperf_handle_t;
100
103{
109 uint16_t local_port;
113 uint16_t remote_port;
117 uint32_t duration_ms;
121 uint32_t tx_frames;
123 uint32_t rx_frames;
127 uint32_t error_count;
129 uint32_t ipg_count;
136 uint32_t ipg_sum_ms;
137};
138
146typedef void (
147 *mmiperf_report_fn)(const struct mmiperf_report *report, void *arg, mmiperf_handle_t handle);
148
160{
164 uint16_t server_port;
166 uint32_t target_bw;
171 uint32_t packet_size;
174 int32_t amount;
181};
182
184#define MMIPERF_CLIENT_ARGS_DEFAULT \
185 { \
186 { 0 }, MMIPERF_DEFAULT_PORT, MMIPERF_DEFAULT_BANDWIDTH, 0, MMIPERF_DEFAULT_AMOUNT, NULL, \
187 NULL, IPERF_VERSION_2_0_13, \
188 }
189
201{
205 uint16_t local_port;
212};
213
215#define MMIPERF_SERVER_ARGS_DEFAULT \
216 { \
217 { 0 }, MMIPERF_DEFAULT_PORT, NULL, NULL, IPERF_VERSION_2_0_13, \
218 }
219
228
237
246
255
268
284
285#ifdef __cplusplus
286}
287#endif
288
mmiperf_handle_t mmiperf_start_tcp_client(const struct mmiperf_client_args *args)
Start a TCP iperf client.
bool mmiperf_stop(mmiperf_handle_t handle)
Stop an in-progress iperf session.
traffic_agent_state
Enumeration of traffic agent state.
Definition: mmiperf.h:80
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:91
#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:99
void(* mmiperf_report_fn)(const struct mmiperf_report *report, void *arg, mmiperf_handle_t handle)
Report callback function prototype.
Definition: mmiperf.h:147
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:86
@ TRAFFIC_AGENT_NOT_STARTED
Traffic agent has not started.
Definition: mmiperf.h:82
@ TRAFFIC_AGENT_RUNNING
Traffic agent is running.
Definition: mmiperf.h:84
@ 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_STOPPED
User requested stop via mmiperf_stop()
Definition: mmiperf.h:75
@ 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:93
@ IPERF_VERSION_2_0_9
Iperf version 2.0.9.
Definition: mmiperf.h:95
Iperf client arguments data structure.
Definition: mmiperf.h:160
char server_addr[MMIPERF_IPADDR_MAXLEN]
IP address of iperf server to communicate with (as a string).
Definition: mmiperf.h:162
uint32_t packet_size
Packet size to use.
Definition: mmiperf.h:171
mmiperf_report_fn report_fn
Report callback function to invoke on completion/abort.
Definition: mmiperf.h:176
uint32_t target_bw
Bandwidth limit (in kbps) to communicate with (0 indicates no limit).
Definition: mmiperf.h:166
int32_t amount
If positive specifies how many bytes to transfer; if negative the absolute value specifies the durati...
Definition: mmiperf.h:174
void * report_arg
Opaque argument to pass to the report callback.
Definition: mmiperf.h:178
enum iperf_version version
Iperf version used to parse packet header.
Definition: mmiperf.h:180
uint16_t server_port
Port on iperf server to communicate with.
Definition: mmiperf.h:164
Report data structure.
Definition: mmiperf.h:103
uint32_t ipg_sum_ms
Sum of inter-packet gaps (UDP only).
Definition: mmiperf.h:136
enum mmiperf_report_type report_type
Type of report.
Definition: mmiperf.h:105
char local_addr[MMIPERF_IPADDR_MAXLEN]
Local address (as string).
Definition: mmiperf.h:107
uint16_t local_port
Local port.
Definition: mmiperf.h:109
uint16_t remote_port
Remote port.
Definition: mmiperf.h:113
uint32_t bandwidth_kbitpsec
Average throughput in kbps.
Definition: mmiperf.h:119
uint32_t rx_frames
Number of frames received during test (UDP only).
Definition: mmiperf.h:123
char remote_addr[MMIPERF_IPADDR_MAXLEN]
Remote address (as string).
Definition: mmiperf.h:111
uint32_t out_of_sequence_frames
Number of out of sequence frames received during test (UDP only).
Definition: mmiperf.h:125
uint32_t ipg_count
Number of inter-packet gaps (UDP only).
Definition: mmiperf.h:129
uint64_t bytes_transferred
Number of bytes of data transferred during test.
Definition: mmiperf.h:115
uint32_t tx_frames
Number of frames transmitted during test (UDP only).
Definition: mmiperf.h:121
uint32_t duration_ms
Duration of the test in milliseconds.
Definition: mmiperf.h:117
uint32_t error_count
Number of packet errors (UDP only).
Definition: mmiperf.h:127
Iperf server arguments data structure.
Definition: mmiperf.h:201
enum iperf_version version
Iperf version used to parse packet header.
Definition: mmiperf.h:211
mmiperf_report_fn report_fn
Report callback function to invoke on completion/abort.
Definition: mmiperf.h:207
void * report_arg
Opaque argument to pass to the report callback.
Definition: mmiperf.h:209
uint16_t local_port
Local port to listen on.
Definition: mmiperf.h:205
char local_addr[MMIPERF_IPADDR_MAXLEN]
Local address to listen on (as a string).
Definition: mmiperf.h:203