mirror of
				https://git.kernel.org/pub/scm/network/wireless/iwd.git
				synced 2025-11-04 08:57:29 +01:00 
			
		
		
		
	client: implement "ap <wlan> show"
This command uses GetDiagnostics to show a list of connected clients and some information about them. The information contained for each connected station nearly maps 1:1 with the station diagnostics information shown in "station <wlan> show" apart from "ConnectedBss" which is now "Address".
This commit is contained in:
		
							parent
							
								
									11d1d860f0
								
							
						
					
					
						commit
						9659c936cd
					
				
							
								
								
									
										49
									
								
								client/ap.c
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								client/ap.c
									
									
									
									
									
								
							@ -30,6 +30,7 @@
 | 
			
		||||
#include "client/dbus-proxy.h"
 | 
			
		||||
#include "client/device.h"
 | 
			
		||||
#include "client/display.h"
 | 
			
		||||
#include "client/diagnostic.h"
 | 
			
		||||
 | 
			
		||||
struct ap {
 | 
			
		||||
	bool started;
 | 
			
		||||
@ -189,6 +190,51 @@ static enum cmd_status cmd_stop(const char *device_name, char **argv, int argc)
 | 
			
		||||
	return CMD_STATUS_TRIGGERED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct proxy_interface_type ap_diagnostic_interface_type = {
 | 
			
		||||
	.interface = IWD_AP_DIAGNOSTIC_INTERFACE,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void ap_get_diagnostics_callback(struct l_dbus_message *message,
 | 
			
		||||
					void *user_data)
 | 
			
		||||
{
 | 
			
		||||
	struct l_dbus_message_iter array;
 | 
			
		||||
	struct l_dbus_message_iter iter;
 | 
			
		||||
	uint16_t idx = 0;
 | 
			
		||||
	char client_num[15];
 | 
			
		||||
 | 
			
		||||
	if (dbus_message_has_error(message))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (!l_dbus_message_get_arguments(message, "aa{sv}", &array)) {
 | 
			
		||||
		display("Failed to parse GetDiagnostics message");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while (l_dbus_message_iter_next_entry(&array, &iter)) {
 | 
			
		||||
		sprintf(client_num, "Client %u", idx++);
 | 
			
		||||
		display_table_header(client_num, "%-*s%-*s",
 | 
			
		||||
					20, "Property", 20, "Value");
 | 
			
		||||
		diagnostic_display(&iter, "", 20, 20);
 | 
			
		||||
		display_table_footer();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static enum cmd_status cmd_show(const char *device_name, char **argv, int argc)
 | 
			
		||||
{
 | 
			
		||||
	const struct proxy_interface *ap_diagnostic =
 | 
			
		||||
		device_proxy_find(device_name, IWD_AP_DIAGNOSTIC_INTERFACE);
 | 
			
		||||
 | 
			
		||||
	if (!ap_diagnostic) {
 | 
			
		||||
		display("No ap on device: '%s'\n", device_name);
 | 
			
		||||
		return CMD_STATUS_INVALID_VALUE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	proxy_interface_method_call(ap_diagnostic, "GetDiagnostics", "",
 | 
			
		||||
					ap_get_diagnostics_callback);
 | 
			
		||||
 | 
			
		||||
	return CMD_STATUS_TRIGGERED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct command ap_commands[] = {
 | 
			
		||||
	{ NULL, "list", NULL, cmd_list, "List devices in AP mode", true },
 | 
			
		||||
	{ "<wlan>", "start", "<\"network name\"> <passphrase>", cmd_start,
 | 
			
		||||
@ -196,6 +242,7 @@ static const struct command ap_commands[] = {
 | 
			
		||||
		"name\" with\n\t\t\t\t\t\t    a passphrase" },
 | 
			
		||||
	{ "<wlan>", "stop", NULL,   cmd_stop, "Stop a started access\n"
 | 
			
		||||
		"\t\t\t\t\t\t    point" },
 | 
			
		||||
	{ "<wlan", "show", NULL, cmd_show, "Show AP info", false },
 | 
			
		||||
	{ }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -236,6 +283,7 @@ COMMAND_FAMILY(ap_command_family, ap_command_family_init,
 | 
			
		||||
static int ap_interface_init(void)
 | 
			
		||||
{
 | 
			
		||||
	proxy_interface_type_register(&ap_interface_type);
 | 
			
		||||
	proxy_interface_type_register(&ap_diagnostic_interface_type);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
@ -243,6 +291,7 @@ static int ap_interface_init(void)
 | 
			
		||||
static void ap_interface_exit(void)
 | 
			
		||||
{
 | 
			
		||||
	proxy_interface_type_unregister(&ap_interface_type);
 | 
			
		||||
	proxy_interface_type_unregister(&ap_diagnostic_interface_type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
INTERFACE_TYPE(ap_interface_type, ap_interface_init, ap_interface_exit)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user