|
@@ -48,8 +48,10 @@ static void iperf_udp_client(void *thread_param)
|
|
|
rt_uint32_t *buffer;
|
|
rt_uint32_t *buffer;
|
|
|
struct sockaddr_in server;
|
|
struct sockaddr_in server;
|
|
|
rt_uint32_t packet_count = 0;
|
|
rt_uint32_t packet_count = 0;
|
|
|
- rt_uint32_t tick;
|
|
|
|
|
|
|
+ rt_uint32_t tick, tick1, tick2;
|
|
|
int send_size;
|
|
int send_size;
|
|
|
|
|
+ int ret;
|
|
|
|
|
+ rt_uint64_t sentlen = 0;
|
|
|
|
|
|
|
|
send_size = IPERF_BUFSZ > 1470 ? 1470 : IPERF_BUFSZ;
|
|
send_size = IPERF_BUFSZ > 1470 ? 1470 : IPERF_BUFSZ;
|
|
|
buffer = rt_malloc(IPERF_BUFSZ);
|
|
buffer = rt_malloc(IPERF_BUFSZ);
|
|
@@ -69,6 +71,7 @@ static void iperf_udp_client(void *thread_param)
|
|
|
server.sin_port = htons(param.port);
|
|
server.sin_port = htons(param.port);
|
|
|
server.sin_addr.s_addr = inet_addr(param.host);
|
|
server.sin_addr.s_addr = inet_addr(param.host);
|
|
|
LOG_I("iperf udp mode run...");
|
|
LOG_I("iperf udp mode run...");
|
|
|
|
|
+ tick1 = rt_tick_get();
|
|
|
while (param.mode != IPERF_MODE_STOP)
|
|
while (param.mode != IPERF_MODE_STOP)
|
|
|
{
|
|
{
|
|
|
packet_count++;
|
|
packet_count++;
|
|
@@ -76,7 +79,28 @@ static void iperf_udp_client(void *thread_param)
|
|
|
buffer[0] = htonl(packet_count);
|
|
buffer[0] = htonl(packet_count);
|
|
|
buffer[1] = htonl(tick / RT_TICK_PER_SECOND);
|
|
buffer[1] = htonl(tick / RT_TICK_PER_SECOND);
|
|
|
buffer[2] = htonl((tick % RT_TICK_PER_SECOND) * 1000);
|
|
buffer[2] = htonl((tick % RT_TICK_PER_SECOND) * 1000);
|
|
|
- sendto(sock, buffer, send_size, 0, (struct sockaddr *)&server, sizeof(struct sockaddr_in));
|
|
|
|
|
|
|
+ ret = sendto(sock, buffer, send_size, 0, (struct sockaddr *)&server, sizeof(struct sockaddr_in));
|
|
|
|
|
+ if (ret > 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ sentlen += ret;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (ret < 0) break;
|
|
|
|
|
+
|
|
|
|
|
+ tick2 = rt_tick_get();
|
|
|
|
|
+ if (tick2 - tick1 >= RT_TICK_PER_SECOND * 5)
|
|
|
|
|
+ {
|
|
|
|
|
+ long data;
|
|
|
|
|
+ int integer, decimal;
|
|
|
|
|
+ rt_thread_t tid;
|
|
|
|
|
+
|
|
|
|
|
+ tid = rt_thread_self();
|
|
|
|
|
+ data = sentlen * RT_TICK_PER_SECOND / 125 / (tick2 - tick1);
|
|
|
|
|
+ integer = data/1000;
|
|
|
|
|
+ decimal = data%1000;
|
|
|
|
|
+ LOG_I("%s: %d.%03d0 Mbps!", IPERF_GET_THREAD_NAME(tid), integer, decimal);
|
|
|
|
|
+ tick1 = tick2;
|
|
|
|
|
+ sentlen = 0;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
closesocket(sock);
|
|
closesocket(sock);
|
|
|
rt_free(buffer);
|
|
rt_free(buffer);
|