@@ -1172,6 +1172,84 @@ static int cmd_wifi_stats(const struct shell *sh, size_t argc, char *argv[])
1172
1172
return 0 ;
1173
1173
}
1174
1174
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
+
1175
1253
static int cmd_wifi_ps (const struct shell * sh , size_t argc , char * argv [])
1176
1254
{
1177
1255
struct net_if * iface = net_if_get_first_wifi ();
@@ -3057,6 +3135,18 @@ SHELL_SUBCMD_ADD((wifi), dpp, &wifi_cmd_dpp,
3057
3135
3058
3136
SHELL_SUBCMD_SET_CREATE (wifi_commands , (wifi ));
3059
3137
3138
+ SHELL_SUBCMD_ADD ((wifi ), 11 k , & wifi_commands ,
3139
+ "Configure 11k or get 11k status.\n"
3140
+ "[enable/disable]\n" ,
3141
+ cmd_wifi_11k ,
3142
+ 1 , 1 );
3143
+
3144
+ SHELL_SUBCMD_ADD ((wifi ), 11 k_neighbor_request , & wifi_commands ,
3145
+ "Send Neighbor Report Request frame.\n"
3146
+ "[ssid <ssid>]\n" ,
3147
+ cmd_wifi_11k_neighbor_request ,
3148
+ 1 , 2 );
3149
+
3060
3150
#ifdef CONFIG_WIFI_NM_WPA_SUPPLICANT_WNM
3061
3151
SHELL_SUBCMD_ADD ((wifi ), 11 v_btm_query , & wifi_commands ,
3062
3152
"<query_reason: The reason code for a BSS transition management query>.\n" ,
0 commit comments