Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/zephyr/net/zperf.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ struct zperf_results {
uint64_t client_time_in_us; /**< Client connection time in microseconds */
uint32_t packet_size; /**< Packet size */
uint32_t nb_packets_errors; /**< Number of packet errors */
bool is_multicast; /**< True if this session used IP multicast */
};

/**
Expand Down
75 changes: 45 additions & 30 deletions subsys/net/lib/zperf/zperf_shell.c
Original file line number Diff line number Diff line change
Expand Up @@ -516,41 +516,56 @@
client_rate_in_kbps = 0U;
}

if (!rate_in_kbps) {
/* Print warning if no server stats in unicast case; for multicast,
* server stats are not expected.
*/
if (!rate_in_kbps && !results->is_multicast) {
shell_fprintf(sh, SHELL_ERROR,
"LAST PACKET NOT RECEIVED!!!\n");
}

shell_fprintf(sh, SHELL_NORMAL,
"Statistics:\t\tserver\t(client)\n");
shell_fprintf(sh, SHELL_NORMAL, "Duration:\t\t");
print_number_64(sh, results->time_in_us, TIME_US,
TIME_US_UNIT);
shell_fprintf(sh, SHELL_NORMAL, "\t(");
print_number_64(sh, results->client_time_in_us, TIME_US,
TIME_US_UNIT);
shell_fprintf(sh, SHELL_NORMAL, ")\n");

shell_fprintf(sh, SHELL_NORMAL, "Num packets:\t\t%u\t(%u)\n",
results->nb_packets_rcvd,
results->nb_packets_sent);

shell_fprintf(sh, SHELL_NORMAL,
"Num packets out order:\t%u\n",
results->nb_packets_outorder);
shell_fprintf(sh, SHELL_NORMAL, "Num packets lost:\t%u\n",
results->nb_packets_lost);

shell_fprintf(sh, SHELL_NORMAL, "Jitter:\t\t\t");
print_number(sh, results->jitter_in_us, TIME_US,
TIME_US_UNIT);
shell_fprintf(sh, SHELL_NORMAL, "\n");
if (results->is_multicast) {
shell_fprintf(sh, SHELL_NORMAL, "Statistics (client only)\n");
shell_fprintf(sh, SHELL_NORMAL, "Duration:\t\t");
print_number_64(sh, results->client_time_in_us, TIME_US, TIME_US_UNIT);
shell_fprintf(sh, SHELL_NORMAL, "\n");
shell_fprintf(sh, SHELL_NORMAL, "Num packets:\t\t%u\n",
results->nb_packets_sent);
shell_fprintf(sh, SHELL_NORMAL, "Rate:\t\t\t");
print_number(sh, client_rate_in_kbps, KBPS, KBPS_UNIT);
shell_fprintf(sh, SHELL_NORMAL, "\n");
} else {
shell_fprintf(sh, SHELL_NORMAL,
"Statistics:\t\tserver\t(client)\n");
shell_fprintf(sh, SHELL_NORMAL, "Duration:\t\t");
print_number_64(sh, results->time_in_us, TIME_US,
TIME_US_UNIT);
shell_fprintf(sh, SHELL_NORMAL, "\t(");
print_number_64(sh, results->client_time_in_us, TIME_US,
TIME_US_UNIT);
shell_fprintf(sh, SHELL_NORMAL, ")\n");

shell_fprintf(sh, SHELL_NORMAL, "Num packets:\t\t%u\t(%u)\n",
results->nb_packets_rcvd,
results->nb_packets_sent);

shell_fprintf(sh, SHELL_NORMAL, "Rate:\t\t\t");
print_number(sh, rate_in_kbps, KBPS, KBPS_UNIT);
shell_fprintf(sh, SHELL_NORMAL, "\t(");
print_number(sh, client_rate_in_kbps, KBPS, KBPS_UNIT);
shell_fprintf(sh, SHELL_NORMAL, ")\n");
shell_fprintf(sh, SHELL_NORMAL,
"Num packets out order:\t%u\n",
results->nb_packets_outorder);
shell_fprintf(sh, SHELL_NORMAL, "Num packets lost:\t%u\n",
results->nb_packets_lost);

shell_fprintf(sh, SHELL_NORMAL, "Jitter:\t\t\t");
print_number(sh, results->jitter_in_us, TIME_US,
TIME_US_UNIT);
shell_fprintf(sh, SHELL_NORMAL, "\n");

Check notice on line 561 in subsys/net/lib/zperf/zperf_shell.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

subsys/net/lib/zperf/zperf_shell.c:561 - results->nb_packets_sent); + results->nb_packets_sent); shell_fprintf(sh, SHELL_NORMAL, "Rate:\t\t\t"); print_number(sh, client_rate_in_kbps, KBPS, KBPS_UNIT); shell_fprintf(sh, SHELL_NORMAL, "\n"); } else { - shell_fprintf(sh, SHELL_NORMAL, - "Statistics:\t\tserver\t(client)\n"); + shell_fprintf(sh, SHELL_NORMAL, "Statistics:\t\tserver\t(client)\n"); shell_fprintf(sh, SHELL_NORMAL, "Duration:\t\t"); - print_number_64(sh, results->time_in_us, TIME_US, - TIME_US_UNIT); + print_number_64(sh, results->time_in_us, TIME_US, TIME_US_UNIT); shell_fprintf(sh, SHELL_NORMAL, "\t("); - print_number_64(sh, results->client_time_in_us, TIME_US, - TIME_US_UNIT); + print_number_64(sh, results->client_time_in_us, TIME_US, TIME_US_UNIT); shell_fprintf(sh, SHELL_NORMAL, ")\n"); shell_fprintf(sh, SHELL_NORMAL, "Num packets:\t\t%u\t(%u)\n", - results->nb_packets_rcvd, - results->nb_packets_sent); - - shell_fprintf(sh, SHELL_NORMAL, - "Num packets out order:\t%u\n", - results->nb_packets_outorder); + results->nb_packets_rcvd, results->nb_packets_sent); + + shell_fprintf(sh, SHELL_NORMAL, "Num packets out order:\t%u\n", + results->nb_packets_outorder); shell_fprintf(sh, SHELL_NORMAL, "Num packets lost:\t%u\n", - results->nb_packets_lost); + results->nb_packets_lost); shell_fprintf(sh, SHELL_NORMAL, "Jitter:\t\t\t"); - print_number(sh, results->jitter_in_us, TIME_US, - TIME_US_UNIT); + print_number(sh, results->jitter_in_us, TIME_US, TIME_US_UNIT);

shell_fprintf(sh, SHELL_NORMAL, "Rate:\t\t\t");
print_number(sh, rate_in_kbps, KBPS, KBPS_UNIT);
shell_fprintf(sh, SHELL_NORMAL, "\t(");
print_number(sh, client_rate_in_kbps, KBPS, KBPS_UNIT);
shell_fprintf(sh, SHELL_NORMAL, ")\n");
}

#ifdef CONFIG_ZPERF_SESSION_PER_THREAD
if (is_async) {
Expand Down
16 changes: 13 additions & 3 deletions subsys/net/lib/zperf/zperf_udp_uploader.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,14 @@ static inline int zperf_upload_fin(int sock,
continue;
}

/* Multicast only send the negative sequence number packet
* and doesn't wait for a server ack
/* For multicast, do not wait for a server ack. Keep resending FIN
* for the configured number of attempts by forcing another loop
* iteration.
*/
if (!is_mcast_pkt) {
if (is_mcast_pkt) {
ret = 0;
continue;
} else {
/* Receive statistics */
ret = zsock_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &rcvtimeo,
sizeof(rcvtimeo));
Expand All @@ -126,6 +130,11 @@ static inline int zperf_upload_fin(int sock,
}
}

/* In multicast, we never expect a stats reply. Stop here. */
if (is_mcast_pkt) {
return 0;
}

/* Decode statistics */
if (ret > 0) {
zperf_upload_decode_stat(stats, ret, results);
Expand Down Expand Up @@ -299,6 +308,7 @@ static int udp_upload(int sock, int port,
results->client_time_in_us =
k_ticks_to_us_ceil64(end_time - start_time);
results->packet_size = packet_size;
results->is_multicast = is_mcast_pkt;

return 0;
}
Expand Down
Loading