summary refs log tree commit diff
path: root/src/devices/wifi/nm-iwd-manager.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2020-10-05 22:27:18 +0200
committerMichael Biebl <biebl@debian.org>2020-10-05 22:27:18 +0200
commitaafc1dbe4712c86189bbc1d4d54ad8cb4c69be7e (patch)
treea2a9bb4d007339a0b1304540388230ccedac32bd /src/devices/wifi/nm-iwd-manager.c
parente7b44ef4c80907346ec7492a09c45277459924fc (diff)
New upstream version 1.27.90 upstream/1.27.90
Diffstat (limited to 'src/devices/wifi/nm-iwd-manager.c')
-rw-r--r--src/devices/wifi/nm-iwd-manager.c1491
1 files changed, 754 insertions, 737 deletions
diff --git a/src/devices/wifi/nm-iwd-manager.c b/src/devices/wifi/nm-iwd-manager.c
index 39c863a3..bdff20ac 100644
--- a/src/devices/wifi/nm-iwd-manager.c
+++ b/src/devices/wifi/nm-iwd-manager.c
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0+
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2017 Intel Corporation
  */
@@ -20,354 +20,353 @@
 /*****************************************************************************/
 
 typedef struct {
-	const char *name;
-	NMIwdNetworkSecurity security;
-	char buf[0];
+    const char *         name;
+    NMIwdNetworkSecurity security;
+    char                 buf[0];
 } KnownNetworkId;
 
 typedef struct {
-	GDBusProxy *known_network;
-	NMSettingsConnection *mirror_connection;
+    GDBusProxy *          known_network;
+    NMSettingsConnection *mirror_connection;
 } KnownNetworkData;
 
 typedef struct {
-	NMManager *manager;
-	NMSettings *settings;
-	GCancellable *cancellable;
-	gboolean running;
-	GDBusObjectManager *object_manager;
-	guint agent_id;
-	char *agent_path;
-	GHashTable *known_networks;
+    NMManager *         manager;
+    NMSettings *        settings;
+    GCancellable *      cancellable;
+    gboolean            running;
+    GDBusObjectManager *object_manager;
+    guint               agent_id;
+    char *              agent_path;
+    GHashTable *        known_networks;
 } NMIwdManagerPrivate;
 
 struct _NMIwdManager {
-	GObject parent;
-	NMIwdManagerPrivate _priv;
+    GObject             parent;
+    NMIwdManagerPrivate _priv;
 };
 
 struct _NMIwdManagerClass {
-	GObjectClass parent;
+    GObjectClass parent;
 };
 
-G_DEFINE_TYPE (NMIwdManager, nm_iwd_manager, G_TYPE_OBJECT)
+G_DEFINE_TYPE(NMIwdManager, nm_iwd_manager, G_TYPE_OBJECT)
 
-#define NM_IWD_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMIwdManager, NM_IS_IWD_MANAGER)
+#define NM_IWD_MANAGER_GET_PRIVATE(self) _NM_GET_PRIVATE(self, NMIwdManager, NM_IS_IWD_MANAGER)
 
 /*****************************************************************************/
 
-#define _NMLOG_PREFIX_NAME                "iwd-manager"
-#define _NMLOG_DOMAIN                     LOGD_WIFI
-
-#define _NMLOG(level, ...) \
-	G_STMT_START { \
-		if (nm_logging_enabled (level, _NMLOG_DOMAIN)) { \
-			char __prefix[32]; \
-			\
-			if (self) \
-				g_snprintf (__prefix, sizeof (__prefix), "%s[%p]", ""_NMLOG_PREFIX_NAME"", (self)); \
-			else \
-				g_strlcpy (__prefix, _NMLOG_PREFIX_NAME, sizeof (__prefix)); \
-			_nm_log ((level), (_NMLOG_DOMAIN), 0, NULL, NULL, \
-			          "%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
-			          __prefix _NM_UTILS_MACRO_REST(__VA_ARGS__)); \
-		} \
-	} G_STMT_END
+#define _NMLOG_PREFIX_NAME "iwd-manager"
+#define _NMLOG_DOMAIN      LOGD_WIFI
+
+#define _NMLOG(level, ...)                                                 \
+    G_STMT_START                                                           \
+    {                                                                      \
+        if (nm_logging_enabled(level, _NMLOG_DOMAIN)) {                    \
+            char __prefix[32];                                             \
+                                                                           \
+            if (self)                                                      \
+                g_snprintf(__prefix,                                       \
+                           sizeof(__prefix),                               \
+                           "%s[%p]",                                       \
+                           ""_NMLOG_PREFIX_NAME                            \
+                           "",                                             \
+                           (self));                                        \
+            else                                                           \
+                g_strlcpy(__prefix, _NMLOG_PREFIX_NAME, sizeof(__prefix)); \
+            _nm_log((level),                                               \
+                    (_NMLOG_DOMAIN),                                       \
+                    0,                                                     \
+                    NULL,                                                  \
+                    NULL,                                                  \
+                    "%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__),             \
+                    __prefix _NM_UTILS_MACRO_REST(__VA_ARGS__));           \
+        }                                                                  \
+    }                                                                      \
+    G_STMT_END
 
 /*****************************************************************************/
 
-static void mirror_8021x_connection_take_and_delete (NMSettingsConnection *sett_conn);
+static void mirror_8021x_connection_take_and_delete(NMSettingsConnection *sett_conn);
 
 /*****************************************************************************/
 
 static const char *
-get_variant_string_or_null (GVariant *v)
+get_variant_string_or_null(GVariant *v)
 {
-	if (!v)
-		return NULL;
+    if (!v)
+        return NULL;
 
-	if (   !g_variant_is_of_type (v, G_VARIANT_TYPE_STRING)
-	    && !g_variant_is_of_type (v, G_VARIANT_TYPE_OBJECT_PATH))
-		return NULL;
+    if (!g_variant_is_of_type(v, G_VARIANT_TYPE_STRING)
+        && !g_variant_is_of_type(v, G_VARIANT_TYPE_OBJECT_PATH))
+        return NULL;
 
-	return g_variant_get_string (v, NULL);
+    return g_variant_get_string(v, NULL);
 }
 
 static const char *
-get_property_string_or_null (GDBusProxy *proxy, const char *property)
+get_property_string_or_null(GDBusProxy *proxy, const char *property)
 {
-	gs_unref_variant GVariant *value = NULL;
+    gs_unref_variant GVariant *value = NULL;
 
-	if (!proxy || !property)
-		return NULL;
+    if (!proxy || !property)
+        return NULL;
 
-	value = g_dbus_proxy_get_cached_property (proxy, property);
+    value = g_dbus_proxy_get_cached_property(proxy, property);
 
-	return get_variant_string_or_null (value);
+    return get_variant_string_or_null(value);
 }
 
 static void
-agent_dbus_method_cb (GDBusConnection *connection,
-                      const char *sender, const char *object_path,
-                      const char *interface_name, const char *method_name,
-                      GVariant *parameters,
-                      GDBusMethodInvocation *invocation,
-                      gpointer user_data)
+agent_dbus_method_cb(GDBusConnection *      connection,
+                     const char *           sender,
+                     const char *           object_path,
+                     const char *           interface_name,
+                     const char *           method_name,
+                     GVariant *             parameters,
+                     GDBusMethodInvocation *invocation,
+                     gpointer               user_data)
 {
-	NMIwdManager *self = user_data;
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-	const char *network_path, *device_path, *ifname;
-	gs_unref_object GDBusInterface *network = NULL, *device_obj = NULL;
-	int ifindex;
-	NMDevice *device;
-	gs_free char *name_owner = NULL;
-	int errsv;
-
-	/* Be paranoid and check the sender address */
-	name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (priv->object_manager));
-	if (!nm_streq0 (name_owner, sender))
-		goto return_error;
-
-	if (!strcmp (method_name, "RequestUserPassword"))
-		g_variant_get (parameters, "(&os)", &network_path, NULL);
-	else
-		g_variant_get (parameters, "(&o)", &network_path);
-
-	network = g_dbus_object_manager_get_interface (priv->object_manager,
-	                                               network_path,
-	                                               NM_IWD_NETWORK_INTERFACE);
-	if (!network) {
-		_LOGE ("unable to find the network object");
-		return;
-	}
-
-
-	device_path = get_property_string_or_null (G_DBUS_PROXY (network), "Device");
-	if (!device_path) {
-		_LOGD ("agent-request: device not cached for network %s in IWD Agent request",
-		       network_path);
-		goto return_error;
-	}
-
-	device_obj = g_dbus_object_manager_get_interface (priv->object_manager,
-	                                                  device_path,
-	                                                  NM_IWD_DEVICE_INTERFACE);
-
-	ifname = get_property_string_or_null (G_DBUS_PROXY (device_obj), "Name");
-	if (!ifname) {
-		_LOGD ("agent-request: name not cached for device %s in IWD Agent request",
-		       device_path);
-		goto return_error;
-	}
-
-	ifindex = if_nametoindex (ifname);
-	if (!ifindex) {
-		errsv = errno;
-		_LOGD ("agent-request: if_nametoindex failed for Name %s for Device at %s: %i",
-		       ifname, device_path, errsv);
-		goto return_error;
-	}
-
-	device = nm_manager_get_device_by_ifindex (priv->manager, ifindex);
-	if (!NM_IS_DEVICE_IWD (device)) {
-		_LOGD ("agent-request: IWD device named %s is not a Wifi device in IWD Agent request",
-		       ifname);
-		goto return_error;
-	}
-
-	if (nm_device_iwd_agent_query (NM_DEVICE_IWD (device), invocation))
-		return;
-
-	_LOGD ("agent-request: device %s did not handle the IWD Agent request", ifname);
+    NMIwdManager *       self = user_data;
+    NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self);
+    const char *         network_path, *device_path, *ifname;
+    gs_unref_object GDBusInterface *network = NULL, *device_obj = NULL;
+    int                             ifindex;
+    NMDevice *                      device;
+    gs_free char *                  name_owner = NULL;
+    int                             errsv;
+
+    /* Be paranoid and check the sender address */
+    name_owner = g_dbus_object_manager_client_get_name_owner(
+        G_DBUS_OBJECT_MANAGER_CLIENT(priv->object_manager));
+    if (!nm_streq0(name_owner, sender))
+        goto return_error;
+
+    if (!strcmp(method_name, "RequestUserPassword"))
+        g_variant_get(parameters, "(&os)", &network_path, NULL);
+    else
+        g_variant_get(parameters, "(&o)", &network_path);
+
+    network = g_dbus_object_manager_get_interface(priv->object_manager,
+                                                  network_path,
+                                                  NM_IWD_NETWORK_INTERFACE);
+    if (!network) {
+        _LOGE("unable to find the network object");
+        return;
+    }
+
+    device_path = get_property_string_or_null(G_DBUS_PROXY(network), "Device");
+    if (!device_path) {
+        _LOGD("agent-request: device not cached for network %s in IWD Agent request", network_path);
+        goto return_error;
+    }
+
+    device_obj = g_dbus_object_manager_get_interface(priv->object_manager,
+                                                     device_path,
+                                                     NM_IWD_DEVICE_INTERFACE);
+
+    ifname = get_property_string_or_null(G_DBUS_PROXY(device_obj), "Name");
+    if (!ifname) {
+        _LOGD("agent-request: name not cached for device %s in IWD Agent request", device_path);
+        goto return_error;
+    }
+
+    ifindex = if_nametoindex(ifname);
+    if (!ifindex) {
+        errsv = errno;
+        _LOGD("agent-request: if_nametoindex failed for Name %s for Device at %s: %i",
+              ifname,
+              device_path,
+              errsv);
+        goto return_error;
+    }
+
+    device = nm_manager_get_device_by_ifindex(priv->manager, ifindex);
+    if (!NM_IS_DEVICE_IWD(device)) {
+        _LOGD("agent-request: IWD device named %s is not a Wifi device in IWD Agent request",
+              ifname);
+        goto return_error;
+    }
+
+    if (nm_device_iwd_agent_query(NM_DEVICE_IWD(device), invocation))
+        return;
+
+    _LOGD("agent-request: device %s did not handle the IWD Agent request", ifname);
 
 return_error:
-	/* IWD doesn't look at the specific error */
-	g_dbus_method_invocation_return_error_literal (invocation, NM_DEVICE_ERROR,
-	                                               NM_DEVICE_ERROR_INVALID_CONNECTION,
-	                                               "Secrets not available for this connection");
+    /* IWD doesn't look at the specific error */
+    g_dbus_method_invocation_return_error_literal(invocation,
+                                                  NM_DEVICE_ERROR,
+                                                  NM_DEVICE_ERROR_INVALID_CONNECTION,
+                                                  "Secrets not available for this connection");
 }
 
-static const GDBusInterfaceInfo iwd_agent_iface_info = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT (
-	"net.connman.iwd.Agent",
-	.methods = NM_DEFINE_GDBUS_METHOD_INFOS (
-		NM_DEFINE_GDBUS_METHOD_INFO (
-			"RequestPassphrase",
-			.in_args = NM_DEFINE_GDBUS_ARG_INFOS (
-				NM_DEFINE_GDBUS_ARG_INFO ("network", "o"),
-			),
-			.out_args = NM_DEFINE_GDBUS_ARG_INFOS (
-				NM_DEFINE_GDBUS_ARG_INFO ("passphrase", "s"),
-			),
-		),
-		NM_DEFINE_GDBUS_METHOD_INFO (
-			"RequestPrivateKeyPassphrase",
-			.in_args = NM_DEFINE_GDBUS_ARG_INFOS (
-				NM_DEFINE_GDBUS_ARG_INFO ("network", "o"),
-			),
-			.out_args = NM_DEFINE_GDBUS_ARG_INFOS (
-				NM_DEFINE_GDBUS_ARG_INFO ("passphrase", "s"),
-			),
-		),
-		NM_DEFINE_GDBUS_METHOD_INFO (
-			"RequestUserNameAndPassword",
-			.in_args = NM_DEFINE_GDBUS_ARG_INFOS (
-				NM_DEFINE_GDBUS_ARG_INFO ("network", "o"),
-			),
-			.out_args = NM_DEFINE_GDBUS_ARG_INFOS (
-				NM_DEFINE_GDBUS_ARG_INFO ("user", "s"),
-				NM_DEFINE_GDBUS_ARG_INFO ("password", "s"),
-			),
-		),
-		NM_DEFINE_GDBUS_METHOD_INFO (
-			"RequestUserPassword",
-			.in_args = NM_DEFINE_GDBUS_ARG_INFOS (
-				NM_DEFINE_GDBUS_ARG_INFO ("network", "o"),
-				NM_DEFINE_GDBUS_ARG_INFO ("user", "s"),
-			),
-			.out_args = NM_DEFINE_GDBUS_ARG_INFOS (
-				NM_DEFINE_GDBUS_ARG_INFO ("password", "s"),
-			),
-		),
-	),
-);
+static const GDBusInterfaceInfo iwd_agent_iface_info = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT(
+    "net.connman.iwd.Agent",
+    .methods = NM_DEFINE_GDBUS_METHOD_INFOS(
+        NM_DEFINE_GDBUS_METHOD_INFO(
+            "RequestPassphrase",
+            .in_args  = NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("network", "o"), ),
+            .out_args = NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("passphrase", "s"), ), ),
+        NM_DEFINE_GDBUS_METHOD_INFO(
+            "RequestPrivateKeyPassphrase",
+            .in_args  = NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("network", "o"), ),
+            .out_args = NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("passphrase", "s"), ), ),
+        NM_DEFINE_GDBUS_METHOD_INFO(
+            "RequestUserNameAndPassword",
+            .in_args  = NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("network", "o"), ),
+            .out_args = NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("user", "s"),
+                                                  NM_DEFINE_GDBUS_ARG_INFO("password", "s"), ), ),
+        NM_DEFINE_GDBUS_METHOD_INFO(
+            "RequestUserPassword",
+            .in_args = NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("network", "o"),
+                                                 NM_DEFINE_GDBUS_ARG_INFO("user", "s"), ),
+            .out_args =
+                NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("password", "s"), ), ), ), );
 
 static guint
-iwd_agent_export (GDBusConnection *connection, gpointer user_data,
-                  char **agent_path, GError **error)
+iwd_agent_export(GDBusConnection *connection, gpointer user_data, char **agent_path, GError **error)
 {
-	static const GDBusInterfaceVTable vtable = {
-		.method_call = agent_dbus_method_cb,
-	};
-	char path[50];
-	unsigned int rnd;
-	guint id;
-
-	nm_utils_random_bytes (&rnd, sizeof (rnd));
-
-	nm_sprintf_buf (path, "/agent/%u", rnd);
-
-	id = g_dbus_connection_register_object (connection, path,
-	                                        NM_UNCONST_PTR (GDBusInterfaceInfo, &iwd_agent_iface_info),
-	                                        &vtable, user_data, NULL, error);
-
-	if (id)
-		*agent_path = g_strdup (path);
-	return id;
+    static const GDBusInterfaceVTable vtable = {
+        .method_call = agent_dbus_method_cb,
+    };
+    char         path[50];
+    unsigned int rnd;
+    guint        id;
+
+    nm_utils_random_bytes(&rnd, sizeof(rnd));
+
+    nm_sprintf_buf(path, "/agent/%u", rnd);
+
+    id =
+        g_dbus_connection_register_object(connection,
+                                          path,
+                                          NM_UNCONST_PTR(GDBusInterfaceInfo, &iwd_agent_iface_info),
+                                          &vtable,
+                                          user_data,
+                                          NULL,
+                                          error);
+
+    if (id)
+        *agent_path = g_strdup(path);
+    return id;
 }
 
 static void
-register_agent (NMIwdManager *self)
+register_agent(NMIwdManager *self)
 {
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-	GDBusInterface *agent_manager;
-
-	agent_manager = g_dbus_object_manager_get_interface (priv->object_manager,
-	                                                     "/net/connman/iwd",
-	                                                     NM_IWD_AGENT_MANAGER_INTERFACE);
-
-	if (!agent_manager) {
-		/* IWD prior to 1.0 dated 30 October, 2019 has the agent manager on a
-		 * different path. */
-		agent_manager = g_dbus_object_manager_get_interface (priv->object_manager,
-		                                                     "/",
-		                                                     NM_IWD_AGENT_MANAGER_INTERFACE);
-	}
-
-	if (!agent_manager) {
-		_LOGE ("unable to register the IWD Agent: PSK/8021x Wi-Fi networks may not work");
-		return;
-	}
-
-	/* Register our agent */
-	g_dbus_proxy_call (G_DBUS_PROXY (agent_manager),
-	                   "RegisterAgent",
-	                   g_variant_new ("(o)", priv->agent_path),
-	                   G_DBUS_CALL_FLAGS_NONE, -1,
-	                   NULL, NULL, NULL);
-
-	g_object_unref (agent_manager);
+    NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self);
+    GDBusInterface *     agent_manager;
+
+    agent_manager = g_dbus_object_manager_get_interface(priv->object_manager,
+                                                        "/net/connman/iwd",
+                                                        NM_IWD_AGENT_MANAGER_INTERFACE);
+
+    if (!agent_manager) {
+        /* IWD prior to 1.0 dated 30 October, 2019 has the agent manager on a
+         * different path. */
+        agent_manager = g_dbus_object_manager_get_interface(priv->object_manager,
+                                                            "/",
+                                                            NM_IWD_AGENT_MANAGER_INTERFACE);
+    }
+
+    if (!agent_manager) {
+        _LOGE("unable to register the IWD Agent: PSK/8021x Wi-Fi networks may not work");
+        return;
+    }
+
+    /* Register our agent */
+    g_dbus_proxy_call(G_DBUS_PROXY(agent_manager),
+                      "RegisterAgent",
+                      g_variant_new("(o)", priv->agent_path),
+                      G_DBUS_CALL_FLAGS_NONE,
+                      -1,
+                      NULL,
+                      NULL,
+                      NULL);
+
+    g_object_unref(agent_manager);
 }
 
 /*****************************************************************************/
 
 static KnownNetworkId *
-known_network_id_new (const char *name, NMIwdNetworkSecurity security)
+known_network_id_new(const char *name, NMIwdNetworkSecurity security)
 {
-	KnownNetworkId *id;
-	gsize strsize = strlen (name) + 1;
+    KnownNetworkId *id;
+    gsize           strsize = strlen(name) + 1;
 
-	id = g_malloc (sizeof (KnownNetworkId) + strsize);
-	id->name = id->buf;
-	id->security = security;
-	memcpy (id->buf, name, strsize);
+    id           = g_malloc(sizeof(KnownNetworkId) + strsize);
+    id->name     = id->buf;
+    id->security = security;
+    memcpy(id->buf, name, strsize);
 
-	return id;
+    return id;
 }
 
 static guint
-known_network_id_hash (KnownNetworkId *id)
+known_network_id_hash(KnownNetworkId *id)
 {
-	NMHashState h;
+    NMHashState h;
 
-	nm_hash_init (&h, 1947951703u);
-	nm_hash_update_val (&h, id->security);
-	nm_hash_update_str (&h, id->name);
-	return nm_hash_complete (&h);
+    nm_hash_init(&h, 1947951703u);
+    nm_hash_update_val(&h, id->security);
+    nm_hash_update_str(&h, id->name);
+    return nm_hash_complete(&h);
 }
 
 static gboolean
-known_network_id_equal (KnownNetworkId *a, KnownNetworkId *b)
+known_network_id_equal(KnownNetworkId *a, KnownNetworkId *b)
 {
-	return    a->security == b->security
-	       && nm_streq (a->name, b->name);
+    return a->security == b->security && nm_streq(a->name, b->name);
 }
 
 static void
-known_network_data_free (KnownNetworkData *network)
+known_network_data_free(KnownNetworkData *network)
 {
-	if (!network)
-		return;
+    if (!network)
+        return;
 
-	g_object_unref (network->known_network);
-	mirror_8021x_connection_take_and_delete (network->mirror_connection);
-	g_slice_free (KnownNetworkData, network);
+    g_object_unref(network->known_network);
+    mirror_8021x_connection_take_and_delete(network->mirror_connection);
+    g_slice_free(KnownNetworkData, network);
 }
 
 /*****************************************************************************/
 
 static void
-set_device_dbus_object (NMIwdManager *self, GDBusProxy *proxy,
-                        GDBusObject *object)
+set_device_dbus_object(NMIwdManager *self, GDBusProxy *proxy, GDBusObject *object)
 {
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-	const char *ifname;
-	int ifindex;
-	NMDevice *device;
-	int errsv;
-
-	ifname = get_property_string_or_null (proxy, "Name");
-	if (!ifname) {
-		_LOGE ("Name not cached for Device at %s",
-		       g_dbus_proxy_get_object_path (proxy));
-		return;
-	}
-
-	ifindex = if_nametoindex (ifname);
-
-	if (!ifindex) {
-		errsv = errno;
-		_LOGE ("if_nametoindex failed for Name %s for Device at %s: %i",
-		       ifname, g_dbus_proxy_get_object_path (proxy), errsv);
-		return;
-	}
-
-	device = nm_manager_get_device_by_ifindex (priv->manager, ifindex);
-	if (!NM_IS_DEVICE_IWD (device)) {
-		_LOGE ("IWD device named %s is not a Wifi device", ifname);
-		return;
-	}
-
-	nm_device_iwd_set_dbus_object (NM_DEVICE_IWD (device), object);
+    NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self);
+    const char *         ifname;
+    int                  ifindex;
+    NMDevice *           device;
+    int                  errsv;
+
+    ifname = get_property_string_or_null(proxy, "Name");
+    if (!ifname) {
+        _LOGE("Name not cached for Device at %s", g_dbus_proxy_get_object_path(proxy));
+        return;
+    }
+
+    ifindex = if_nametoindex(ifname);
+
+    if (!ifindex) {
+        errsv = errno;
+        _LOGE("if_nametoindex failed for Name %s for Device at %s: %i",
+              ifname,
+              g_dbus_proxy_get_object_path(proxy),
+              errsv);
+        return;
+    }
+
+    device = nm_manager_get_device_by_ifindex(priv->manager, ifindex);
+    if (!NM_IS_DEVICE_IWD(device)) {
+        _LOGE("IWD device named %s is not a Wifi device", ifname);
+        return;
+    }
+
+    nm_device_iwd_set_dbus_object(NM_DEVICE_IWD(device), object);
 }
 
 /* Look up an existing NMSettingsConnection for a WPA2-Enterprise network
@@ -377,578 +376,596 @@ set_device_dbus_object (NMIwdManager *self, GDBusProxy *proxy,
  * the user.
  */
 static NMSettingsConnection *
-mirror_8021x_connection (NMIwdManager *self,
-                         const char *name,
-                         gboolean create_new)
+mirror_8021x_connection(NMIwdManager *self, const char *name, gboolean create_new)
 {
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-	NMSettingsConnection *const*iter;
-	gs_unref_object NMConnection *connection = NULL;
-	NMSettingsConnection *settings_connection = NULL;
-	char uuid[37];
-	NMSetting *setting;
-	GError *error = NULL;
-	gs_unref_bytes GBytes *new_ssid = NULL;
-
-	for (iter = nm_settings_get_connections (priv->settings, NULL); *iter; iter++) {
-		NMSettingsConnection *sett_conn = *iter;
-		NMConnection *conn = nm_settings_connection_get_connection (sett_conn);
-		NMIwdNetworkSecurity security;
-		gs_free char *ssid_name = NULL;
-		NMSettingWireless *s_wifi;
-		NMSetting8021x *s_8021x;
-		gboolean external = FALSE;
-		guint i;
-
-		security = nm_wifi_connection_get_iwd_security (conn, NULL);
-		if (security != NM_IWD_NETWORK_SECURITY_8021X)
-			continue;
-
-		s_wifi = nm_connection_get_setting_wireless (conn);
-		if (!s_wifi)
-			continue;
-
-		ssid_name = _nm_utils_ssid_to_utf8 (nm_setting_wireless_get_ssid (s_wifi));
-
-		if (!nm_streq (ssid_name, name))
-			continue;
-
-		s_8021x = nm_connection_get_setting_802_1x (conn);
-		for (i = 0; i < nm_setting_802_1x_get_num_eap_methods (s_8021x); i++) {
-			if (nm_streq (nm_setting_802_1x_get_eap_method (s_8021x, i), "external")) {
-				external = TRUE;
-				break;
-			}
-		}
-
-		/* Prefer returning connections for EAP method "external" */
-		if (!settings_connection || external)
-			settings_connection = sett_conn;
-	}
-
-	/* If we already have an NMSettingsConnection matching this
-	 * KnownNetwork, whether it's saved or an in-memory connection
-	 * potentially created by ourselves then we have nothing left to
-	 * do here.
-	 */
-	if (settings_connection || !create_new)
-		return settings_connection;
-
-	connection = nm_simple_connection_new ();
-
-	setting = NM_SETTING (g_object_new (NM_TYPE_SETTING_CONNECTION,
-	                                    NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
-	                                    NM_SETTING_CONNECTION_ID, name,
-	                                    NM_SETTING_CONNECTION_UUID, nm_utils_uuid_generate_buf (uuid),
-	                                    NULL));
-	nm_connection_add_setting (connection, setting);
-
-	new_ssid = g_bytes_new (name, strlen (name));
-	setting = NM_SETTING (g_object_new (NM_TYPE_SETTING_WIRELESS,
-	                                    NM_SETTING_WIRELESS_SSID, new_ssid,
-	                                    NM_SETTING_WIRELESS_MODE, NM_SETTING_WIRELESS_MODE_INFRA,
-	                                    NULL));
-	nm_connection_add_setting (connection, setting);
-
-	setting = NM_SETTING (g_object_new (NM_TYPE_SETTING_WIRELESS_SECURITY,
-	                                    NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open",
-	                                    NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap",
-	                                    NULL));
-	nm_connection_add_setting (connection, setting);
-
-	/* "password" and "private-key-password" may be requested by the IWD agent
-	 * from NM and IWD will implement a specific secret cache policy so by
-	 * default respect that policy and don't save copies of those secrets in
-	 * NM settings.  The saved values can not be used anyway because of our
-	 * use of NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW.
-	 */
-	setting = NM_SETTING (g_object_new (NM_TYPE_SETTING_802_1X,
-	                                    NM_SETTING_802_1X_PASSWORD_FLAGS, NM_SETTING_SECRET_FLAG_NOT_SAVED,
-	                                    NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, NM_SETTING_SECRET_FLAG_NOT_SAVED,
-	                                    NULL));
-	nm_setting_802_1x_add_eap_method (NM_SETTING_802_1X (setting), "external");
-	nm_connection_add_setting (connection, setting);
-
-	if (!nm_connection_normalize (connection, NULL, NULL, NULL))
-		return NULL;
-
-	if (!nm_settings_add_connection (priv->settings,
-	                                 connection,
-	                                 NM_SETTINGS_CONNECTION_PERSIST_MODE_IN_MEMORY_ONLY,
-	                                 NM_SETTINGS_CONNECTION_ADD_REASON_NONE,
-	                                 NM_SETTINGS_CONNECTION_INT_FLAGS_NM_GENERATED,
-	                                 &settings_connection,
-	                                 &error)) {
-		_LOGW ("failed to add a mirror NMConnection for IWD's Known Network '%s': %s",
-		       name, error->message);
-		g_error_free (error);
-		return NULL;
-	}
-
-	return settings_connection;
+    NMIwdManagerPrivate *        priv = NM_IWD_MANAGER_GET_PRIVATE(self);
+    NMSettingsConnection *const *iter;
+    gs_unref_object NMConnection *connection          = NULL;
+    NMSettingsConnection *        settings_connection = NULL;
+    char                          uuid[37];
+    NMSetting *                   setting;
+    GError *                      error = NULL;
+    gs_unref_bytes GBytes *new_ssid     = NULL;
+
+    for (iter = nm_settings_get_connections(priv->settings, NULL); *iter; iter++) {
+        NMSettingsConnection *sett_conn = *iter;
+        NMConnection *        conn      = nm_settings_connection_get_connection(sett_conn);
+        NMIwdNetworkSecurity  security;
+        gs_free char *        ssid_name = NULL;
+        NMSettingWireless *   s_wifi;
+        NMSetting8021x *      s_8021x;
+        gboolean              external = FALSE;
+        guint                 i;
+
+        security = nm_wifi_connection_get_iwd_security(conn, NULL);
+        if (security != NM_IWD_NETWORK_SECURITY_8021X)
+            continue;
+
+        s_wifi = nm_connection_get_setting_wireless(conn);
+        if (!s_wifi)
+            continue;
+
+        ssid_name = _nm_utils_ssid_to_utf8(nm_setting_wireless_get_ssid(s_wifi));
+
+        if (!nm_streq(ssid_name, name))
+            continue;
+
+        s_8021x = nm_connection_get_setting_802_1x(conn);
+        for (i = 0; i < nm_setting_802_1x_get_num_eap_methods(s_8021x); i++) {
+            if (nm_streq(nm_setting_802_1x_get_eap_method(s_8021x, i), "external")) {
+                external = TRUE;
+                break;
+            }
+        }
+
+        /* Prefer returning connections for EAP method "external" */
+        if (!settings_connection || external)
+            settings_connection = sett_conn;
+    }
+
+    /* If we already have an NMSettingsConnection matching this
+     * KnownNetwork, whether it's saved or an in-memory connection
+     * potentially created by ourselves then we have nothing left to
+     * do here.
+     */
+    if (settings_connection || !create_new)
+        return settings_connection;
+
+    connection = nm_simple_connection_new();
+
+    setting = NM_SETTING(g_object_new(NM_TYPE_SETTING_CONNECTION,
+                                      NM_SETTING_CONNECTION_TYPE,
+                                      NM_SETTING_WIRELESS_SETTING_NAME,
+                                      NM_SETTING_CONNECTION_ID,
+                                      name,
+                                      NM_SETTING_CONNECTION_UUID,
+                                      nm_utils_uuid_generate_buf(uuid),
+                                      NULL));
+    nm_connection_add_setting(connection, setting);
+
+    new_ssid = g_bytes_new(name, strlen(name));
+    setting  = NM_SETTING(g_object_new(NM_TYPE_SETTING_WIRELESS,
+                                      NM_SETTING_WIRELESS_SSID,
+                                      new_ssid,
+                                      NM_SETTING_WIRELESS_MODE,
+                                      NM_SETTING_WIRELESS_MODE_INFRA,
+                                      NULL));
+    nm_connection_add_setting(connection, setting);
+
+    setting = NM_SETTING(g_object_new(NM_TYPE_SETTING_WIRELESS_SECURITY,
+                                      NM_SETTING_WIRELESS_SECURITY_AUTH_ALG,
+                                      "open",
+                                      NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
+                                      "wpa-eap",
+                                      NULL));
+    nm_connection_add_setting(connection, setting);
+
+    /* "password" and "private-key-password" may be requested by the IWD agent
+     * from NM and IWD will implement a specific secret cache policy so by
+     * default respect that policy and don't save copies of those secrets in
+     * NM settings.  The saved values can not be used anyway because of our
+     * use of NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW.
+     */
+    setting = NM_SETTING(g_object_new(NM_TYPE_SETTING_802_1X,
+                                      NM_SETTING_802_1X_PASSWORD_FLAGS,
+                                      NM_SETTING_SECRET_FLAG_NOT_SAVED,
+                                      NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS,
+                                      NM_SETTING_SECRET_FLAG_NOT_SAVED,
+                                      NULL));
+    nm_setting_802_1x_add_eap_method(NM_SETTING_802_1X(setting), "external");
+    nm_connection_add_setting(connection, setting);
+
+    if (!nm_connection_normalize(connection, NULL, NULL, NULL))
+        return NULL;
+
+    if (!nm_settings_add_connection(priv->settings,
+                                    connection,
+                                    NM_SETTINGS_CONNECTION_PERSIST_MODE_IN_MEMORY_ONLY,
+                                    NM_SETTINGS_CONNECTION_ADD_REASON_NONE,
+                                    NM_SETTINGS_CONNECTION_INT_FLAGS_NM_GENERATED,
+                                    &settings_connection,
+                                    &error)) {
+        _LOGW("failed to add a mirror NMConnection for IWD's Known Network '%s': %s",
+              name,
+              error->message);
+        g_error_free(error);
+        return NULL;
+    }
+
+    return settings_connection;
 }
 
 static void
-mirror_8021x_connection_take_and_delete (NMSettingsConnection *sett_conn)
+mirror_8021x_connection_take_and_delete(NMSettingsConnection *sett_conn)
 {
-	NMSettingsConnectionIntFlags flags;
+    NMSettingsConnectionIntFlags flags;
 
-	if (!sett_conn)
-		return;
+    if (!sett_conn)
+        return;
 
-	flags = nm_settings_connection_get_flags (sett_conn);
+    flags = nm_settings_connection_get_flags(sett_conn);
 
-	/* If connection has not been saved since we created it
-	 * in interface_added it too can be removed now. */
-	if (NM_FLAGS_HAS (flags, NM_SETTINGS_CONNECTION_INT_FLAGS_NM_GENERATED))
-		nm_settings_connection_delete (sett_conn, FALSE);
+    /* If connection has not been saved since we created it
+     * in interface_added it too can be removed now. */
+    if (NM_FLAGS_HAS(flags, NM_SETTINGS_CONNECTION_INT_FLAGS_NM_GENERATED))
+        nm_settings_connection_delete(sett_conn, FALSE);
 
-	g_object_unref (sett_conn);
+    g_object_unref(sett_conn);
 }
 
 static void
-interface_added (GDBusObjectManager *object_manager, GDBusObject *object,
-                 GDBusInterface *interface, gpointer user_data)
+interface_added(GDBusObjectManager *object_manager,
+                GDBusObject *       object,
+                GDBusInterface *    interface,
+                gpointer            user_data)
 {
-	NMIwdManager *self = user_data;
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-	GDBusProxy *proxy;
-	const char *iface_name;
-
-	if (!priv->running)
-		return;
-
-	g_return_if_fail (G_IS_DBUS_PROXY (interface));
-
-	proxy = G_DBUS_PROXY (interface);
-	iface_name = g_dbus_proxy_get_interface_name (proxy);
-
-	if (nm_streq (iface_name, NM_IWD_DEVICE_INTERFACE)) {
-		set_device_dbus_object (self, proxy, object);
-		return;
-	}
-
-	if (nm_streq (iface_name, NM_IWD_KNOWN_NETWORK_INTERFACE)) {
-		KnownNetworkId *id;
-		KnownNetworkData *data;
-		NMIwdNetworkSecurity security;
-		const char *type_str, *name;
-		NMSettingsConnection *sett_conn = NULL;
-
-		type_str = get_property_string_or_null (proxy, "Type");
-		name = get_property_string_or_null (proxy, "Name");
-		if (!type_str || !name)
-			return;
-
-		if (nm_streq (type_str, "open"))
-			security = NM_IWD_NETWORK_SECURITY_NONE;
-		else if (nm_streq (type_str, "psk"))
-			security = NM_IWD_NETWORK_SECURITY_PSK;
-		else if (nm_streq (type_str, "8021x"))
-			security = NM_IWD_NETWORK_SECURITY_8021X;
-		else
-			return;
-
-		id = known_network_id_new (name, security);
-
-		data = g_hash_table_lookup (priv->known_networks, id);
-		if (data) {
-			_LOGW ("DBus error: KnownNetwork already exists ('%s', %s)",
-			       name, type_str);
-			g_free (id);
-			nm_g_object_ref_set (&data->known_network, proxy);
-		} else {
-			data = g_slice_new0 (KnownNetworkData);
-			data->known_network = g_object_ref (proxy);
-			g_hash_table_insert (priv->known_networks, id, data);
-		}
-
-		if (security == NM_IWD_NETWORK_SECURITY_8021X) {
-			sett_conn = mirror_8021x_connection (self, name, TRUE);
-
-			if (   sett_conn
-			    && sett_conn != data->mirror_connection) {
-				NMSettingsConnection *sett_conn_old = data->mirror_connection;
-
-				data->mirror_connection = nm_g_object_ref (sett_conn);
-				mirror_8021x_connection_take_and_delete (sett_conn_old);
-			}
-		} else
-			mirror_8021x_connection_take_and_delete (g_steal_pointer (&data->mirror_connection));
-
-		return;
-	}
+    NMIwdManager *       self = user_data;
+    NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self);
+    GDBusProxy *         proxy;
+    const char *         iface_name;
+
+    if (!priv->running)
+        return;
+
+    g_return_if_fail(G_IS_DBUS_PROXY(interface));
+
+    proxy      = G_DBUS_PROXY(interface);
+    iface_name = g_dbus_proxy_get_interface_name(proxy);
+
+    if (nm_streq(iface_name, NM_IWD_DEVICE_INTERFACE)) {
+        set_device_dbus_object(self, proxy, object);
+        return;
+    }
+
+    if (nm_streq(iface_name, NM_IWD_KNOWN_NETWORK_INTERFACE)) {
+        KnownNetworkId *      id;
+        KnownNetworkData *    data;
+        NMIwdNetworkSecurity  security;
+        const char *          type_str, *name;
+        NMSettingsConnection *sett_conn = NULL;
+
+        type_str = get_property_string_or_null(proxy, "Type");
+        name     = get_property_string_or_null(proxy, "Name");
+        if (!type_str || !name)
+            return;
+
+        if (nm_streq(type_str, "open"))
+            security = NM_IWD_NETWORK_SECURITY_NONE;
+        else if (nm_streq(type_str, "psk"))
+            security = NM_IWD_NETWORK_SECURITY_PSK;
+        else if (nm_streq(type_str, "8021x"))
+            security = NM_IWD_NETWORK_SECURITY_8021X;
+        else
+            return;
+
+        id = known_network_id_new(name, security);
+
+        data = g_hash_table_lookup(priv->known_networks, id);
+        if (data) {
+            _LOGW("DBus error: KnownNetwork already exists ('%s', %s)", name, type_str);
+            g_free(id);
+            nm_g_object_ref_set(&data->known_network, proxy);
+        } else {
+            data                = g_slice_new0(KnownNetworkData);
+            data->known_network = g_object_ref(proxy);
+            g_hash_table_insert(priv->known_networks, id, data);
+        }
+
+        if (security == NM_IWD_NETWORK_SECURITY_8021X) {
+            sett_conn = mirror_8021x_connection(self, name, TRUE);
+
+            if (sett_conn && sett_conn != data->mirror_connection) {
+                NMSettingsConnection *sett_conn_old = data->mirror_connection;
+
+                data->mirror_connection = nm_g_object_ref(sett_conn);
+                mirror_8021x_connection_take_and_delete(sett_conn_old);
+            }
+        } else
+            mirror_8021x_connection_take_and_delete(g_steal_pointer(&data->mirror_connection));
+
+        return;
+    }
 }
 
 static void
-interface_removed (GDBusObjectManager *object_manager, GDBusObject *object,
-                   GDBusInterface *interface, gpointer user_data)
+interface_removed(GDBusObjectManager *object_manager,
+                  GDBusObject *       object,
+                  GDBusInterface *    interface,
+                  gpointer            user_data)
 {
-	NMIwdManager *self = user_data;
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-	GDBusProxy *proxy;
-	const char *iface_name;
-
-	g_return_if_fail (G_IS_DBUS_PROXY (interface));
-
-	proxy = G_DBUS_PROXY (interface);
-	iface_name = g_dbus_proxy_get_interface_name (proxy);
-
-	if (nm_streq (iface_name, NM_IWD_DEVICE_INTERFACE)) {
-		set_device_dbus_object (self, proxy, NULL);
-		return;
-	}
-
-	if (nm_streq (iface_name, NM_IWD_KNOWN_NETWORK_INTERFACE)) {
-		KnownNetworkId id;
-		const char *type_str;
-
-		type_str = get_property_string_or_null (proxy, "Type");
-		id.name = get_property_string_or_null (proxy, "Name");
-		if (!type_str || !id.name)
-			return;
-
-		if (nm_streq (type_str, "open"))
-			id.security = NM_IWD_NETWORK_SECURITY_NONE;
-		else if (nm_streq (type_str, "psk"))
-			id.security = NM_IWD_NETWORK_SECURITY_PSK;
-		else if (nm_streq (type_str, "8021x"))
-			id.security = NM_IWD_NETWORK_SECURITY_8021X;
-		else
-			return;
-
-		g_hash_table_remove (priv->known_networks, &id);
-		return;
-	}
+    NMIwdManager *       self = user_data;
+    NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self);
+    GDBusProxy *         proxy;
+    const char *         iface_name;
+
+    g_return_if_fail(G_IS_DBUS_PROXY(interface));
+
+    proxy      = G_DBUS_PROXY(interface);
+    iface_name = g_dbus_proxy_get_interface_name(proxy);
+
+    if (nm_streq(iface_name, NM_IWD_DEVICE_INTERFACE)) {
+        set_device_dbus_object(self, proxy, NULL);
+        return;
+    }
+
+    if (nm_streq(iface_name, NM_IWD_KNOWN_NETWORK_INTERFACE)) {
+        KnownNetworkId id;
+        const char *   type_str;
+
+        type_str = get_property_string_or_null(proxy, "Type");
+        id.name  = get_property_string_or_null(proxy, "Name");
+        if (!type_str || !id.name)
+            return;
+
+        if (nm_streq(type_str, "open"))
+            id.security = NM_IWD_NETWORK_SECURITY_NONE;
+        else if (nm_streq(type_str, "psk"))
+            id.security = NM_IWD_NETWORK_SECURITY_PSK;
+        else if (nm_streq(type_str, "8021x"))
+            id.security = NM_IWD_NETWORK_SECURITY_8021X;
+        else
+            return;
+
+        g_hash_table_remove(priv->known_networks, &id);
+        return;
+    }
 }
 
 static void
-connection_removed (NMSettings *settings,
-                    NMSettingsConnection *sett_conn,
-                    gpointer user_data)
+connection_removed(NMSettings *settings, NMSettingsConnection *sett_conn, gpointer user_data)
 {
-	NMIwdManager *self = user_data;
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-	NMConnection *conn = nm_settings_connection_get_connection (sett_conn);
-	NMSettingWireless *s_wireless;
-	gboolean mapped;
-	KnownNetworkData *data;
-	KnownNetworkId id;
-
-	id.security = nm_wifi_connection_get_iwd_security (conn, &mapped);
-	if (!mapped)
-		return;
-
-	s_wireless = nm_connection_get_setting_wireless (conn);
-	id.name = _nm_utils_ssid_to_utf8 (nm_setting_wireless_get_ssid (s_wireless));
-	data = g_hash_table_lookup (priv->known_networks, &id);
-	g_free ((char *) id.name);
-	if (!data)
-		return;
-
-	if (id.security == NM_IWD_NETWORK_SECURITY_8021X) {
-		NMSettingsConnection *new_mirror_conn;
-
-		if (data->mirror_connection != sett_conn)
-			return;
-
-		g_clear_object (&data->mirror_connection);
-
-		/* Don't call Forget for an 8021x network until there's no
-		 * longer *any* matching NMSettingsConnection (debatable)
-		 */
-		new_mirror_conn = mirror_8021x_connection (self, id.name, FALSE);
-		if (new_mirror_conn) {
-			data->mirror_connection = g_object_ref (new_mirror_conn);
-			return;
-		}
-	}
-
-	if (!priv->running)
-		return;
-
-	g_dbus_proxy_call (data->known_network, "Forget",
-	                   NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
+    NMIwdManager *       self = user_data;
+    NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self);
+    NMConnection *       conn = nm_settings_connection_get_connection(sett_conn);
+    NMSettingWireless *  s_wireless;
+    gboolean             mapped;
+    KnownNetworkData *   data;
+    KnownNetworkId       id;
+
+    id.security = nm_wifi_connection_get_iwd_security(conn, &mapped);
+    if (!mapped)
+        return;
+
+    s_wireless = nm_connection_get_setting_wireless(conn);
+    id.name    = _nm_utils_ssid_to_utf8(nm_setting_wireless_get_ssid(s_wireless));
+    data       = g_hash_table_lookup(priv->known_networks, &id);
+    g_free((char *) id.name);
+    if (!data)
+        return;
+
+    if (id.security == NM_IWD_NETWORK_SECURITY_8021X) {
+        NMSettingsConnection *new_mirror_conn;
+
+        if (data->mirror_connection != sett_conn)
+            return;
+
+        g_clear_object(&data->mirror_connection);
+
+        /* Don't call Forget for an 8021x network until there's no
+         * longer *any* matching NMSettingsConnection (debatable)
+         */
+        new_mirror_conn = mirror_8021x_connection(self, id.name, FALSE);
+        if (new_mirror_conn) {
+            data->mirror_connection = g_object_ref(new_mirror_conn);
+            return;
+        }
+    }
+
+    if (!priv->running)
+        return;
+
+    g_dbus_proxy_call(data->known_network,
+                      "Forget",
+                      NULL,
+                      G_DBUS_CALL_FLAGS_NONE,
+                      -1,
+                      NULL,
+                      NULL,
+                      NULL);
 }
 
 static gboolean
-_om_has_name_owner (GDBusObjectManager *object_manager)
+_om_has_name_owner(GDBusObjectManager *object_manager)
 {
-	gs_free char *name_owner = NULL;
+    gs_free char *name_owner = NULL;
 
-	nm_assert (G_IS_DBUS_OBJECT_MANAGER_CLIENT (object_manager));
+    nm_assert(G_IS_DBUS_OBJECT_MANAGER_CLIENT(object_manager));
 
-	name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (object_manager));
-	return !!name_owner;
+    name_owner =
+        g_dbus_object_manager_client_get_name_owner(G_DBUS_OBJECT_MANAGER_CLIENT(object_manager));
+    return !!name_owner;
 }
 
 static void
-object_added (NMIwdManager *self, GDBusObject *object)
+object_added(NMIwdManager *self, GDBusObject *object)
 {
-	GList *interfaces, *iter;
+    GList *interfaces, *iter;
 
-	interfaces = g_dbus_object_get_interfaces (object);
+    interfaces = g_dbus_object_get_interfaces(object);
 
-	for (iter = interfaces; iter; iter = iter->next) {
-		GDBusInterface *interface = G_DBUS_INTERFACE (iter->data);
+    for (iter = interfaces; iter; iter = iter->next) {
+        GDBusInterface *interface = G_DBUS_INTERFACE(iter->data);
 
-		interface_added (NULL, object, interface, self);
-	}
+        interface_added(NULL, object, interface, self);
+    }
 
-	g_list_free_full (interfaces, g_object_unref);
+    g_list_free_full(interfaces, g_object_unref);
 }
 
 static void
-release_object_manager (NMIwdManager *self)
+release_object_manager(NMIwdManager *self)
 {
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
+    NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self);
 
-	if (!priv->object_manager)
-		return;
+    if (!priv->object_manager)
+        return;
 
-	g_signal_handlers_disconnect_by_data (priv->object_manager, self);
+    g_signal_handlers_disconnect_by_data(priv->object_manager, self);
 
-	if (priv->agent_id) {
-		GDBusConnection *agent_connection;
-		GDBusObjectManagerClient *omc = G_DBUS_OBJECT_MANAGER_CLIENT (priv->object_manager);
+    if (priv->agent_id) {
+        GDBusConnection *         agent_connection;
+        GDBusObjectManagerClient *omc = G_DBUS_OBJECT_MANAGER_CLIENT(priv->object_manager);
 
-		agent_connection = g_dbus_object_manager_client_get_connection (omc);
+        agent_connection = g_dbus_object_manager_client_get_connection(omc);
 
-		/* We're is called when we're shutting down (i.e. our DBus connection
-		 * is being closed, and IWD will detect this) or IWD was stopped so
-		 * in either case calling UnregisterAgent will not do anything.
-		 */
-		g_dbus_connection_unregister_object (agent_connection, priv->agent_id);
-		priv->agent_id = 0;
-		nm_clear_g_free (&priv->agent_path);
-	}
+        /* We're is called when we're shutting down (i.e. our DBus connection
+         * is being closed, and IWD will detect this) or IWD was stopped so
+         * in either case calling UnregisterAgent will not do anything.
+         */
+        g_dbus_connection_unregister_object(agent_connection, priv->agent_id);
+        priv->agent_id = 0;
+        nm_clear_g_free(&priv->agent_path);
+    }
 
-	g_clear_object (&priv->object_manager);
+    g_clear_object(&priv->object_manager);
 }
 
-static void prepare_object_manager (NMIwdManager *self);
+static void prepare_object_manager(NMIwdManager *self);
 
 static void
-name_owner_changed (GObject *object, GParamSpec *pspec, gpointer user_data)
+name_owner_changed(GObject *object, GParamSpec *pspec, gpointer user_data)
 {
-	NMIwdManager *self = user_data;
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-	GDBusObjectManager *object_manager = G_DBUS_OBJECT_MANAGER (object);
-
-	nm_assert (object_manager == priv->object_manager);
-
-	if (_om_has_name_owner (object_manager)) {
-		release_object_manager (self);
-		prepare_object_manager (self);
-	} else {
-		const CList *tmp_lst;
-		NMDevice *device;
-
-		if (!priv->running)
-			return;
-
-		priv->running = false;
-
-		nm_manager_for_each_device (priv->manager, device, tmp_lst) {
-			if (NM_IS_DEVICE_IWD (device)) {
-				nm_device_iwd_set_dbus_object (NM_DEVICE_IWD (device),
-				                               NULL);
-			}
-		}
-	}
+    NMIwdManager *       self           = user_data;
+    NMIwdManagerPrivate *priv           = NM_IWD_MANAGER_GET_PRIVATE(self);
+    GDBusObjectManager * object_manager = G_DBUS_OBJECT_MANAGER(object);
+
+    nm_assert(object_manager == priv->object_manager);
+
+    if (_om_has_name_owner(object_manager)) {
+        release_object_manager(self);
+        prepare_object_manager(self);
+    } else {
+        const CList *tmp_lst;
+        NMDevice *   device;
+
+        if (!priv->running)
+            return;
+
+        priv->running = false;
+
+        nm_manager_for_each_device (priv->manager, device, tmp_lst) {
+            if (NM_IS_DEVICE_IWD(device)) {
+                nm_device_iwd_set_dbus_object(NM_DEVICE_IWD(device), NULL);
+            }
+        }
+    }
 }
 
 static void
-device_added (NMManager *manager, NMDevice *device, gpointer user_data)
+device_added(NMManager *manager, NMDevice *device, gpointer user_data)
 {
-	NMIwdManager *self = user_data;
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-	GList *objects, *iter;
+    NMIwdManager *       self = user_data;
+    NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self);
+    GList *              objects, *iter;
 
-	if (!NM_IS_DEVICE_IWD (device))
-		return;
+    if (!NM_IS_DEVICE_IWD(device))
+        return;
 
-	if (!priv->running)
-		return;
+    if (!priv->running)
+        return;
 
-	objects = g_dbus_object_manager_get_objects (priv->object_manager);
-	for (iter = objects; iter; iter = iter->next) {
-		GDBusObject *object = G_DBUS_OBJECT (iter->data);
-		gs_unref_object GDBusInterface *interface = NULL;
-		const char *obj_ifname;
+    objects = g_dbus_object_manager_get_objects(priv->object_manager);
+    for (iter = objects; iter; iter = iter->next) {
+        GDBusObject *   object                    = G_DBUS_OBJECT(iter->data);
+        gs_unref_object GDBusInterface *interface = NULL;
+        const char *                    obj_ifname;
 
-		interface = g_dbus_object_get_interface (object,
-		                                         NM_IWD_DEVICE_INTERFACE);
-		obj_ifname = get_property_string_or_null ((GDBusProxy *) interface, "Name");
+        interface  = g_dbus_object_get_interface(object, NM_IWD_DEVICE_INTERFACE);
+        obj_ifname = get_property_string_or_null((GDBusProxy *) interface, "Name");
 
-		if (!obj_ifname || strcmp (nm_device_get_iface (device), obj_ifname))
-			continue;
+        if (!obj_ifname || strcmp(nm_device_get_iface(device), obj_ifname))
+            continue;
 
-		nm_device_iwd_set_dbus_object (NM_DEVICE_IWD (device), object);
-		break;
-	}
+        nm_device_iwd_set_dbus_object(NM_DEVICE_IWD(device), object);
+        break;
+    }
 
-	g_list_free_full (objects, g_object_unref);
+    g_list_free_full(objects, g_object_unref);
 }
 
 static void
-got_object_manager (GObject *object, GAsyncResult *result, gpointer user_data)
+got_object_manager(GObject *object, GAsyncResult *result, gpointer user_data)
 {
-	NMIwdManager *self = user_data;
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-	GError *error = NULL;
-	GDBusObjectManager *object_manager;
-	GDBusConnection *connection;
-
-	object_manager = g_dbus_object_manager_client_new_for_bus_finish (result, &error);
-	if (object_manager == NULL) {
-		_LOGE ("failed to acquire IWD Object Manager: Wi-Fi will not be available (%s)",
-		       error->message);
-		g_clear_error (&error);
-		return;
-	}
-
-	priv->object_manager = object_manager;
-
-	g_signal_connect (priv->object_manager, "notify::name-owner",
-	                  G_CALLBACK (name_owner_changed), self);
-
-	nm_assert (G_IS_DBUS_OBJECT_MANAGER_CLIENT (object_manager));
-
-	connection = g_dbus_object_manager_client_get_connection (G_DBUS_OBJECT_MANAGER_CLIENT (object_manager));
-
-	priv->agent_id = iwd_agent_export (connection,
-	                                   self,
-	                                   &priv->agent_path,
-	                                   &error);
-	if (!priv->agent_id) {
-		_LOGE ("failed to export the IWD Agent: PSK/8021x Wi-Fi networks may not work: %s",
-		       error->message);
-		g_clear_error (&error);
-	}
-
-	if (_om_has_name_owner (object_manager)) {
-		GList *objects, *iter;
-
-		priv->running = true;
-
-		g_signal_connect (priv->object_manager, "interface-added",
-		                  G_CALLBACK (interface_added), self);
-		g_signal_connect (priv->object_manager, "interface-removed",
-		                  G_CALLBACK (interface_removed), self);
-
-		g_hash_table_remove_all (priv->known_networks);
-
-		objects = g_dbus_object_manager_get_objects (object_manager);
-		for (iter = objects; iter; iter = iter->next)
-			object_added (self, G_DBUS_OBJECT (iter->data));
-
-		g_list_free_full (objects, g_object_unref);
-
-		if (priv->agent_id)
-			register_agent (self);
-	}
+    NMIwdManager *       self  = user_data;
+    NMIwdManagerPrivate *priv  = NM_IWD_MANAGER_GET_PRIVATE(self);
+    GError *             error = NULL;
+    GDBusObjectManager * object_manager;
+    GDBusConnection *    connection;
+
+    object_manager = g_dbus_object_manager_client_new_for_bus_finish(result, &error);
+    if (object_manager == NULL) {
+        _LOGE("failed to acquire IWD Object Manager: Wi-Fi will not be available (%s)",
+              error->message);
+        g_clear_error(&error);
+        return;
+    }
+
+    priv->object_manager = object_manager;
+
+    g_signal_connect(priv->object_manager,
+                     "notify::name-owner",
+                     G_CALLBACK(name_owner_changed),
+                     self);
+
+    nm_assert(G_IS_DBUS_OBJECT_MANAGER_CLIENT(object_manager));
+
+    connection =
+        g_dbus_object_manager_client_get_connection(G_DBUS_OBJECT_MANAGER_CLIENT(object_manager));
+
+    priv->agent_id = iwd_agent_export(connection, self, &priv->agent_path, &error);
+    if (!priv->agent_id) {
+        _LOGE("failed to export the IWD Agent: PSK/8021x Wi-Fi networks may not work: %s",
+              error->message);
+        g_clear_error(&error);
+    }
+
+    if (_om_has_name_owner(object_manager)) {
+        GList *objects, *iter;
+
+        priv->running = true;
+
+        g_signal_connect(priv->object_manager,
+                         "interface-added",
+                         G_CALLBACK(interface_added),
+                         self);
+        g_signal_connect(priv->object_manager,
+                         "interface-removed",
+                         G_CALLBACK(interface_removed),
+                         self);
+
+        g_hash_table_remove_all(priv->known_networks);
+
+        objects = g_dbus_object_manager_get_objects(object_manager);
+        for (iter = objects; iter; iter = iter->next)
+            object_added(self, G_DBUS_OBJECT(iter->data));
+
+        g_list_free_full(objects, g_object_unref);
+
+        if (priv->agent_id)
+            register_agent(self);
+    }
 }
 
 static void
-prepare_object_manager (NMIwdManager *self)
+prepare_object_manager(NMIwdManager *self)
 {
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-
-	g_dbus_object_manager_client_new_for_bus (NM_IWD_BUS_TYPE,
-	                                          G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
-	                                          NM_IWD_SERVICE, "/",
-	                                          NULL, NULL, NULL,
-	                                          priv->cancellable,
-	                                          got_object_manager, self);
+    NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self);
+
+    g_dbus_object_manager_client_new_for_bus(NM_IWD_BUS_TYPE,
+                                             G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
+                                             NM_IWD_SERVICE,
+                                             "/",
+                                             NULL,
+                                             NULL,
+                                             NULL,
+                                             priv->cancellable,
+                                             got_object_manager,
+                                             self);
 }
 
 gboolean
-nm_iwd_manager_is_known_network (NMIwdManager *self, const char *name,
-                                 NMIwdNetworkSecurity security)
+nm_iwd_manager_is_known_network(NMIwdManager *self, const char *name, NMIwdNetworkSecurity security)
 {
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-	KnownNetworkId kn_id = { name, security };
+    NMIwdManagerPrivate *priv  = NM_IWD_MANAGER_GET_PRIVATE(self);
+    KnownNetworkId       kn_id = {name, security};
 
-	return g_hash_table_contains (priv->known_networks, &kn_id);
+    return g_hash_table_contains(priv->known_networks, &kn_id);
 }
 
 GDBusProxy *
-nm_iwd_manager_get_dbus_interface (NMIwdManager *self,
-                                   const char *path,
-                                   const char *name)
+nm_iwd_manager_get_dbus_interface(NMIwdManager *self, const char *path, const char *name)
 {
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
-	GDBusInterface *interface;
+    NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self);
+    GDBusInterface *     interface;
 
-	if (!priv->object_manager)
-		return NULL;
+    if (!priv->object_manager)
+        return NULL;
 
-	interface = g_dbus_object_manager_get_interface (priv->object_manager, path, name);
+    interface = g_dbus_object_manager_get_interface(priv->object_manager, path, name);
 
-	return interface ? G_DBUS_PROXY (interface) : NULL;
+    return interface ? G_DBUS_PROXY(interface) : NULL;
 }
 
 /*****************************************************************************/
 
-NM_DEFINE_SINGLETON_GETTER (NMIwdManager, nm_iwd_manager_get,
-                            NM_TYPE_IWD_MANAGER);
+NM_DEFINE_SINGLETON_GETTER(NMIwdManager, nm_iwd_manager_get, NM_TYPE_IWD_MANAGER);
 
 static void
-nm_iwd_manager_init (NMIwdManager *self)
+nm_iwd_manager_init(NMIwdManager *self)
 {
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
+    NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self);
 
-	priv->manager = g_object_ref (NM_MANAGER_GET);
-	g_signal_connect (priv->manager, NM_MANAGER_DEVICE_ADDED,
-	                  G_CALLBACK (device_added), self);
+    priv->manager = g_object_ref(NM_MANAGER_GET);
+    g_signal_connect(priv->manager, NM_MANAGER_DEVICE_ADDED, G_CALLBACK(device_added), self);
 
-	priv->settings = g_object_ref (NM_SETTINGS_GET);
-	g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,
-	                  G_CALLBACK (connection_removed), self);
+    priv->settings = g_object_ref(NM_SETTINGS_GET);
+    g_signal_connect(priv->settings,
+                     NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,
+                     G_CALLBACK(connection_removed),
+                     self);
 
-	priv->cancellable = g_cancellable_new ();
+    priv->cancellable = g_cancellable_new();
 
-	priv->known_networks = g_hash_table_new_full ((GHashFunc) known_network_id_hash,
-	                                              (GEqualFunc) known_network_id_equal,
-	                                              g_free,
-	                                              (GDestroyNotify) known_network_data_free);
+    priv->known_networks = g_hash_table_new_full((GHashFunc) known_network_id_hash,
+                                                 (GEqualFunc) known_network_id_equal,
+                                                 g_free,
+                                                 (GDestroyNotify) known_network_data_free);
 
-	prepare_object_manager (self);
+    prepare_object_manager(self);
 }
 
 static void
-dispose (GObject *object)
+dispose(GObject *object)
 {
-	NMIwdManager *self = (NMIwdManager *) object;
-	NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
+    NMIwdManager *       self = (NMIwdManager *) object;
+    NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self);
 
-	release_object_manager (self);
+    release_object_manager(self);
 
-	nm_clear_g_cancellable (&priv->cancellable);
+    nm_clear_g_cancellable(&priv->cancellable);
 
-	if (priv->settings) {
-		g_signal_handlers_disconnect_by_data (priv->settings, self);
-		g_clear_object (&priv->settings);
-	}
+    if (priv->settings) {
+        g_signal_handlers_disconnect_by_data(priv->settings, self);
+        g_clear_object(&priv->settings);
+    }
 
-	/* This may trigger mirror connection removals so it happens
-	 * after the g_signal_handlers_disconnect_by_data above.
-	 */
-	nm_clear_pointer (&priv->known_networks, g_hash_table_destroy);
+    /* This may trigger mirror connection removals so it happens
+     * after the g_signal_handlers_disconnect_by_data above.
+     */
+    nm_clear_pointer(&priv->known_networks, g_hash_table_destroy);
 
-	if (priv->manager) {
-		g_signal_handlers_disconnect_by_data (priv->manager, self);
-		g_clear_object (&priv->manager);
-	}
+    if (priv->manager) {
+        g_signal_handlers_disconnect_by_data(priv->manager, self);
+        g_clear_object(&priv->manager);
+    }
 
-	G_OBJECT_CLASS (nm_iwd_manager_parent_class)->dispose (object);
+    G_OBJECT_CLASS(nm_iwd_manager_parent_class)->dispose(object);
 }
 
 static void
-nm_iwd_manager_class_init (NMIwdManagerClass *klass)
+nm_iwd_manager_class_init(NMIwdManagerClass *klass)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+    GObjectClass *object_class = G_OBJECT_CLASS(klass);
 
-	object_class->dispose = dispose;
+    object_class->dispose = dispose;
 }