@@ -1172,6 +1172,84 @@ static int cmd_wifi_stats(const struct shell *sh, size_t argc, char *argv[])
11721172 return 0 ;
11731173}
11741174
1175+ static int cmd_wifi_11k (const struct shell * sh , size_t argc , char * argv [])
1176+ {
1177+ struct net_if * iface = net_if_get_first_wifi ();
1178+ struct wifi_11k_params params = { 0 };
1179+
1180+ context .sh = sh ;
1181+
1182+ if (argc > 2 ) {
1183+ PR_WARNING ("Invalid number of arguments\n" );
1184+ return - ENOEXEC ;
1185+ }
1186+
1187+ if (argc == 1 ) {
1188+ params .oper = WIFI_MGMT_GET ;
1189+ } else {
1190+ params .oper = WIFI_MGMT_SET ;
1191+ if (!strncasecmp (argv [1 ], "enable" , 2 )) {
1192+ params .enable_11k = true;
1193+ } else if (!strncasecmp (argv [1 ], "disable" , 3 )) {
1194+ params .enable_11k = false;
1195+ } else {
1196+ PR_WARNING ("Invalid argument\n" );
1197+ return - ENOEXEC ;
1198+ }
1199+ }
1200+
1201+ if (net_mgmt (NET_REQUEST_WIFI_11K_CONFIG , iface , & params , sizeof (params ))) {
1202+ PR_WARNING ("11k enable/disable failed\n" );
1203+ return - ENOEXEC ;
1204+ }
1205+
1206+ if (params .oper == WIFI_MGMT_GET ) {
1207+ PR ("11k is %s\n" , params .enable_11k ? "disabled" : "enabled" );
1208+ } else {
1209+ PR ("%s %s requested\n" , argv [0 ], argv [1 ]);
1210+ }
1211+
1212+ return 0 ;
1213+ }
1214+
1215+
1216+ static int cmd_wifi_11k_neighbor_request (const struct shell * sh , size_t argc , char * argv [])
1217+ {
1218+ struct net_if * iface = net_if_get_first_wifi ();
1219+ struct wifi_11k_params params = { 0 };
1220+
1221+ context .sh = sh ;
1222+
1223+ if ((argc != 1 && argc != 3 ) || (argc == 3 && !strncasecmp ("ssid" , argv [1 ], 4 ))) {
1224+ PR_WARNING ("Invalid input arguments\n" );
1225+ PR_WARNING ("Usage: %s\n" , argv [0 ]);
1226+ PR_WARNING ("or %s ssid <ssid>\n" , argv [0 ]);
1227+ return - ENOEXEC ;
1228+ }
1229+
1230+ if (argc == 3 ) {
1231+ if (strlen (argv [2 ]) > (sizeof (params .ssid ) - 1 )) {
1232+ PR_WARNING ("Error: ssid too long\n" );
1233+ return - ENOEXEC ;
1234+ }
1235+ (void )memcpy ((void * )params .ssid , (const void * )argv [2 ],
1236+ (size_t )strlen (argv [2 ]));
1237+ }
1238+
1239+ if (net_mgmt (NET_REQUEST_WIFI_11K_NEIGHBOR_REQUEST , iface , & params , sizeof (params ))) {
1240+ PR_WARNING ("11k neighbor request failed\n" );
1241+ return - ENOEXEC ;
1242+ }
1243+
1244+ if (argc == 3 ) {
1245+ PR ("%s %s %s requested\n" , argv [0 ], argv [1 ], argv [2 ]);
1246+ } else {
1247+ PR ("%s requested\n" , argv [0 ]);
1248+ }
1249+
1250+ return 0 ;
1251+ }
1252+
11751253static int cmd_wifi_ps (const struct shell * sh , size_t argc , char * argv [])
11761254{
11771255 struct net_if * iface = net_if_get_first_wifi ();
@@ -3053,6 +3131,18 @@ SHELL_SUBCMD_ADD((wifi), dpp, &wifi_cmd_dpp,
30533131
30543132SHELL_SUBCMD_SET_CREATE (wifi_commands , (wifi ));
30553133
3134+ SHELL_SUBCMD_ADD ((wifi ), 11 k , & wifi_commands ,
3135+ "Configure 11k or get 11k status.\n"
3136+ "[enable/disable]\n" ,
3137+ cmd_wifi_11k ,
3138+ 1 , 1 );
3139+
3140+ SHELL_SUBCMD_ADD ((wifi ), 11 k_neighbor_request , & wifi_commands ,
3141+ "Send Neighbor Report Request frame.\n"
3142+ "[ssid <ssid>]\n" ,
3143+ cmd_wifi_11k_neighbor_request ,
3144+ 1 , 2 );
3145+
30563146#ifdef CONFIG_WIFI_NM_WPA_SUPPLICANT_WNM
30573147SHELL_SUBCMD_ADD ((wifi ), 11 v_btm_query , & wifi_commands ,
30583148 "<query_reason: The reason code for a BSS transition management query>.\n" ,
0 commit comments