From f2819b71e55cf1992d969d347cc5ce694585bba2 Mon Sep 17 00:00:00 2001 From: Zhe Weng Date: Fri, 7 Apr 2023 16:50:42 +0800 Subject: [PATCH] netutils/iperf: Support RPMsg socket test Usage: iperf -s --rpmsg iperf -c --rpmsg Note: RPMsg with SOCK_DGRAM (`-u`) doesn't have server mode (bind) yet, iperf may not work in this case before rpsock is enhanced. Signed-off-by: Zhe Weng --- netutils/iperf/iperf.c | 32 ++++++++++++++++++++++++++++++++ netutils/iperf/iperf.h | 2 ++ netutils/iperf/iperf_main.c | 22 ++++++++++++++++++---- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/netutils/iperf/iperf.c b/netutils/iperf/iperf.c index ef116c8c6..0bb107082 100644 --- a/netutils/iperf/iperf.c +++ b/netutils/iperf/iperf.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -232,6 +233,15 @@ static void iperf_print_addr(FAR const char *str, FAR struct sockaddr *addr) return; } + case AF_RPMSG: + { + FAR struct sockaddr_rpmsg *rpaddr = + (FAR struct sockaddr_rpmsg *)addr; + printf("%s: cpu=%s,name=%s\n", str, + rpaddr->rp_cpu, rpaddr->rp_name); + return; + } + default: assert(false); /* shouldn't happen */ } @@ -391,6 +401,18 @@ static int iperf_run_server(FAR struct iperf_ctrl_t *ctrl, addr.sun_family = AF_LOCAL; strlcpy(addr.sun_path, ctrl->cfg.path, sizeof(addr.sun_path)); + return server_func(ctrl, (FAR struct sockaddr *)&addr, sizeof(addr), + (FAR struct sockaddr *)&remote_addr); + } + else if (ctrl->cfg.flag & IPERF_FLAG_RPMSG) + { + struct sockaddr_rpmsg addr; + struct sockaddr_rpmsg remote_addr; + + addr.rp_family = AF_RPMSG; + strlcpy(addr.rp_cpu, ctrl->cfg.host, sizeof(addr.rp_cpu)); + strlcpy(addr.rp_name, ctrl->cfg.path, sizeof(addr.rp_name)); + return server_func(ctrl, (FAR struct sockaddr *)&addr, sizeof(addr), (FAR struct sockaddr *)&remote_addr); } @@ -426,6 +448,16 @@ static int iperf_run_client(FAR struct iperf_ctrl_t *ctrl, addr.sun_family = AF_LOCAL; strlcpy(addr.sun_path, ctrl->cfg.path, sizeof(addr.sun_path)); + return client_func(ctrl, (FAR struct sockaddr *)&addr, sizeof(addr)); + } + else if (ctrl->cfg.flag & IPERF_FLAG_RPMSG) + { + struct sockaddr_rpmsg addr; + + addr.rp_family = AF_RPMSG; + strlcpy(addr.rp_cpu, ctrl->cfg.host, sizeof(addr.rp_cpu)); + strlcpy(addr.rp_name, ctrl->cfg.path, sizeof(addr.rp_name)); + return client_func(ctrl, (FAR struct sockaddr *)&addr, sizeof(addr)); } else diff --git a/netutils/iperf/iperf.h b/netutils/iperf/iperf.h index 673731325..14b295a9f 100644 --- a/netutils/iperf/iperf.h +++ b/netutils/iperf/iperf.h @@ -49,6 +49,7 @@ extern "C" #define IPERF_FLAG_TCP (1 << 2) #define IPERF_FLAG_UDP (1 << 3) #define IPERF_FLAG_LOCAL (1 << 4) +#define IPERF_FLAG_RPMSG (1 << 5) /**************************************************************************** * Public Types @@ -63,6 +64,7 @@ struct iperf_cfg_t uint16_t sport; uint32_t interval; uint32_t time; + FAR const char *host; /* host name (dip) or rpmsg cpu */ FAR const char *path; /* local path or rpmsg name */ }; diff --git a/netutils/iperf/iperf_main.c b/netutils/iperf/iperf_main.c index 50e5c9d34..a51359091 100644 --- a/netutils/iperf/iperf_main.c +++ b/netutils/iperf/iperf_main.c @@ -57,6 +57,7 @@ struct wifi_iperf_t FAR struct arg_lit *server; FAR struct arg_lit *udp; FAR struct arg_str *local; + FAR struct arg_str *rpmsg; FAR struct arg_int *port; FAR struct arg_int *interval; FAR struct arg_int *time; @@ -79,8 +80,8 @@ struct wifi_iperf_t static void iperf_showusage(FAR const char *progname, FAR struct wifi_iperf_t *args, int exitcode) { - printf("USAGE: %s [-sua] [-c ] [-p ] [-i ] " - "[-t