net: zperf: Simplify shell initialization

Instead of calling zperf shell initialization routine on the first
command execution, initialize it during system boot, along with other
zperf submodules.

Remove redundant IP address configuration on an interface. The default
configuration relies on NET_CONFIG module, so there's no need to set the
address manually in zperf.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
This commit is contained in:
Robert Lubos 2022-11-30 16:41:36 +01:00 committed by Carles Cufí
commit d27ace4012
3 changed files with 29 additions and 68 deletions

View file

@ -8,6 +8,7 @@
#include <zephyr/net/socket.h> #include <zephyr/net/socket.h>
#include "zperf_internal.h" #include "zperf_internal.h"
#include "zperf_session.h"
LOG_MODULE_DECLARE(net_zperf, CONFIG_NET_ZPERF_LOG_LEVEL); LOG_MODULE_DECLARE(net_zperf, CONFIG_NET_ZPERF_LOG_LEVEL);
@ -117,6 +118,9 @@ static int zperf_init(const struct device *unused)
zperf_udp_receiver_init(); zperf_udp_receiver_init();
zperf_tcp_receiver_init(); zperf_tcp_receiver_init();
zperf_session_init();
zperf_shell_init();
return 0; return 0;
} }

View file

@ -103,4 +103,6 @@ void zperf_tcp_uploader_init(void);
void zperf_udp_receiver_init(void); void zperf_udp_receiver_init(void);
void zperf_tcp_receiver_init(void); void zperf_tcp_receiver_init(void);
void zperf_shell_init(void);
#endif /* __ZPERF_INTERNAL_H */ #endif /* __ZPERF_INTERNAL_H */

View file

@ -141,18 +141,6 @@ struct sockaddr_in *zperf_get_sin(void)
return &in4_addr_my; return &in4_addr_my;
} }
static void zperf_init(const struct shell *sh);
static void do_init(const struct shell *sh)
{
static bool init_ok;
if (!init_ok) {
zperf_init(sh);
init_ok = true;
}
}
static int parse_ipv6_addr(const struct shell *sh, char *host, char *port, static int parse_ipv6_addr(const struct shell *sh, char *host, char *port,
struct sockaddr_in6 *addr) struct sockaddr_in6 *addr)
{ {
@ -289,8 +277,6 @@ static int cmd_setip(const struct shell *sh, size_t argc, char *argv[])
{ {
int start = 0; int start = 0;
do_init(sh);
if (IS_ENABLED(CONFIG_NET_IPV6) && !IS_ENABLED(CONFIG_NET_IPV4)) { if (IS_ENABLED(CONFIG_NET_IPV6) && !IS_ENABLED(CONFIG_NET_IPV4)) {
if (argc != 3) { if (argc != 3) {
shell_help(sh); shell_help(sh);
@ -442,8 +428,6 @@ static int cmd_udp_download(const struct shell *sh, size_t argc,
struct zperf_download_params param = { 0 }; struct zperf_download_params param = { 0 };
int ret; int ret;
do_init(sh);
if (argc >= 2) { if (argc >= 2) {
param.port = strtoul(argv[1], NULL, 10); param.port = strtoul(argv[1], NULL, 10);
} else { } else {
@ -897,15 +881,11 @@ static int shell_cmd_upload(const struct shell *sh, size_t argc,
static int cmd_tcp_upload(const struct shell *sh, size_t argc, char *argv[]) static int cmd_tcp_upload(const struct shell *sh, size_t argc, char *argv[])
{ {
do_init(sh);
return shell_cmd_upload(sh, argc, argv, IPPROTO_TCP); return shell_cmd_upload(sh, argc, argv, IPPROTO_TCP);
} }
static int cmd_udp_upload(const struct shell *sh, size_t argc, char *argv[]) static int cmd_udp_upload(const struct shell *sh, size_t argc, char *argv[])
{ {
do_init(sh);
return shell_cmd_upload(sh, argc, argv, IPPROTO_UDP); return shell_cmd_upload(sh, argc, argv, IPPROTO_UDP);
} }
@ -1029,24 +1009,18 @@ static int shell_cmd_upload2(const struct shell *sh, size_t argc,
static int cmd_tcp_upload2(const struct shell *sh, size_t argc, static int cmd_tcp_upload2(const struct shell *sh, size_t argc,
char *argv[]) char *argv[])
{ {
do_init(sh);
return shell_cmd_upload2(sh, argc, argv, IPPROTO_TCP); return shell_cmd_upload2(sh, argc, argv, IPPROTO_TCP);
} }
static int cmd_udp_upload2(const struct shell *sh, size_t argc, static int cmd_udp_upload2(const struct shell *sh, size_t argc,
char *argv[]) char *argv[])
{ {
do_init(sh);
return shell_cmd_upload2(sh, argc, argv, IPPROTO_UDP); return shell_cmd_upload2(sh, argc, argv, IPPROTO_UDP);
} }
static int cmd_tcp(const struct shell *sh, size_t argc, char *argv[]) static int cmd_tcp(const struct shell *sh, size_t argc, char *argv[])
{ {
if (IS_ENABLED(CONFIG_NET_TCP)) { if (IS_ENABLED(CONFIG_NET_TCP)) {
do_init(sh);
shell_help(sh); shell_help(sh);
return -ENOEXEC; return -ENOEXEC;
} }
@ -1060,8 +1034,6 @@ static int cmd_tcp(const struct shell *sh, size_t argc, char *argv[])
static int cmd_udp(const struct shell *sh, size_t argc, char *argv[]) static int cmd_udp(const struct shell *sh, size_t argc, char *argv[])
{ {
if (IS_ENABLED(CONFIG_NET_UDP)) { if (IS_ENABLED(CONFIG_NET_UDP)) {
do_init(sh);
shell_help(sh); shell_help(sh);
return -ENOEXEC; return -ENOEXEC;
} }
@ -1146,8 +1118,6 @@ static int cmd_tcp_download(const struct shell *sh, size_t argc,
struct zperf_download_params param = { 0 }; struct zperf_download_params param = { 0 };
int ret; int ret;
do_init(sh);
if (argc >= 2) { if (argc >= 2) {
param.port = strtoul(argv[1], NULL, 10); param.port = strtoul(argv[1], NULL, 10);
} else { } else {
@ -1182,68 +1152,53 @@ static int cmd_version(const struct shell *sh, size_t argc, char *argv[])
return 0; return 0;
} }
static void zperf_init(const struct shell *sh) void zperf_shell_init(void)
{ {
int ret; int ret;
shell_fprintf(sh, SHELL_NORMAL, "\n");
if (IS_ENABLED(CONFIG_NET_IPV6) && MY_IP6ADDR) { if (IS_ENABLED(CONFIG_NET_IPV6) && MY_IP6ADDR) {
if (zperf_get_ipv6_addr(MY_IP6ADDR, MY_PREFIX_LEN_STR, ret = net_addr_pton(AF_INET6, MY_IP6ADDR,
&ipv6) < 0) { &in6_addr_my.sin6_addr);
shell_fprintf(sh, SHELL_WARNING, if (ret < 0) {
"Unable to set IP\n"); NET_WARN("Unable to set IP");
} else { } else {
shell_fprintf(sh, SHELL_NORMAL, NET_INFO("Setting IP address %s",
"Setting IP address %s\n", net_sprint_ipv6_addr(&in6_addr_my.sin6_addr));
net_sprint_ipv6_addr(&ipv6));
net_ipaddr_copy(&in6_addr_my.sin6_addr, &ipv6);
} }
ret = net_addr_pton(AF_INET6, DST_IP6ADDR, ret = net_addr_pton(AF_INET6, DST_IP6ADDR,
&in6_addr_dst.sin6_addr); &in6_addr_dst.sin6_addr);
if (ret < 0) { if (ret < 0) {
shell_fprintf(sh, SHELL_WARNING, "Unable to set IP %s\n", NET_WARN("Unable to set IP %s",
DST_IP6ADDR ? DST_IP6ADDR DST_IP6ADDR ? DST_IP6ADDR
: "(Default IPv6 destination address not set)"); : "(Default IPv6 destination address not set)");
} else { } else {
shell_fprintf(sh, SHELL_NORMAL, NET_INFO("Setting destination IP address %s",
"Setting destination IP address %s\n", net_sprint_ipv6_addr(&in6_addr_dst.sin6_addr));
net_sprint_ipv6_addr(
&in6_addr_dst.sin6_addr));
} }
} }
if (IS_ENABLED(CONFIG_NET_IPV4) && MY_IP4ADDR) { if (IS_ENABLED(CONFIG_NET_IPV4) && MY_IP4ADDR) {
if (zperf_get_ipv4_addr(MY_IP4ADDR, &ipv4) < 0) { ret = net_addr_pton(AF_INET, MY_IP4ADDR,
shell_fprintf(sh, SHELL_WARNING, &in4_addr_my.sin_addr);
"Unable to set IP\n"); if (ret < 0) {
NET_WARN("Unable to set IP");
} else { } else {
shell_fprintf(sh, SHELL_NORMAL, NET_INFO("Setting IP address %s",
"Setting IP address %s\n", net_sprint_ipv4_addr(&in4_addr_my.sin_addr));
net_sprint_ipv4_addr(&ipv4));
net_ipaddr_copy(&in4_addr_my.sin_addr, &ipv4);
} }
ret = net_addr_pton(AF_INET, DST_IP4ADDR, ret = net_addr_pton(AF_INET, DST_IP4ADDR,
&in4_addr_dst.sin_addr); &in4_addr_dst.sin_addr);
if (ret < 0) { if (ret < 0) {
shell_fprintf(sh, SHELL_WARNING, "Unable to set IP %s\n", NET_WARN("Unable to set IP %s",
DST_IP4ADDR ? DST_IP4ADDR DST_IP4ADDR ? DST_IP4ADDR
: "(Default IPv4 destination address not set)"); : "(Default IPv4 destination address not set)");
} else { } else {
shell_fprintf(sh, SHELL_NORMAL, NET_INFO("Setting destination IP address %s",
"Setting destination IP address %s\n", net_sprint_ipv4_addr(&in4_addr_dst.sin_addr));
net_sprint_ipv4_addr(
&in4_addr_dst.sin_addr));
} }
} }
shell_fprintf(sh, SHELL_NORMAL, "\n");
zperf_session_init();
} }
SHELL_STATIC_SUBCMD_SET_CREATE(zperf_cmd_tcp_download, SHELL_STATIC_SUBCMD_SET_CREATE(zperf_cmd_tcp_download,