|
|
@@ -110,7 +110,8 @@ esp_err_t iperf_start_report(void)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
- ret = xTaskCreate(iperf_report_task, IPERF_REPORT_TASK_NAME, IPERF_REPORT_TASK_STACK, NULL, IPERF_REPORT_TASK_PRIORITY, NULL);
|
|
|
+ ret = xTaskCreatePinnedToCore(iperf_report_task, IPERF_REPORT_TASK_NAME, IPERF_REPORT_TASK_STACK, NULL, IPERF_REPORT_TASK_PRIORITY, NULL, portNUM_PROCESSORS-1);
|
|
|
+
|
|
|
if (ret != pdPASS) {
|
|
|
ESP_LOGE(TAG, "create task %s failed", IPERF_REPORT_TASK_NAME);
|
|
|
return ESP_FAIL;
|
|
|
@@ -191,7 +192,7 @@ esp_err_t iperf_run_tcp_server(void)
|
|
|
return ESP_OK;
|
|
|
}
|
|
|
|
|
|
-esp_err_t iperf_run_udp_server(void)
|
|
|
+esp_err_t IRAM_ATTR iperf_run_udp_server(void)
|
|
|
{
|
|
|
socklen_t addr_len = sizeof(struct sockaddr_in);
|
|
|
struct sockaddr_in addr;
|
|
|
@@ -321,7 +322,8 @@ esp_err_t iperf_run_udp_client(void)
|
|
|
|
|
|
esp_err_t iperf_run_tcp_client(void)
|
|
|
{
|
|
|
- struct sockaddr_in addr;
|
|
|
+ struct sockaddr_in local_addr;
|
|
|
+ struct sockaddr_in remote_addr;
|
|
|
int actual_send = 0;
|
|
|
int want_send = 0;
|
|
|
uint8_t *buffer;
|
|
|
@@ -336,19 +338,21 @@ esp_err_t iperf_run_tcp_client(void)
|
|
|
|
|
|
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
|
|
|
|
|
|
- addr.sin_family = AF_INET;
|
|
|
- addr.sin_port = 0;
|
|
|
- addr.sin_addr.s_addr = s_iperf_ctrl.cfg.sip;
|
|
|
- if (bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)) != 0) {
|
|
|
+ memset(&local_addr, 0, sizeof(local_addr));
|
|
|
+ local_addr.sin_family = AF_INET;
|
|
|
+ local_addr.sin_port = 0;
|
|
|
+ local_addr.sin_addr.s_addr = s_iperf_ctrl.cfg.sip;
|
|
|
+ if (bind(sockfd, (struct sockaddr*)&local_addr, sizeof(local_addr)) != 0) {
|
|
|
iperf_show_socket_error_reason("tcp client bind", sockfd);
|
|
|
return ESP_FAIL;
|
|
|
}
|
|
|
|
|
|
|
|
|
- addr.sin_family = AF_INET;
|
|
|
- addr.sin_port = htons(s_iperf_ctrl.cfg.dport);
|
|
|
- addr.sin_addr.s_addr = s_iperf_ctrl.cfg.dip;
|
|
|
- if (connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
|
|
+ memset(&remote_addr, 0, sizeof(remote_addr));
|
|
|
+ remote_addr.sin_family = AF_INET;
|
|
|
+ remote_addr.sin_port = htons(s_iperf_ctrl.cfg.dport);
|
|
|
+ remote_addr.sin_addr.s_addr = s_iperf_ctrl.cfg.dip;
|
|
|
+ if (connect(sockfd, (struct sockaddr *)&remote_addr, sizeof(remote_addr)) < 0) {
|
|
|
iperf_show_socket_error_reason("tcp client connect", sockfd);
|
|
|
return ESP_FAIL;
|
|
|
}
|
|
|
@@ -359,7 +363,8 @@ esp_err_t iperf_run_tcp_client(void)
|
|
|
while (!s_iperf_ctrl.finish) {
|
|
|
actual_send = send(sockfd, buffer, want_send, 0);
|
|
|
if (actual_send <= 0) {
|
|
|
- vTaskDelay(1);
|
|
|
+ iperf_show_socket_error_reason("tcp client send", sockfd);
|
|
|
+ break;
|
|
|
} else {
|
|
|
s_iperf_ctrl.total_len += actual_send;
|
|
|
}
|
|
|
@@ -427,8 +432,9 @@ esp_err_t iperf_start(iperf_cfg_t *cfg)
|
|
|
ESP_LOGE(TAG, "create buffer: out of memory");
|
|
|
return ESP_FAIL;
|
|
|
}
|
|
|
+ memset(s_iperf_ctrl.buffer, 0, s_iperf_ctrl.buffer_len);
|
|
|
|
|
|
- ret = xTaskCreate(iperf_task_traffic, IPERF_TRAFFIC_TASK_NAME, IPERF_TRAFFIC_TASK_STACK, NULL, IPERF_TRAFFIC_TASK_PRIORITY, NULL);
|
|
|
+ ret = xTaskCreatePinnedToCore(iperf_task_traffic, IPERF_TRAFFIC_TASK_NAME, IPERF_TRAFFIC_TASK_STACK, NULL, IPERF_TRAFFIC_TASK_PRIORITY, NULL, portNUM_PROCESSORS-1);
|
|
|
if (ret != pdPASS) {
|
|
|
ESP_LOGE(TAG, "create task %s failed", IPERF_TRAFFIC_TASK_NAME);
|
|
|
free(s_iperf_ctrl.buffer);
|