Skip to content

Commit ba5f637

Browse files
committed
net: l2: wifi: shell: Add bgscan command
Add a shell command to configure the background scanning. Signed-off-by: Pieter De Gendt <[email protected]>
1 parent 0064801 commit ba5f637

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed

subsys/net/l2/wifi/wifi_shell.c

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3555,6 +3555,113 @@ static int cmd_wifi_set_bss_max_idle_period(const struct shell *sh, size_t argc,
35553555
return 0;
35563556
}
35573557

3558+
#ifdef CONFIG_WIFI_NM_WPA_SUPPLICANT_BGSCAN
3559+
static int wifi_bgscan_args_to_params(const struct shell *sh, size_t argc, char *argv[],
3560+
struct wifi_bgscan_params *params)
3561+
{
3562+
int err;
3563+
int opt;
3564+
int opt_index = 0;
3565+
struct getopt_state *state;
3566+
static const struct option long_options[] = {
3567+
{"type", required_argument, 0, 't'},
3568+
{"short-interval", required_argument, 0, 's'},
3569+
{"rss-threshold", required_argument, 0, 'r'},
3570+
{"long-interval", required_argument, 0, 'l'},
3571+
{"btm-queries", required_argument, 0, 'b'},
3572+
{"iface", required_argument, 0, 'i'},
3573+
{0, 0, 0, 0}};
3574+
unsigned long uval;
3575+
long val;
3576+
3577+
while ((opt = getopt_long(argc, argv, "t:s:r:l:b:i:", long_options, &opt_index)) != -1) {
3578+
state = getopt_state_get();
3579+
switch (opt) {
3580+
case 't':
3581+
if (strcmp("simple", state->optarg) == 0) {
3582+
params->type = WIFI_BGSCAN_SIMPLE;
3583+
} else if (strcmp("learn", state->optarg) == 0) {
3584+
params->type = WIFI_BGSCAN_LEARN;
3585+
} else if (strcmp("none", state->optarg) == 0) {
3586+
params->type = WIFI_BGSCAN_NONE;
3587+
} else {
3588+
PR_ERROR("Invalid type %s\n", state->optarg);
3589+
shell_help(sh);
3590+
return SHELL_CMD_HELP_PRINTED;
3591+
}
3592+
break;
3593+
case 's':
3594+
uval = shell_strtoul(state->optarg, 10, &err);
3595+
if (err < 0) {
3596+
PR_ERROR("Invalid short interval %s\n", state->optarg);
3597+
return err;
3598+
}
3599+
params->short_interval = uval;
3600+
break;
3601+
case 'l':
3602+
uval = shell_strtoul(state->optarg, 10, &err);
3603+
if (err < 0) {
3604+
PR_ERROR("Invalid long interval %s\n", state->optarg);
3605+
return err;
3606+
}
3607+
params->long_interval = uval;
3608+
break;
3609+
case 'b':
3610+
uval = shell_strtoul(state->optarg, 10, &err);
3611+
if (err < 0) {
3612+
PR_ERROR("Invalid BTM queries %s\n", state->optarg);
3613+
return err;
3614+
}
3615+
params->btm_queries = uval;
3616+
break;
3617+
case 'r':
3618+
val = shell_strtol(state->optarg, 10, &err);
3619+
if (err < 0) {
3620+
PR_ERROR("Invalid RSSI threshold %s\n", state->optarg);
3621+
return err;
3622+
}
3623+
params->rssi_threshold = val;
3624+
break;
3625+
case 'i':
3626+
/* Unused, but parsing to avoid unknown option error */
3627+
break;
3628+
default:
3629+
PR_ERROR("Invalid option %c\n", state->optopt);
3630+
shell_help(sh);
3631+
return SHELL_CMD_HELP_PRINTED;
3632+
}
3633+
}
3634+
3635+
return 0;
3636+
}
3637+
3638+
static int cmd_wifi_set_bgscan(const struct shell *sh, size_t argc, char *argv[])
3639+
{
3640+
struct net_if *iface = get_iface(IFACE_TYPE_STA, argc, argv);
3641+
struct wifi_bgscan_params bgscan_params = {
3642+
.type = WIFI_BGSCAN_NONE,
3643+
.short_interval = 30,
3644+
.long_interval = 300,
3645+
.rssi_threshold = 0,
3646+
.btm_queries = 0,
3647+
};
3648+
int ret;
3649+
3650+
if (wifi_bgscan_args_to_params(sh, argc, argv, &bgscan_params) != 0) {
3651+
return -ENOEXEC;
3652+
}
3653+
3654+
ret = net_mgmt(NET_REQUEST_WIFI_BGSCAN, iface, &bgscan_params,
3655+
sizeof(struct wifi_bgscan_params));
3656+
if (ret != 0) {
3657+
PR_WARNING("Setting background scanning parameters failed: %s\n", strerror(-ret));
3658+
return -ENOEXEC;
3659+
}
3660+
3661+
return 0;
3662+
}
3663+
#endif
3664+
35583665
static int wifi_config_args_to_params(const struct shell *sh, size_t argc, char *argv[],
35593666
struct wifi_config_params *params)
35603667
{
@@ -4098,6 +4205,19 @@ SHELL_SUBCMD_ADD((wifi), bss_max_idle_period, NULL,
40984205
cmd_wifi_set_bss_max_idle_period,
40994206
2, 2);
41004207

4208+
#ifdef CONFIG_WIFI_NM_WPA_SUPPLICANT_BGSCAN
4209+
SHELL_SUBCMD_ADD((wifi), bgscan, NULL,
4210+
"Configure background scanning.\n"
4211+
"<-t, --type simple/learn/none> : The scanning type, use none to disable.\n"
4212+
"[-s, --short-interval <val>] : Short scan interval (default: 30).\n"
4213+
"[-l, --long-interval <val>] : Long scan interval (default: 300).\n"
4214+
"[-r, --rssi-threshold <val>] : Signal strength threshold (default: disabled).\n"
4215+
"[-b, --btm-queries <val>] : BTM queries before scanning (default: disabled).\n"
4216+
"[-i, --iface=<interface index>] : Interface index.\n",
4217+
cmd_wifi_set_bgscan,
4218+
2, 6);
4219+
#endif /* CONFIG_WIFI_NM_WPA_SUPPLICANT_BGSCAN */
4220+
41014221
SHELL_SUBCMD_ADD((wifi), config, NULL,
41024222
"Configure STA parameters.\n"
41034223
"-o, --okc=<0/1>: Opportunistic Key Caching. 0: disable, 1: enable\n"

0 commit comments

Comments
 (0)