* [PATCH v2 3/4] client: ap: show Name in 'ap <wlan> show'
2021-02-01 23:52 [PATCH v2 1/4] ap: add Name property James Prestwood
2021-02-01 23:52 ` [PATCH v2 2/4] doc: document Name property on AP interface James Prestwood
@ 2021-02-01 23:52 ` James Prestwood
2021-02-01 23:52 ` [PATCH v2 4/4] ap: tie diagnostic interface to AP Start/Stop James Prestwood
2021-02-02 21:55 ` [PATCH v2 1/4] ap: add Name property Denis Kenzior
3 siblings, 0 replies; 5+ messages in thread
From: James Prestwood @ 2021-02-01 23:52 UTC (permalink / raw)
To: iwd
[-- Attachment #1: Type: text/plain, Size: 2793 bytes --]
This will show some basic AP information like Started and
network Name. Some cleanup was done to make the AP interface
and client table columns line up.
---
client/ap.c | 45 ++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 42 insertions(+), 3 deletions(-)
v2:
* Added cleanup of 'name'
* Delayed check of diagnostic interface until after the AP
properties are displayed.
diff --git a/client/ap.c b/client/ap.c
index 7130bb9a..b0386c60 100644
--- a/client/ap.c
+++ b/client/ap.c
@@ -34,6 +34,7 @@
struct ap {
bool started;
+ char *name;
};
static void *ap_create(void)
@@ -45,6 +46,9 @@ static void ap_destroy(void *data)
{
struct ap *ap = data;
+ if (ap->name)
+ l_free(ap->name);
+
l_free(ap);
}
@@ -74,8 +78,35 @@ static void update_started(void *data, struct l_dbus_message_iter *variant)
ap->started = value;
}
+static const char *get_name_tostr(const void *data)
+{
+ const struct ap *ap = data;
+
+ if (!ap->name)
+ return "";
+
+ return ap->name;
+}
+
+static void update_name(void *data, struct l_dbus_message_iter *variant)
+{
+ struct ap *ap = data;
+ const char *name;
+
+ if (ap->name)
+ l_free(ap->name);
+
+ if (!l_dbus_message_iter_get_variant(variant, "s", &name)) {
+ ap->name = NULL;
+ return;
+ }
+
+ ap->name = l_strdup(name);
+}
+
static const struct proxy_interface_property ap_properties[] = {
{ "Started", "b", update_started, get_started_tostr },
+ { "Name", "s", update_name, get_name_tostr },
{ }
};
@@ -212,9 +243,9 @@ static void ap_get_diagnostics_callback(struct l_dbus_message *message,
while (l_dbus_message_iter_next_entry(&array, &iter)) {
sprintf(client_num, "Client %u", idx++);
- display_table_header(client_num, "%-*s%-*s",
+ display_table_header(client_num, " %-*s%-*s",
20, "Property", 20, "Value");
- diagnostic_display(&iter, "", 20, 20);
+ diagnostic_display(&iter, " ", 20, 20);
display_table_footer();
}
}
@@ -223,12 +254,20 @@ 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);
+ const struct proxy_interface *ap_i =
+ device_proxy_find(device_name, IWD_ACCESS_POINT_INTERFACE);
- if (!ap_diagnostic) {
+ if (!ap_i) {
display("No ap on device: '%s'\n", device_name);
return CMD_STATUS_INVALID_VALUE;
}
+ proxy_properties_display(ap_i, "Access Point Interface", MARGIN, 20, 20);
+ display_table_footer();
+
+ if (!ap_diagnostic)
+ return CMD_STATUS_DONE;
+
proxy_interface_method_call(ap_diagnostic, "GetDiagnostics", "",
ap_get_diagnostics_callback);
--
2.26.2
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH v2 4/4] ap: tie diagnostic interface to AP Start/Stop
2021-02-01 23:52 [PATCH v2 1/4] ap: add Name property James Prestwood
2021-02-01 23:52 ` [PATCH v2 2/4] doc: document Name property on AP interface James Prestwood
2021-02-01 23:52 ` [PATCH v2 3/4] client: ap: show Name in 'ap <wlan> show' James Prestwood
@ 2021-02-01 23:52 ` James Prestwood
2021-02-02 21:55 ` [PATCH v2 1/4] ap: add Name property Denis Kenzior
3 siblings, 0 replies; 5+ messages in thread
From: James Prestwood @ 2021-02-01 23:52 UTC (permalink / raw)
To: iwd
[-- Attachment #1: Type: text/plain, Size: 1927 bytes --]
The diagnostic interface serves no purpose until the AP has
been started. Any calls on it will return an error so instead
it makes more sense to bring it up when the AP is started, and
down when the AP is stopped.
---
src/ap.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/src/ap.c b/src/ap.c
index f33d73e1..8ea26a0d 100644
--- a/src/ap.c
+++ b/src/ap.c
@@ -2966,6 +2966,11 @@ static void ap_if_event_func(enum ap_event_type type, const void *event_data,
if (L_WARN_ON(!ap_if->pending))
break;
+ l_dbus_object_add_interface(dbus_get_bus(),
+ netdev_get_path(ap_if->netdev),
+ IWD_AP_DIAGNOSTIC_INTERFACE,
+ ap_if);
+
reply = l_dbus_message_new_method_return(ap_if->pending);
dbus_pending_reply(&ap_if->pending, reply);
l_dbus_property_changed(dbus_get_bus(),
@@ -2977,6 +2982,10 @@ static void ap_if_event_func(enum ap_event_type type, const void *event_data,
break;
case AP_EVENT_STOPPING:
+ l_dbus_object_remove_interface(dbus_get_bus(),
+ netdev_get_path(ap_if->netdev),
+ IWD_AP_DIAGNOSTIC_INTERFACE);
+
l_dbus_property_changed(dbus_get_bus(),
netdev_get_path(ap_if->netdev),
IWD_AP_INTERFACE, "Started");
@@ -3265,16 +3274,12 @@ static void ap_add_interface(struct netdev *netdev)
/* setup ap dbus interface */
l_dbus_object_add_interface(dbus_get_bus(),
netdev_get_path(netdev), IWD_AP_INTERFACE, ap_if);
- l_dbus_object_add_interface(dbus_get_bus(), netdev_get_path(netdev),
- IWD_AP_DIAGNOSTIC_INTERFACE, ap_if);
}
static void ap_remove_interface(struct netdev *netdev)
{
l_dbus_object_remove_interface(dbus_get_bus(),
netdev_get_path(netdev), IWD_AP_INTERFACE);
- l_dbus_object_remove_interface(dbus_get_bus(), netdev_get_path(netdev),
- IWD_AP_DIAGNOSTIC_INTERFACE);
}
static void ap_netdev_watch(struct netdev *netdev,
--
2.26.2
^ permalink raw reply related [flat|nested] 5+ messages in thread