Browse Source

Merge branch 'bugfix/iperf_improvements' into 'master'

Update and rename default TCP/UDP buffer sizes

See merge request espressif/esp-idf!26156
Jiang Jiang Jian 2 years ago
parent
commit
77bcefb589

+ 5 - 4
examples/common_components/iperf/include/iperf.h

@@ -42,10 +42,11 @@ extern "C" {
 #define IPERF_REPORT_TASK_PRIORITY CONFIG_IPERF_REPORT_TASK_PRIORITY
 #define IPERF_REPORT_TASK_STACK 4096
 
-#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)
+#define IPERF_DEFAULT_IPV4_UDP_TX_LEN   (1470)
+#define IPERF_DEFAULT_IPV6_UDP_TX_LEN   (1450)
+#define IPERF_DEFAULT_UDP_RX_LEN        (16 << 10)
+#define IPERF_DEFAULT_TCP_TX_LEN        (16 << 10)
+#define IPERF_DEFAULT_TCP_RX_LEN        (16 << 10)
 
 #define IPERF_MAX_DELAY 64
 

+ 18 - 14
examples/common_components/iperf/iperf.c

@@ -152,8 +152,8 @@ static void IRAM_ATTR socket_recv(int recv_socket, struct sockaddr_storage liste
 static void IRAM_ATTR socket_send(int send_socket, struct sockaddr_storage dest_addr, uint8_t type, int bw_lim)
 {
     uint8_t *buffer;
-    int32_t *pkt_id_p;
-    int32_t pkt_cnt = 0;
+    uint32_t *pkt_id_p;
+    uint32_t pkt_cnt = 0;
     int actual_send = 0;
     int want_send = 0;
     int period_us = -1;
@@ -169,7 +169,7 @@ static void IRAM_ATTR socket_send(int send_socket, struct sockaddr_storage dest_
     const char *error_log = (type == IPERF_TRANS_TYPE_TCP) ? "tcp client send" : "udp client send";
 
     buffer = s_iperf_ctrl.buffer;
-    pkt_id_p = (int32_t *)s_iperf_ctrl.buffer;
+    pkt_id_p = (uint32_t *)s_iperf_ctrl.buffer;
     want_send = s_iperf_ctrl.buffer_len;
     iperf_start_report();
 
@@ -193,13 +193,7 @@ static void IRAM_ATTR socket_send(int send_socket, struct sockaddr_storage dest_
             }
             prev_time = send_time;
         }
-        *pkt_id_p = htonl(pkt_cnt); // datagrams need to be sequentially numbered
-        if (pkt_cnt >= INT32_MAX) {
-            pkt_cnt = 0;
-        }
-        else {
-            pkt_cnt++;
-        }
+        *pkt_id_p = htonl(pkt_cnt++); // datagrams need to be sequentially numbered
         actual_send = sendto(send_socket, buffer, want_send, 0, (struct sockaddr *)&dest_addr, socklen);
         if (actual_send != want_send) {
             if (type == IPERF_TRANS_TYPE_UDP) {
@@ -545,13 +539,23 @@ static void iperf_task_traffic(void *arg)
 static uint32_t iperf_get_buffer_len(void)
 {
     if (iperf_is_udp_client()) {
-        return (s_iperf_ctrl.cfg.len_send_buf == 0 ? IPERF_UDP_TX_LEN : s_iperf_ctrl.cfg.len_send_buf);
+#ifdef CONFIG_LWIP_IPV6
+        if (s_iperf_ctrl.cfg.len_send_buf) {
+            return s_iperf_ctrl.cfg.len_send_buf;
+        } else if (s_iperf_ctrl.cfg.type == IPERF_IP_TYPE_IPV6) {
+            return IPERF_DEFAULT_IPV6_UDP_TX_LEN;
+        } else {
+            return IPERF_DEFAULT_IPV4_UDP_TX_LEN;
+        }
+#else
+        return (s_iperf_ctrl.cfg.len_send_buf == 0 ? IPERF_DEFAULT_IPV4_UDP_TX_LEN : s_iperf_ctrl.cfg.len_send_buf);
+#endif
     } else if (iperf_is_udp_server()) {
-        return IPERF_UDP_RX_LEN;
+        return IPERF_DEFAULT_UDP_RX_LEN;
     } else if (iperf_is_tcp_client()) {
-        return (s_iperf_ctrl.cfg.len_send_buf == 0 ? IPERF_TCP_TX_LEN : s_iperf_ctrl.cfg.len_send_buf);
+        return (s_iperf_ctrl.cfg.len_send_buf == 0 ? IPERF_DEFAULT_TCP_TX_LEN : s_iperf_ctrl.cfg.len_send_buf);
     } else {
-        return IPERF_TCP_RX_LEN;
+        return IPERF_DEFAULT_TCP_RX_LEN;
     }
     return 0;
 }