ifupdown: support mappings and don't track devices not referenced in any stanza lp:291564

This commit is contained in:
Alexander Sack
2009-09-04 17:39:53 +02:00
committed by asac
parent 2e912158af
commit 801203c3aa

View File

@@ -75,6 +75,7 @@ typedef struct {
GHashTable *iface_connections; GHashTable *iface_connections;
gchar* hostname; gchar* hostname;
GHashTable *well_known_interfaces;
GHashTable *well_known_ifaces; GHashTable *well_known_ifaces;
gboolean unmanage_well_known; gboolean unmanage_well_known;
@@ -247,7 +248,13 @@ udev_device_added (SCPluginIfupdown *self, GUdevDevice *device)
* we want to either unmanage the device or lock it * we want to either unmanage the device or lock it
*/ */
exported = (NMIfupdownConnection *) g_hash_table_lookup (priv->iface_connections, iface); exported = (NMIfupdownConnection *) g_hash_table_lookup (priv->iface_connections, iface);
if (!exported) if (!exported) {
PLUGIN_PRINT("SCPlugin-Ifupdown",
"device added (path: %s, iface: %s): no exported connection", path, iface);
return;
}
if (!g_hash_table_lookup (priv->well_known_interfaces, iface))
return; return;
g_hash_table_insert (priv->well_known_ifaces, g_strdup (iface), g_object_ref (device)); g_hash_table_insert (priv->well_known_ifaces, g_strdup (iface), g_object_ref (device));
@@ -322,6 +329,9 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
if(!priv->well_known_ifaces) if(!priv->well_known_ifaces)
priv->well_known_ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); priv->well_known_ifaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
if(!priv->well_known_interfaces)
priv->well_known_interfaces = g_hash_table_new (g_str_hash, g_str_equal);
PLUGIN_PRINT("SCPlugin-Ifupdown", "init!"); PLUGIN_PRINT("SCPlugin-Ifupdown", "init!");
priv->client = g_udev_client_new (subsys); priv->client = g_udev_client_new (subsys);
@@ -365,8 +375,11 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
exported = nm_ifupdown_connection_new (block); exported = nm_ifupdown_connection_new (block);
if (exported) { if (exported) {
g_hash_table_insert (priv->iface_connections, block->name, exported); g_hash_table_insert (priv->iface_connections, block->name, exported);
g_hash_table_insert (priv->well_known_interfaces, block->name, "known");
g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, exported); g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, exported);
} }
} else if (!strcmp ("mapping", block->type)) {
g_hash_table_insert (priv->well_known_interfaces, block->name, "known");
} }
block = block->next; block = block->next;
} }
@@ -620,6 +633,9 @@ GObject__dispose (GObject *object)
if (priv->well_known_ifaces) if (priv->well_known_ifaces)
g_hash_table_destroy(priv->well_known_ifaces); g_hash_table_destroy(priv->well_known_ifaces);
if (priv->well_known_interfaces)
g_hash_table_destroy(priv->well_known_interfaces);
if (priv->client) if (priv->client)
g_object_unref (priv->client); g_object_unref (priv->client);