mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-26 10:39:23 +01:00
client: Implement 'list, show' adapter commands
This commit is contained in:
parent
81172d0932
commit
d5c7fea13d
@ -121,6 +121,18 @@ static const struct proxy_interface_property adapter_properties[] = {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void display_adapter(const struct proxy_interface *proxy)
|
||||||
|
{
|
||||||
|
const struct adapter *adapter = proxy_interface_get_data(proxy);
|
||||||
|
char *caption = l_strdup_printf("%s: %s", "Adapter", adapter->name);
|
||||||
|
|
||||||
|
proxy_properties_display(proxy, caption, MARGIN, 17, 47);
|
||||||
|
|
||||||
|
l_free(caption);
|
||||||
|
|
||||||
|
display_table_footer();
|
||||||
|
}
|
||||||
|
|
||||||
static void display_adapter_inline(const char *margin, const void *data)
|
static void display_adapter_inline(const char *margin, const void *data)
|
||||||
{
|
{
|
||||||
const struct adapter *adapter = data;
|
const struct adapter *adapter = data;
|
||||||
@ -166,6 +178,14 @@ static struct proxy_interface_type adapter_interface_type = {
|
|||||||
.ops = &adapter_ops,
|
.ops = &adapter_ops,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool match_by_name(const void *a, const void *b)
|
||||||
|
{
|
||||||
|
const struct adapter *adapter = a;
|
||||||
|
const char *name = b;
|
||||||
|
|
||||||
|
return !strcmp(adapter->name, name);
|
||||||
|
}
|
||||||
|
|
||||||
static bool match_by_partial_name(const void *a, const void *b)
|
static bool match_by_partial_name(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
const struct adapter *adapter = a;
|
const struct adapter *adapter = a;
|
||||||
@ -174,14 +194,51 @@ static bool match_by_partial_name(const void *a, const void *b)
|
|||||||
return !strncmp(adapter->name, text, strlen(text));
|
return !strncmp(adapter->name, text, strlen(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct proxy_interface *get_adapter_proxy_by_name(
|
||||||
|
const char *adapter_name)
|
||||||
|
{
|
||||||
|
struct l_queue *match;
|
||||||
|
struct proxy_interface *proxy = NULL;
|
||||||
|
|
||||||
|
if (!adapter_name)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
match = proxy_interface_find_all(adapter_interface_type.interface,
|
||||||
|
match_by_name, adapter_name);
|
||||||
|
|
||||||
|
if (l_queue_length(match))
|
||||||
|
proxy = l_queue_pop_head(match);
|
||||||
|
else
|
||||||
|
display("Adapter '%s' not found\n", adapter_name);
|
||||||
|
|
||||||
|
l_queue_destroy(match, NULL);
|
||||||
|
|
||||||
|
return proxy;
|
||||||
|
}
|
||||||
|
|
||||||
static enum cmd_status cmd_list(const char *adapter_name, char *args)
|
static enum cmd_status cmd_list(const char *adapter_name, char *args)
|
||||||
{
|
{
|
||||||
return CMD_STATUS_UNSUPPORTED;
|
display_table_header("Adapters", MARGIN "%-*s%-*s%-*s%-*s", 19, "Name",
|
||||||
|
10, "Powered", 20, "Vendor", 20, "Model");
|
||||||
|
|
||||||
|
proxy_interface_display_list(adapter_interface_type.interface);
|
||||||
|
|
||||||
|
display_table_footer();
|
||||||
|
|
||||||
|
return CMD_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum cmd_status cmd_show(const char *adapter_name, char *args)
|
static enum cmd_status cmd_show(const char *adapter_name, char *args)
|
||||||
{
|
{
|
||||||
return CMD_STATUS_UNSUPPORTED;
|
const struct proxy_interface *proxy =
|
||||||
|
get_adapter_proxy_by_name(adapter_name);
|
||||||
|
|
||||||
|
if (!proxy)
|
||||||
|
return CMD_STATUS_INVALID_ARGS;
|
||||||
|
|
||||||
|
display_adapter(proxy);
|
||||||
|
|
||||||
|
return CMD_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum cmd_status cmd_set_property(const char *adapter_name, char *args)
|
static enum cmd_status cmd_set_property(const char *adapter_name, char *args)
|
||||||
@ -191,6 +248,25 @@ static enum cmd_status cmd_set_property(const char *adapter_name, char *args)
|
|||||||
|
|
||||||
static char *cmd_set_property_completion(const char *text, int state)
|
static char *cmd_set_property_completion(const char *text, int state)
|
||||||
{
|
{
|
||||||
|
static size_t index;
|
||||||
|
static size_t len;
|
||||||
|
const char *prop;
|
||||||
|
|
||||||
|
if (!state) {
|
||||||
|
index = 0;
|
||||||
|
len = strlen(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((prop = adapter_properties[index].name)) {
|
||||||
|
if (!adapter_properties[index++].is_read_write)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (strncmp(prop, text, len))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
return l_strdup(prop);
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user