3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2026-02-06 09:48:08 +01:00

dbus: register interface before acquiring name

If the interface isn't available by the time we acquire the well-known
name, clients can get confused when the expected interfaces are missing
during bus activation.
This commit is contained in:
Ronan Pigott 2026-01-31 14:53:54 -07:00 committed by Denis Kenzior
parent 3e7a8feee0
commit b49ed01626

View File

@ -197,29 +197,12 @@ static void request_name_callback(struct l_dbus *dbus, bool success,
{ {
if (!success) { if (!success) {
l_error("Name request failed"); l_error("Name request failed");
goto fail_exit; l_main_quit();
} }
if (!l_dbus_object_manager_enable(dbus, "/"))
l_warn("Unable to register the ObjectManager");
if (!l_dbus_object_add_interface(dbus, IWD_BASE_PATH,
IWD_DAEMON_INTERFACE,
NULL) ||
!l_dbus_object_add_interface(dbus, IWD_BASE_PATH,
L_DBUS_INTERFACE_PROPERTIES,
NULL))
l_info("Unable to add %s and/or %s at %s",
IWD_DAEMON_INTERFACE, L_DBUS_INTERFACE_PROPERTIES,
IWD_BASE_PATH);
/* TODO: Always request nl80211 for now, ignoring auto-loading */ /* TODO: Always request nl80211 for now, ignoring auto-loading */
l_genl_request_family(genl, NL80211_GENL_NAME, nl80211_appeared, l_genl_request_family(genl, NL80211_GENL_NAME, nl80211_appeared,
NULL, NULL); NULL, NULL);
return;
fail_exit:
l_main_quit();
} }
static struct l_dbus_message *iwd_dbus_get_info(struct l_dbus *dbus, static struct l_dbus_message *iwd_dbus_get_info(struct l_dbus *dbus,
@ -249,12 +232,25 @@ static void dbus_ready(void *user_data)
{ {
struct l_dbus *dbus = user_data; struct l_dbus *dbus = user_data;
l_dbus_name_acquire(dbus, "net.connman.iwd", false, false, false,
request_name_callback, NULL);
l_dbus_register_interface(dbus, IWD_DAEMON_INTERFACE, l_dbus_register_interface(dbus, IWD_DAEMON_INTERFACE,
iwd_setup_deamon_interface, iwd_setup_deamon_interface,
NULL, false); NULL, false);
if (!l_dbus_object_manager_enable(dbus, "/"))
l_warn("Unable to register the ObjectManager");
if (!l_dbus_object_add_interface(dbus, IWD_BASE_PATH,
IWD_DAEMON_INTERFACE,
NULL) ||
!l_dbus_object_add_interface(dbus, IWD_BASE_PATH,
L_DBUS_INTERFACE_PROPERTIES,
NULL))
l_info("Unable to add %s and/or %s at %s",
IWD_DAEMON_INTERFACE, L_DBUS_INTERFACE_PROPERTIES,
IWD_BASE_PATH);
l_dbus_name_acquire(dbus, "net.connman.iwd", false, false, false,
request_name_callback, NULL);
} }
static void dbus_disconnected(void *user_data) static void dbus_disconnected(void *user_data)