manager: fix up composite modem device detection and suppression

Some modems have their ethernet	interface show up only on connect,
and we want NM to ignore the ethernet interface as a top-level
device.
This commit is contained in:
Dan Williams
2009-10-04 23:59:20 -07:00
parent 66fbf31a19
commit ac739e3311
3 changed files with 7 additions and 32 deletions

View File

@@ -48,26 +48,6 @@ nm_modem_manager_get (void)
return singleton;
}
gboolean
nm_modem_manager_has_modem_for_iface (NMModemManager *manager,
const gchar *iface)
{
NMModemManagerPrivate *priv = NM_MODEM_MANAGER_GET_PRIVATE (manager);
GList *iter;
g_assert (manager);
g_assert (NM_IS_MODEM_MANAGER(manager));
g_assert (iface);
for (iter = g_hash_table_get_values(priv->modems); iter != NULL; iter = iter->next) {
NMModem *modem = NM_MODEM (iter->data);
const char *modem_iface = nm_modem_get_iface (modem);
if (!g_strcmp0 (iface, modem_iface))
return TRUE;
}
return FALSE;
}
static gboolean
get_modem_properties (DBusGConnection *connection,
const char *path,

View File

@@ -30,7 +30,4 @@ GType nm_modem_manager_get_type (void);
NMModemManager *nm_modem_manager_get (void);
gboolean nm_modem_manager_has_modem_for_iface (NMModemManager *manager,
const gchar *iface);
#endif /* NM_MODEM_MANAGER_H */

View File

@@ -127,15 +127,13 @@ static const char *internal_activate_device (NMManager *manager,
gboolean assumed,
GError **error);
static NMDevice *
find_device_by_iface (NMManager *self, const gchar *iface);
static NMDevice *find_device_by_iface (NMManager *self, const gchar *iface);
static GSList *
remove_one_device (NMManager *manager,
GSList *list,
NMDevice *device,
gboolean quitting,
gboolean force_unmanage);
static GSList * remove_one_device (NMManager *manager,
GSList *list,
NMDevice *device,
gboolean quitting,
gboolean force_unmanage);
static NMDevice *nm_manager_get_device_by_udi (NMManager *manager, const char *udi);
@@ -1214,7 +1212,7 @@ add_device (NMManager *self, NMDevice *device)
iface = nm_device_get_ip_iface (device);
g_assert (iface);
if (!NM_IS_MODEM (device) && nm_modem_manager_has_modem_for_iface (priv->modem_manager, iface)) {
if (!NM_IS_MODEM (device) && find_device_by_iface (self, iface)) {
g_object_unref (device);
return;
}