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 "zperf_internal.h"
#include "zperf_session.h"
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_tcp_receiver_init();
zperf_session_init();
zperf_shell_init();
return 0;
}

View file

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

View file

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