@@ -3555,6 +3555,113 @@ static int cmd_wifi_set_bss_max_idle_period(const struct shell *sh, size_t argc,
3555
3555
return 0 ;
3556
3556
}
3557
3557
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
+
3558
3665
static int wifi_config_args_to_params (const struct shell * sh , size_t argc , char * argv [],
3559
3666
struct wifi_config_params * params )
3560
3667
{
@@ -4098,6 +4205,19 @@ SHELL_SUBCMD_ADD((wifi), bss_max_idle_period, NULL,
4098
4205
cmd_wifi_set_bss_max_idle_period ,
4099
4206
2 , 2 );
4100
4207
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
+
4101
4221
SHELL_SUBCMD_ADD ((wifi ), config , NULL ,
4102
4222
"Configure STA parameters.\n"
4103
4223
"-o, --okc=<0/1>: Opportunistic Key Caching. 0: disable, 1: enable\n"
0 commit comments