ESP32/components/iperf/iperf.h

89 lines
2.6 KiB
C

#ifndef IPERF_H
#define IPERF_H
#include <stdint.h>
#include <stdbool.h>
#define IPERF_FLAG_CLIENT (1 << 0)
#define IPERF_FLAG_SERVER (1 << 1)
#define IPERF_FLAG_TCP (1 << 2)
#define IPERF_FLAG_UDP (1 << 3)
#define IPERF_DEFAULT_PORT 5001
#define IPERF_DEFAULT_INTERVAL 3
#define IPERF_DEFAULT_TIME 30
#define IPERF_TRAFFIC_TASK_PRIORITY 4
#define IPERF_REPORT_TASK_PRIORITY 5
#define IPERF_SOCKET_RX_TIMEOUT 10
#define IPERF_SOCKET_ACCEPT_TIMEOUT 5
// Default buffer sizes
#define IPERF_UDP_TX_LEN (1470)
#define IPERF_UDP_RX_LEN (16 << 10)
#define IPERF_TCP_TX_LEN (16 << 10)
#define IPERF_TCP_RX_LEN (16 << 10)
// NVS Keys
#define NVS_KEY_IPERF_ENABLE "iperf_enabled" // 0=Disabled, 1=Enabled
#define NVS_KEY_IPERF_PERIOD "iperf_period" // Period in microseconds (u32)
#define NVS_KEY_IPERF_ROLE "iperf_role" // "CLIENT" or "SERVER"
#define NVS_KEY_IPERF_DST_IP "iperf_dst_ip" // Target IP String
#define NVS_KEY_IPERF_PROTO "iperf_proto" // "UDP" or "TCP"
#define NVS_KEY_IPERF_BURST "iperf_burst" // Packets per period
#define NVS_KEY_IPERF_LEN "iperf_len" // UDP Payload Length
typedef struct {
uint32_t flag;
uint8_t type;
uint32_t dip; // Destination IP
uint16_t dport; // Dest Port
uint16_t sport; // Source Port
uint32_t interval;
uint32_t time; // Test Duration (seconds)
// Pacing Config
uint32_t pacing_period_us; // Period between bursts in microseconds
uint32_t burst_count; // Packets per period
uint32_t send_len; // User defined Payload Length
uint32_t buffer_len; // Internally calculated buffer size
} iperf_cfg_t;
typedef struct {
uint64_t total_len;
uint32_t buffer_len;
uint32_t sockfd;
uint32_t actual_len;
uint32_t packet_count;
uint8_t *buffer;
uint32_t udp_lost_counter;
uint32_t udp_packet_counter;
} iperf_traffic_t;
// Standard UDP Datagram Header
typedef struct {
int32_t id; // Sequence Number
uint32_t tv_sec; // Timestamp Seconds
uint32_t tv_usec; // Timestamp Microseconds
uint32_t id2; // 64-bit seq / Padding
} udp_datagram;
// Client Header
typedef struct {
int32_t flags; // Flags (Version, etc.)
int32_t numThreads; // Parallel threads
int32_t mPort; // Port
int32_t mBufLen; // Buffer Length
int32_t mWinBand; // Target Bandwidth (Legacy field, sent as 0 or placeholder)
int32_t mAmount; // Duration / Bytes
} client_hdr_v1;
#define HEADER_VERSION1 0x80000000
// Public API
void iperf_start(iperf_cfg_t *cfg);
void iperf_stop(void);
#endif // IPERF_H