Morse Micro IoT SDK  2.9.7
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#endif
24
27#define BLOCK_DURATION_MS 200
28
30#define IPV6_HEADER_SIZE_DIFF (20)
31
33#define MMIPERF_DEFAULT_PORT (5001)
35#define MMIPERF_DEFAULT_UDP_PACKET_SIZE_V4 (1460)
37#define MMIPERF_DEFAULT_UDP_PACKET_SIZE_V6 (1440)
40#define MMIPERF_DEFAULT_AMOUNT (-1000)
42#define MMIPERF_DEFAULT_BANDWIDTH (0)
43
45#define MMIPERF_IPADDR_MAXLEN (48)
46
47#ifndef MMIPERF_STACK_SIZE
49#define MMIPERF_STACK_SIZE 512
50#endif
51
54{
73};
74
77{
84};
85
88{
93};
94
96typedef struct mmiperf_state *mmiperf_handle_t;
97
100{
106 uint16_t local_port;
110 uint16_t remote_port;
114 uint32_t duration_ms;
118 uint32_t tx_frames;
120 uint32_t rx_frames;
124 uint32_t error_count;
126 uint32_t ipg_count;
133 uint32_t ipg_sum_ms;
134};
135
143typedef void (*mmiperf_report_fn)(const struct mmiperf_report *report, void *arg,
144 mmiperf_handle_t handle);
145
157{
161 uint16_t server_port;
163 uint32_t target_bw;
168 uint32_t packet_size;
171 int32_t amount;
178};
179
181#define MMIPERF_CLIENT_ARGS_DEFAULT \
182 { \
183 { 0 }, MMIPERF_DEFAULT_PORT, MMIPERF_DEFAULT_BANDWIDTH, \
184 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:77
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:54
void(* mmiperf_report_fn)(const struct mmiperf_report *report, void *arg, mmiperf_handle_t handle)
Report callback function prototype.
Definition: mmiperf.h:143
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:88
#define MMIPERF_IPADDR_MAXLEN
Maximum length of an IP address string including null-terminator.
Definition: mmiperf.h:45
struct mmiperf_state * mmiperf_handle_t
Iperf client/server handle.
Definition: mmiperf.h:96
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:83
@ TRAFFIC_AGENT_NOT_STARTED
Traffic agent has not started.
Definition: mmiperf.h:79
@ TRAFFIC_AGENT_RUNNING
Traffic agent is running.
Definition: mmiperf.h:81
@ MMIPERF_UDP_DONE_CLIENT
The client side test is done.
Definition: mmiperf.h:70
@ MMIPERF_TCP_ABORTED_LOCAL_TXERROR
Transmit error lead to test abort.
Definition: mmiperf.h:64
@ MMIPERF_INTERRIM_REPORT
Interrim report requested via mmiperf_get_interim_report().
Definition: mmiperf.h:72
@ MMIPERF_TCP_ABORTED_LOCAL
Local error lead to test abort.
Definition: mmiperf.h:60
@ MMIPERF_TCP_DONE_CLIENT
The client side test is done.
Definition: mmiperf.h:58
@ MMIPERF_TCP_ABORTED_REMOTE
Remote side aborted the test.
Definition: mmiperf.h:66
@ MMIPERF_TCP_ABORTED_LOCAL_DATAERROR
Data check error lead to test abort.
Definition: mmiperf.h:62
@ MMIPERF_UDP_DONE_SERVER
The server side test is done.
Definition: mmiperf.h:68
@ MMIPERF_TCP_DONE_SERVER
The server side test is done.
Definition: mmiperf.h:56
@ IPERF_VERSION_2_0_13
Iperf version 2.0.13.
Definition: mmiperf.h:90
@ IPERF_VERSION_2_0_9
Iperf version 2.0.9.
Definition: mmiperf.h:92
Iperf client arguments data structure.
Definition: mmiperf.h:157
char server_addr[MMIPERF_IPADDR_MAXLEN]
IP address of iperf server to communicate with (as a string).
Definition: mmiperf.h:159
uint32_t packet_size
Packet size to use.
Definition: mmiperf.h:168
mmiperf_report_fn report_fn
Report callback function to invoke on completion/abort.
Definition: mmiperf.h:173
uint32_t target_bw
Bandwidth limit (in kbps) to communicate with (0 indicates no limit).
Definition: mmiperf.h:163
int32_t amount
If positive specifies how many bytes to transfer; if negative the absolute value specifies the durati...
Definition: mmiperf.h:171
void * report_arg
Opaque argument to pass to the report callback.
Definition: mmiperf.h:175
enum iperf_version version
Iperf version used to parse packet header.
Definition: mmiperf.h:177
uint16_t server_port
Port on iperf server to communicate with.
Definition: mmiperf.h:161
Report data structure.
Definition: mmiperf.h:100
uint32_t ipg_sum_ms
Sum of inter-packet gaps (UDP only).
Definition: mmiperf.h:133
enum mmiperf_report_type report_type
Type of report.
Definition: mmiperf.h:102
char local_addr[MMIPERF_IPADDR_MAXLEN]
Local address (as string).
Definition: mmiperf.h:104
uint16_t local_port
Local port.
Definition: mmiperf.h:106
uint16_t remote_port
Remote port.
Definition: mmiperf.h:110
uint32_t bandwidth_kbitpsec
Average throughput in kbps.
Definition: mmiperf.h:116
uint32_t rx_frames
Number of frames received during test (UDP only).
Definition: mmiperf.h:120
char remote_addr[MMIPERF_IPADDR_MAXLEN]
Remote address (as string).
Definition: mmiperf.h:108
uint32_t out_of_sequence_frames
Number of out of sequence frames received during test (UDP only).
Definition: mmiperf.h:122
uint32_t ipg_count
Number of inter-packet gaps (UDP only).
Definition: mmiperf.h:126
uint64_t bytes_transferred
Number of bytes of data transferred during test.
Definition: mmiperf.h:112
uint32_t tx_frames
Number of frames transmitted during test (UDP only).
Definition: mmiperf.h:118
uint32_t duration_ms
Duration of the test in milliseconds.
Definition: mmiperf.h:114
uint32_t error_count
Number of packet errors (UDP only).
Definition: mmiperf.h:124
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