From cbd27080ed6fa0788e388cc9c2f49e3b7b1ce1c1 Mon Sep 17 00:00:00 2001 From: Robert Love Date: Thu, 19 Jan 2006 18:00:48 +0000 Subject: [PATCH] 2006-01-18 Robert Love * src/NetworkManager.c, src/NetworkManagerSystem.h, src/nm-device.c: Allow backends to flag a device (in whatever distro-dependent way they so desire) as disabled. NM will ignore any such device. * src/backends/NetworkManagerDebian.c, src/backends/NetworkManagerRedHat.c, src/backends/NetworkManagerSlackware.c: Add stub function nm_system_device_get_disabled() that always returns FALSE (enabled). * src/backends/NetworkManagerSuSE.c: Add system_disabled field to the SUSE-specific configuration structure. Fill it in from the NM_CONTROLLED variable in the system networking scripts. If this var exists and is "no", we ignore the device. git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@1361 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- ChangeLog | 14 +++++++ src/NetworkManager.c | 2 +- src/NetworkManagerSystem.h | 2 + src/backends/NetworkManagerDebian.c | 13 +++++++ src/backends/NetworkManagerRedHat.c | 13 +++++++ src/backends/NetworkManagerSlackware.c | 14 +++++++ src/backends/NetworkManagerSuSE.c | 54 ++++++++++++++++++++------ src/nm-device.c | 13 +++++-- 8 files changed, 109 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index b871349fa..524dd90eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2006-01-18 Robert Love + + * src/NetworkManager.c, src/NetworkManagerSystem.h, src/nm-device.c: + Allow backends to flag a device (in whatever distro-dependent way + they so desire) as disabled. NM will ignore any such device. + * src/backends/NetworkManagerDebian.c, + src/backends/NetworkManagerRedHat.c, + src/backends/NetworkManagerSlackware.c: Add stub function + nm_system_device_get_disabled() that always returns FALSE (enabled). + * src/backends/NetworkManagerSuSE.c: Add system_disabled field to the + SUSE-specific configuration structure. Fill it in from the + NM_CONTROLLED variable in the system networking scripts. If this var + exists and is "no", we ignore the device. + 2006-01-17 Robert Love * configure.in: Remove 'no' language. Replaced by 'nb', which is diff --git a/src/NetworkManager.c b/src/NetworkManager.c index 0214bd866..e00215a8f 100644 --- a/src/NetworkManager.c +++ b/src/NetworkManager.c @@ -147,7 +147,7 @@ NMDevice * nm_create_device_and_add_to_list (NMData *data, const char *udi, cons g_object_unref (G_OBJECT (dev)); dev = NULL; } - } else nm_warning ("could not allocate device data." ); + } return (dev); } diff --git a/src/NetworkManagerSystem.h b/src/NetworkManagerSystem.h index 29325d823..a3910bb48 100644 --- a/src/NetworkManagerSystem.h +++ b/src/NetworkManagerSystem.h @@ -62,6 +62,8 @@ NMIP4Config * nm_system_device_new_ip4_system_config (NMDevice *dev); gboolean nm_system_device_get_use_dhcp (NMDevice *dev); +gboolean nm_system_device_get_disabled (NMDevice *dev); + gboolean nm_system_device_set_from_ip4_config (NMDevice *dev); gboolean nm_system_vpn_device_set_from_ip4_config (NMNamedManager *named, NMDevice *active_device, const char *iface, NMIP4Config *config, char **routes, int num_routes); gboolean nm_system_vpn_device_unset_from_ip4_config (NMNamedManager *named, NMDevice *active_device, const char *iface, NMIP4Config *config); diff --git a/src/backends/NetworkManagerDebian.c b/src/backends/NetworkManagerDebian.c index 3fde63c66..8e699cca1 100644 --- a/src/backends/NetworkManagerDebian.c +++ b/src/backends/NetworkManagerDebian.c @@ -625,6 +625,19 @@ gboolean nm_system_device_get_use_dhcp (NMDevice *dev) } +/* + * nm_system_device_get_disabled + * + * Return whether the distro-specific system config tells us to use + * dhcp for this device. + * + */ +gboolean nm_system_device_get_disabled (NMDevice *dev) +{ + return FALSE; +} + + NMIP4Config *nm_system_device_new_ip4_system_config (NMDevice *dev) { DebSystemConfigData *sys_data; diff --git a/src/backends/NetworkManagerRedHat.c b/src/backends/NetworkManagerRedHat.c index 90c42cf86..8256d4c79 100644 --- a/src/backends/NetworkManagerRedHat.c +++ b/src/backends/NetworkManagerRedHat.c @@ -637,6 +637,19 @@ gboolean nm_system_device_get_use_dhcp (NMDevice *dev) } +/* + * nm_system_device_get_disabled + * + * Return whether the distro-specific system config tells us to use + * dhcp for this device. + * + */ +gboolean nm_system_device_get_disabled (NMDevice *dev) +{ + return FALSE; +} + + NMIP4Config *nm_system_device_new_ip4_system_config (NMDevice *dev) { RHSystemConfigData *sys_data; diff --git a/src/backends/NetworkManagerSlackware.c b/src/backends/NetworkManagerSlackware.c index aaea45873..bd886fe3e 100644 --- a/src/backends/NetworkManagerSlackware.c +++ b/src/backends/NetworkManagerSlackware.c @@ -370,6 +370,20 @@ gboolean nm_system_device_get_use_dhcp (NMDevice *dev) return TRUE; } + +/* + * nm_system_device_get_disabled + * + * Return whether the distro-specific system config tells us to use + * dhcp for this device. + * + */ +gboolean nm_system_device_get_disabled (NMDevice *dev) +{ + return FALSE; +} + + /* * nm_system_activate_nis * diff --git a/src/backends/NetworkManagerSuSE.c b/src/backends/NetworkManagerSuSE.c index d280f70d7..a2ef95c16 100644 --- a/src/backends/NetworkManagerSuSE.c +++ b/src/backends/NetworkManagerSuSE.c @@ -341,6 +341,7 @@ typedef struct SuSESystemConfigData { NMIP4Config * config; gboolean use_dhcp; + gboolean system_disabled; } SuSESystemConfigData; /* @@ -497,22 +498,33 @@ found: free (buf); } + if ((buf = svGetValue (file, "NM_CONTROLLED"))) + { + nm_debug ("NM_CONTROLLED=%s", buf); + if (!strcasecmp (buf, "no")) + { + nm_info ("System configuration disables device %s", nm_device_get_iface (dev)); + sys_data->system_disabled = TRUE; + } + free (buf); + } + sys_data->config = nm_ip4_config_new (); - if (!(sys_data->use_dhcp)) + if (!sys_data->use_dhcp || sys_data->system_disabled) { buf = svGetValue (file, "IPADDR"); if (buf) { - struct in_addr ip; - int ret; + struct in_addr ip; + int ret; - ret = inet_aton (buf, &ip); - if (ret) - nm_ip4_config_set_address (sys_data->config, ip.s_addr); - else - error = TRUE; - free (buf); + ret = inet_aton (buf, &ip); + if (ret) + nm_ip4_config_set_address (sys_data->config, ip.s_addr); + else + error = TRUE; + free (buf); } else error = TRUE; @@ -654,12 +666,32 @@ gboolean nm_system_device_get_use_dhcp (NMDevice *dev) { SuSESystemConfigData *sys_data; - g_return_val_if_fail (dev != NULL, TRUE); + g_return_val_if_fail (dev != NULL, FALSE); if ((sys_data = nm_device_get_system_config_data (dev))) return sys_data->use_dhcp; - return TRUE; + return FALSE; +} + + +/* + * nm_system_device_get_disabled + * + * Return whether the distribution has flagged this device as disabled. + * + */ +gboolean nm_system_device_get_disabled (NMDevice *dev) +{ + SuSESystemConfigData *sys_data; + + g_return_val_if_fail (dev != NULL, FALSE); + + + if ((sys_data = nm_device_get_system_config_data (dev))) + return sys_data->system_disabled; + + return FALSE; } diff --git a/src/nm-device.c b/src/nm-device.c index d63950618..c0217f9ae 100644 --- a/src/nm-device.c +++ b/src/nm-device.c @@ -168,7 +168,7 @@ nm_device_new (const char *iface, default: g_assert_not_reached (); } - + g_assert (dev); dev->priv->iface = g_strdup (iface); dev->priv->udi = g_strdup (udi); @@ -180,7 +180,7 @@ nm_device_new (const char *iface, if (!(dev->priv->capabilities & NM_DEVICE_CAP_NM_SUPPORTED)) { g_object_unref (G_OBJECT (dev)); - return NULL; + return NULL; } /* Device thread's main loop */ @@ -202,6 +202,13 @@ nm_device_new (const char *iface, dev->priv->system_config_data = nm_system_device_get_system_config (dev); dev->priv->use_dhcp = nm_system_device_get_use_dhcp (dev); + /* Allow distributions to flag devices as disabled */ + if (nm_system_device_get_disabled (dev)) + { + g_object_unref (G_OBJECT (dev)); + return NULL; + } + nm_print_device_capabilities (dev); /* Call type-specific initialization */ @@ -1994,5 +2001,3 @@ nm_device_get_type (void) } return type; } - -