From 9afec3c4f3eca9db2c2b0c1b2e2aa0539fcaa007 Mon Sep 17 00:00:00 2001 From: Chen Yudong Date: Fri, 6 Feb 2026 17:43:04 +0800 Subject: [PATCH] fix: use iperf-cmd for example esp_ble_mesh/wifi_coexist --- .../esp_ble_mesh/wifi_coexist/main/cmd_wifi.c | 155 +----------------- .../wifi_coexist/main/idf_component.yml | 2 +- .../esp_ble_mesh/wifi_coexist/main/main.c | 3 + ...E_Mesh_WiFi_Coexist_Example_Walkthrough.md | 2 +- examples/wifi/iperf/sdkconfig.ci.99 | 1 + examples/wifi/iperf/sdkconfig.defaults | 1 - .../idf_iperf_test_util/IperfUtility.py | 89 +++++----- 7 files changed, 45 insertions(+), 208 deletions(-) diff --git a/examples/bluetooth/esp_ble_mesh/wifi_coexist/main/cmd_wifi.c b/examples/bluetooth/esp_ble_mesh/wifi_coexist/main/cmd_wifi.c index 42da684a3a..ff2e4f2d2a 100644 --- a/examples/bluetooth/esp_ble_mesh/wifi_coexist/main/cmd_wifi.c +++ b/examples/bluetooth/esp_ble_mesh/wifi_coexist/main/cmd_wifi.c @@ -1,7 +1,7 @@ /* * Iperf example - wifi commands * - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -18,21 +18,6 @@ #include "freertos/event_groups.h" #include "esp_wifi.h" #include "esp_netif.h" -#include "iperf.h" - -typedef struct { - struct arg_str *ip; - struct arg_lit *server; - struct arg_lit *udp; - struct arg_lit *version; - struct arg_int *port; - struct arg_int *length; - struct arg_int *interval; - struct arg_int *time; - struct arg_lit *abort; - struct arg_end *end; -} wifi_iperf_t; -static wifi_iperf_t iperf_args; typedef struct { struct arg_str *ssid; @@ -293,124 +278,6 @@ static int wifi_cmd_query(int argc, char **argv) return 0; } -static uint32_t wifi_get_local_ip(void) -{ - int bits = xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, 0, 1, 0); - esp_netif_t *ifx = ap_netif; - esp_netif_ip_info_t ip_info; - wifi_mode_t mode; - - esp_wifi_get_mode(&mode); - if (WIFI_MODE_STA == mode) { - bits = xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, 0, 1, 0); - if (bits & CONNECTED_BIT) { - ifx = sta_netif; - } else { - ESP_LOGE(TAG, "sta has no IP"); - return 0; - } - } - - esp_netif_get_ip_info(ifx, &ip_info); - return ip_info.ip.addr; -} - -static int wifi_cmd_iperf(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &iperf_args); - iperf_cfg_t cfg; - - if (nerrors != 0) { - arg_print_errors(stderr, iperf_args.end, argv[0]); - return 0; - } - - memset(&cfg, 0, sizeof(cfg)); - - // wifi iperf only support IPV4 address - cfg.type = IPERF_IP_TYPE_IPV4; - - if ( iperf_args.abort->count != 0) { - iperf_stop(); - return 0; - } - - if ( ((iperf_args.ip->count == 0) && (iperf_args.server->count == 0)) || - ((iperf_args.ip->count != 0) && (iperf_args.server->count != 0)) ) { - ESP_LOGE(TAG, "should specific client/server mode"); - return 0; - } - - if (iperf_args.ip->count == 0) { - cfg.flag |= IPERF_FLAG_SERVER; - } else { - cfg.destination_ip4 = esp_ip4addr_aton(iperf_args.ip->sval[0]); - cfg.flag |= IPERF_FLAG_CLIENT; - } - - cfg.source_ip4 = wifi_get_local_ip(); - if (cfg.source_ip4 == 0) { - return 0; - } - - if (iperf_args.length->count == 0) { - cfg.len_send_buf = 0; - } else { - cfg.len_send_buf = iperf_args.length->ival[0]; - } - - if (iperf_args.udp->count == 0) { - cfg.flag |= IPERF_FLAG_TCP; - } else { - cfg.flag |= IPERF_FLAG_UDP; - } - - if (iperf_args.port->count == 0) { - cfg.sport = IPERF_DEFAULT_PORT; - cfg.dport = IPERF_DEFAULT_PORT; - } else { - if (cfg.flag & IPERF_FLAG_SERVER) { - cfg.sport = iperf_args.port->ival[0]; - cfg.dport = IPERF_DEFAULT_PORT; - } else { - cfg.sport = IPERF_DEFAULT_PORT; - cfg.dport = iperf_args.port->ival[0]; - } - } - - if (iperf_args.interval->count == 0) { - cfg.interval = IPERF_DEFAULT_INTERVAL; - } else { - cfg.interval = iperf_args.interval->ival[0]; - if (cfg.interval <= 0) { - cfg.interval = IPERF_DEFAULT_INTERVAL; - } - } - - if (iperf_args.time->count == 0) { - cfg.time = IPERF_DEFAULT_TIME; - } else { - cfg.time = iperf_args.time->ival[0]; - if (cfg.time <= cfg.interval) { - cfg.time = cfg.interval; - } - } - - ESP_LOGI(TAG, "mode=%s-%s sip=%" PRIu32 ".%" PRIu32 ".%" PRIu32 ".%" PRIu32 ":%d, \ - dip=%" PRIu32 ".%" PRIu32 ".%" PRIu32 ".%" PRIu32 ":%d, interval=%" PRIu32 ", time=%" PRIu32, - cfg.flag & IPERF_FLAG_TCP ? "tcp" : "udp", - cfg.flag & IPERF_FLAG_SERVER ? "server" : "client", - cfg.source_ip4 & 0xFF, (cfg.source_ip4 >> 8) & 0xFF, (cfg.source_ip4 >> 16) & 0xFF, - (cfg.source_ip4 >> 24) & 0xFF, cfg.sport, - cfg.destination_ip4 & 0xFF, (cfg.destination_ip4 >> 8) & 0xFF, (cfg.destination_ip4 >> 16) & 0xFF, - (cfg.destination_ip4 >> 24) & 0xFF, cfg.dport, - cfg.interval, cfg.time); - - iperf_start(&cfg); - - return 0; -} - static int restart(int argc, char **argv) { ESP_LOGI(TAG, "Restarting"); @@ -484,26 +351,6 @@ void register_wifi(void) }; ESP_ERROR_CHECK( esp_console_cmd_register(&restart_cmd) ); - iperf_args.ip = arg_str0("c", "client", "", "run in client mode, connecting to "); - iperf_args.server = arg_lit0("s", "server", "run in server mode"); - iperf_args.udp = arg_lit0("u", "udp", "use UDP rather than TCP"); - iperf_args.version = arg_lit0("V", "ipv6_domain", "use IPV6 address rather than IPV4"); - iperf_args.port = arg_int0("p", "port", "", "server port to listen on/connect to"); - iperf_args.length = arg_int0("l", "len", "", "set read/write buffer size"); - iperf_args.interval = arg_int0("i", "interval", "", "seconds between periodic bandwidth reports"); - iperf_args.time = arg_int0("t", "time", "