NetworkManager r3443 - in trunk: . libnm-util src system-settings/plugins/ifcfg-fedora system-settings/plugins/ifcfg-suse



Author: dcbw
Date: Thu Mar 13 03:11:02 2008
New Revision: 3443
URL: http://svn.gnome.org/viewvc/NetworkManager?rev=3443&view=rev

Log:
2008-03-12  Dan Williams  <dcbw redhat com>

	* libnm-util/nm-setting-ip4-config.c
	  libnm-util/nm-setting-ip4-config.h
		- Remove 'manual' and 'autoip' properties
		- Add 'method' property
		- (verify): fix verification with 'method'
		- (finalize): free 'method'
		- (set_property, get_property, nm_setting_ip4_config_class_init): fix
			up for 'method'

	* src/nm-device.c
		- (real_act_stage3_ip_config_start): check IP4Config method
		- (nm_device_new_ip4_autoip_config): add a note about not sucking in
			the future
		- (merge_ip4_config): IP settings are valid with DHCP too
		- (real_act_stage4_get_ip4_config): handle all IP4Config methods
		- (real_act_stage4_ip_config_timeout): don't do autoip on DHCP timeout

	* src/nm-device-802-11-wireless.c
		- (real_act_stage3_ip_config_start): remove; autoip only on demand
		- (real_act_stage4_get_ip4_config): just chain up to parent; autoip
			only on demand

	* system-settings/plugins/ifcfg-fedora/parser.c
	  system-settings/plugins/ifcfg-suse/parser.c
		- (make_ip4_setting): fix up for 'method'



Modified:
   trunk/ChangeLog
   trunk/libnm-util/nm-setting-ip4-config.c
   trunk/libnm-util/nm-setting-ip4-config.h
   trunk/src/nm-device-802-11-wireless.c
   trunk/src/nm-device.c
   trunk/system-settings/plugins/ifcfg-fedora/parser.c
   trunk/system-settings/plugins/ifcfg-suse/parser.c

Modified: trunk/libnm-util/nm-setting-ip4-config.c
==============================================================================
--- trunk/libnm-util/nm-setting-ip4-config.c	(original)
+++ trunk/libnm-util/nm-setting-ip4-config.c	Thu Mar 13 03:11:02 2008
@@ -1,5 +1,7 @@
 /* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
 
+#include <string.h>
+
 #include <dbus/dbus-glib.h>
 #include "nm-setting-ip4-config.h"
 #include "nm-param-spec-specialized.h"
@@ -9,8 +11,7 @@
 
 enum {
 	PROP_0,
-	PROP_MANUAL,
-	PROP_AUTOIP,
+	PROP_METHOD,
 	PROP_DNS,
 	PROP_DNS_SEARCH,
 	PROP_ADDRESSES,
@@ -29,11 +30,34 @@
 {
 	NMSettingIP4Config *self = NM_SETTING_IP4_CONFIG (setting);
 
-	if (self->manual) {
+	if (!self->method)
+		return FALSE;
+
+	if (!strcmp (self->method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
 		if (!self->addresses) {
 			g_warning ("address is not provided");
 			return FALSE;
 		}
+	} else if (!strcmp (self->method, NM_SETTING_IP4_CONFIG_METHOD_AUTOIP)) {
+		if (self->dns && self->dns->len) {
+			g_warning ("may not specify DNS when using autoip");
+			return FALSE;
+		}
+
+		if (g_slist_length (self->dns_search)) {
+			g_warning ("may not specify DNS searches when using autoip");
+			return FALSE;
+		}
+
+		if (g_slist_length (self->addresses)) {
+			g_warning ("may not specify IP addresses when using autoip");
+			return FALSE;
+		}
+	} else if (!strcmp (self->method, NM_SETTING_IP4_CONFIG_METHOD_DHCP)) {
+		/* nothing to do */
+	} else {
+		g_warning ("invalid IP4 config method '%s'", self->method);
+		return FALSE;
 	}
 
 	return TRUE;
@@ -51,6 +75,8 @@
 {
 	NMSettingIP4Config *self = NM_SETTING_IP4_CONFIG (object);
 
+	g_free (self->method);
+
 	if (self->dns)
 		g_array_free (self->dns, TRUE);
 
@@ -125,11 +151,9 @@
 	NMSettingIP4Config *setting = NM_SETTING_IP4_CONFIG (object);
 
 	switch (prop_id) {
-	case PROP_MANUAL:
-		setting->manual = g_value_get_boolean (value);
-		break;
-	case PROP_AUTOIP:
-		setting->autoip = g_value_get_boolean (value);
+	case PROP_METHOD:
+		g_free (setting->method);
+		setting->method = g_value_dup_string (value);
 		break;
 	case PROP_DNS:
 		if (setting->dns)
@@ -157,11 +181,8 @@
 	NMSettingIP4Config *setting = NM_SETTING_IP4_CONFIG (object);
 
 	switch (prop_id) {
-	case PROP_MANUAL:
-		g_value_set_boolean (value, setting->manual);
-		break;
-	case PROP_AUTOIP:
-		g_value_set_boolean (value, setting->autoip);
+	case PROP_METHOD:
+		g_value_set_string (value, setting->method);
 		break;
 	case PROP_DNS:
 		g_value_set_boxed (value, setting->dns);
@@ -192,20 +213,12 @@
 
 	/* Properties */
 	g_object_class_install_property
-		(object_class, PROP_MANUAL,
-		 g_param_spec_boolean (NM_SETTING_IP4_CONFIG_MANUAL,
-						   "Manual",
-						   "Do not use DHCP",
-						   FALSE,
-						   G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
-
-	g_object_class_install_property
-		(object_class, PROP_AUTOIP,
-		 g_param_spec_boolean (NM_SETTING_IP4_CONFIG_AUTOIP,
-						   "Auto IP",
-						   "Use Auto IP",
-						   FALSE,
-						   G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+		(object_class, PROP_METHOD,
+		 g_param_spec_string (NM_SETTING_IP4_CONFIG_METHOD,
+						      "Method",
+						      "IP configuration method",
+						      NULL,
+						      G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
 
 	g_object_class_install_property
 		(object_class, PROP_DNS,

Modified: trunk/libnm-util/nm-setting-ip4-config.h
==============================================================================
--- trunk/libnm-util/nm-setting-ip4-config.h	(original)
+++ trunk/libnm-util/nm-setting-ip4-config.h	Thu Mar 13 03:11:02 2008
@@ -16,12 +16,15 @@
 
 #define NM_SETTING_IP4_CONFIG_SETTING_NAME "ipv4"
 
-#define NM_SETTING_IP4_CONFIG_MANUAL     "manual"
-#define NM_SETTING_IP4_CONFIG_AUTOIP     "autoip"
+#define NM_SETTING_IP4_CONFIG_METHOD     "method"
 #define NM_SETTING_IP4_CONFIG_DNS        "dns"
 #define NM_SETTING_IP4_CONFIG_DNS_SEARCH "dns-search"
 #define NM_SETTING_IP4_CONFIG_ADDRESSES  "addresses"
 
+#define NM_SETTING_IP4_CONFIG_METHOD_DHCP   "dhcp"
+#define NM_SETTING_IP4_CONFIG_METHOD_AUTOIP "autoip"
+#define NM_SETTING_IP4_CONFIG_METHOD_MANUAL "manual"
+
 typedef struct {
 	guint32 address;
 	guint32 netmask;
@@ -31,8 +34,7 @@
 typedef struct {
 	NMSetting parent;
 
-	gboolean manual;
-	gboolean autoip;
+	char *method;
 	GArray *dns;        /* array of guint32 */
 	GSList *dns_search; /* list of strings */
 	GSList *addresses;  /* array of NMSettingIP4Address */

Modified: trunk/src/nm-device-802-11-wireless.c
==============================================================================
--- trunk/src/nm-device-802-11-wireless.c	(original)
+++ trunk/src/nm-device-802-11-wireless.c	Thu Mar 13 03:11:02 2008
@@ -2685,69 +2685,19 @@
 	return ret;
 }
 
-
-static NMActStageReturn
-real_act_stage3_ip_config_start (NMDevice *dev)
-{
-	NMDevice80211Wireless *	self = NM_DEVICE_802_11_WIRELESS (dev);
-	NMAccessPoint *		ap;
-	NMActStageReturn		ret = NM_ACT_STAGE_RETURN_FAILURE;
-	NMActRequest *          req;
-	NMConnection *          connection;
-
-	ap = nm_device_802_11_wireless_get_activation_ap (self);
-	g_assert (ap);
-
-	req = nm_device_get_act_request (dev);
-	g_assert (req);
-
-	connection = nm_act_request_get_connection (req);
-	g_assert (connection);
-
-	/* User-created access points (ie, Ad-Hoc networks) don't do DHCP,
-	 * everything else does.
-	 */
-	if (!nm_ap_get_user_created (ap))
-	{
-		NMDevice80211WirelessClass *	klass;
-		NMDeviceClass * parent_class;
-
-		/* Chain up to parent */
-		klass = NM_DEVICE_802_11_WIRELESS_GET_CLASS (self);
-		parent_class = NM_DEVICE_CLASS (g_type_class_peek_parent (klass));
-		ret = parent_class->act_stage3_ip_config_start (dev);
-	}
-	else
-		ret = NM_ACT_STAGE_RETURN_SUCCESS;
-
-	return ret;
-}
-
-
 static NMActStageReturn
 real_act_stage4_get_ip4_config (NMDevice *dev,
                                 NMIP4Config **config)
 {
-	NMDevice80211Wireless *self = NM_DEVICE_802_11_WIRELESS (dev);
-	NMAccessPoint *ap = nm_device_802_11_wireless_get_activation_ap (self);
 	NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
+	NMDeviceClass *parent_class;
 
 	g_return_val_if_fail (config != NULL, NM_ACT_STAGE_RETURN_FAILURE);
 	g_return_val_if_fail (*config == NULL, NM_ACT_STAGE_RETURN_FAILURE);
 
-	g_assert (ap);
-	if (nm_ap_get_user_created (ap)) {
-		*config = nm_device_new_ip4_autoip_config (NM_DEVICE (self));
-		ret = NM_ACT_STAGE_RETURN_SUCCESS;
-	} else {
-		NMDevice80211WirelessClass *	klass;
-		NMDeviceClass * parent_class;
-
-		/* Chain up to parent */
-		klass = NM_DEVICE_802_11_WIRELESS_GET_CLASS (self);
-		parent_class = NM_DEVICE_CLASS (g_type_class_peek_parent (klass));
-		ret = parent_class->act_stage4_get_ip4_config (dev, config);
-	}
+	/* Chain up to parent */
+	parent_class = NM_DEVICE_CLASS (nm_device_802_11_wireless_parent_class);
+	ret = parent_class->act_stage4_get_ip4_config (dev, config);
 
 	if ((ret == NM_ACT_STAGE_RETURN_SUCCESS) && *config) {
 		NMConnection *connection;
@@ -3052,7 +3002,6 @@
 
 	parent_class->act_stage1_prepare = real_act_stage1_prepare;
 	parent_class->act_stage2_config = real_act_stage2_config;
-	parent_class->act_stage3_ip_config_start = real_act_stage3_ip_config_start;
 	parent_class->act_stage4_get_ip4_config = real_act_stage4_get_ip4_config;
 	parent_class->act_stage4_ip_config_timeout = real_act_stage4_ip_config_timeout;
 	parent_class->deactivate = real_deactivate;

Modified: trunk/src/nm-device.c
==============================================================================
--- trunk/src/nm-device.c	(original)
+++ trunk/src/nm-device.c	Thu Mar 13 03:11:02 2008
@@ -531,11 +531,11 @@
 													NM_TYPE_SETTING_IP4_CONFIG);
 
 	/* If we did not receive IP4 configuration information, default to DHCP */
-	if (!setting || setting->manual == FALSE) {
-		/* Begin a DHCP transaction on the interface */
+	if (!setting || !strcmp (setting->method, NM_SETTING_IP4_CONFIG_METHOD_DHCP)) {
 		NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
 		gboolean success;
 
+		/* Begin a DHCP transaction on the interface */
 		nm_device_set_use_dhcp (self, TRUE);
 
 		/* DHCP manager will cancel any transaction already in progress and we do not
@@ -636,8 +636,8 @@
 
 	g_return_val_if_fail (self != NULL, NULL);
 
-	if (get_autoip (self, &ip))
-	{
+	// FIXME: make our autoip implementation not suck; use avahi-autoip
+	if (get_autoip (self, &ip)) {
 		#define LINKLOCAL_BCAST		0xa9feffff
 
 		config = nm_ip4_config_new ();
@@ -673,15 +673,13 @@
 
 	if (setting->addresses) {
 		/* FIXME; add support for more than one set of address/netmask/gateway for NMIP4Config */
-		if (setting->manual) {
-			NMSettingIP4Address *addr = (NMSettingIP4Address *) setting->addresses->data;
+		NMSettingIP4Address *addr = (NMSettingIP4Address *) setting->addresses->data;
 
-			nm_ip4_config_set_address (ip4_config, addr->address);
-			nm_ip4_config_set_netmask (ip4_config, addr->netmask);
+		nm_ip4_config_set_address (ip4_config, addr->address);
+		nm_ip4_config_set_netmask (ip4_config, addr->netmask);
 
-			if (addr->gateway)
-				nm_ip4_config_set_gateway (ip4_config, addr->gateway);
-		}
+		if (addr->gateway)
+			nm_ip4_config_set_gateway (ip4_config, addr->gateway);
 	}
 }
 
@@ -691,30 +689,37 @@
 {
 	NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
 	NMConnection *connection;
+	NMSettingIP4Config *s_ip4;
 
 	g_return_val_if_fail (config != NULL, NM_ACT_STAGE_RETURN_FAILURE);
 	g_return_val_if_fail (*config == NULL, NM_ACT_STAGE_RETURN_FAILURE);
 
 	connection = nm_act_request_get_connection (nm_device_get_act_request (self));
+	g_assert (connection);
+
+	s_ip4 = (NMSettingIP4Config *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
 
-	if (nm_device_get_use_dhcp (self))
+	if (nm_device_get_use_dhcp (self)) {
 		*config = nm_dhcp_manager_get_ip4_config (NM_DEVICE_GET_PRIVATE (self)->dhcp_manager,
 											 nm_device_get_iface (self));
-	else
-		*config = nm_ip4_config_new ();
-
-	if (*config) {
-		NMSettingIP4Config *s_ip4;
-
-		s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
 		merge_ip4_config (*config, s_ip4);
-		ret = NM_ACT_STAGE_RETURN_SUCCESS;
 	} else {
-		/* Make sure device is up even if config fails */
-		if (!nm_device_bring_up (self, FALSE))
-			ret = NM_ACT_STAGE_RETURN_FAILURE;
+		g_assert (s_ip4);
+
+		if (!strcmp (s_ip4->method, NM_SETTING_IP4_CONFIG_METHOD_AUTOIP)) {
+			nm_device_new_ip4_autoip_config (self);
+		} else if (!strcmp (s_ip4->method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
+			*config = nm_ip4_config_new ();
+			merge_ip4_config (*config, s_ip4);
+		}
 	}
 
+	if (!*config) {
+		/* Make sure device is up even if config fails */
+		nm_device_bring_up (self, FALSE);
+	} else
+		ret = NM_ACT_STAGE_RETURN_SUCCESS;
+
 	return ret;
 }
 
@@ -791,11 +796,8 @@
 	g_return_val_if_fail (config != NULL, NM_ACT_STAGE_RETURN_FAILURE);
 	g_return_val_if_fail (*config == NULL, NM_ACT_STAGE_RETURN_FAILURE);
 
-	/* Wired network, no DHCP reply.  Let's get an IP via Zeroconf. */
-	nm_info ("No DHCP reply received.  Automatically obtaining IP via Zeroconf.");
-	*config = nm_device_new_ip4_autoip_config (self);
-
-	return NM_ACT_STAGE_RETURN_SUCCESS;
+	/* DHCP failed; connection must fail */
+	return NM_ACT_STAGE_RETURN_FAILURE;
 }
 
 

Modified: trunk/system-settings/plugins/ifcfg-fedora/parser.c
==============================================================================
--- trunk/system-settings/plugins/ifcfg-fedora/parser.c	(original)
+++ trunk/system-settings/plugins/ifcfg-fedora/parser.c	Thu Mar 13 03:11:02 2008
@@ -302,12 +302,17 @@
 	NMSettingIP4Config *s_ip4 = NULL;
 	char *value = NULL;
 	NMSettingIP4Address tmp = { 0, 0, 0 };
-	gboolean manual = TRUE;
+	char *method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
 	char *dir;
 
 	value = svGetValue (ifcfg, "BOOTPROTO");
-	if (value && (!strcmp (value, "bootp") || !strcmp (value, "dhcp")))
-		manual = FALSE;
+	if (value && (!g_ascii_strcasecmp (value, "bootp") || !g_ascii_strcasecmp (value, "dhcp")))
+		method = NM_SETTING_IP4_CONFIG_METHOD_DHCP;
+
+	if (value && !g_ascii_strcasecmp (value, "autoip")) {
+		method = NM_SETTING_IP4_CONFIG_METHOD_AUTOIP;
+		goto done;
+	}
 
 	value = svGetValue (ifcfg, "IPADDR");
 	if (value) {
@@ -348,8 +353,9 @@
 		g_free (value);
 	}
 
+done:
 	s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
-	s_ip4->manual = manual;
+	s_ip4->method = g_strdup (method);
 	if (tmp.address || tmp.netmask || tmp.gateway) {
 		NMSettingIP4Address *addr;
 		addr = g_new0 (NMSettingIP4Address, 1);
@@ -357,14 +363,17 @@
 		s_ip4->addresses = g_slist_append (s_ip4->addresses, addr);
 	}
 
-	dir = g_path_get_dirname (ifcfg->fileName);
-	if (dir) {
-		read_profile_resolv_conf (dir, s_ip4);
-		g_free (dir);
-	} else {
-		g_set_error (error, ifcfg_plugin_error_quark (), 0,
-		             "Not enough memory to parse resolv.conf");
-		goto error;
+	/* No DNS for autoip */
+	if (g_ascii_strcasecmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTOIP)) {
+		dir = g_path_get_dirname (ifcfg->fileName);
+		if (dir) {
+			read_profile_resolv_conf (dir, s_ip4);
+			g_free (dir);
+		} else {
+			g_set_error (error, ifcfg_plugin_error_quark (), 0,
+			             "Not enough memory to parse resolv.conf");
+			goto error;
+		}
 	}
 
 	return NM_SETTING (s_ip4);

Modified: trunk/system-settings/plugins/ifcfg-suse/parser.c
==============================================================================
--- trunk/system-settings/plugins/ifcfg-suse/parser.c	(original)
+++ trunk/system-settings/plugins/ifcfg-suse/parser.c	Thu Mar 13 03:11:02 2008
@@ -155,14 +155,14 @@
 	NMSettingIP4Config *s_ip4 = NULL;
 	char *value = NULL;
 	NMSettingIP4Address tmp = { 0, 0, 0 };
-	gboolean manual = TRUE;
+	char *method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
 
 	value = svGetValue (ifcfg, "BOOTPROTO");
 	if (!value)
 		return NULL;
 
 	if (!g_ascii_strcasecmp (value, "bootp") || !g_ascii_strcasecmp (value, "dhcp")) {
-		manual = FALSE;
+		method = NM_SETTING_IP4_CONFIG_METHOD_DHCP;
 		return NULL;
 	}
 
@@ -212,7 +212,7 @@
 	}
 
 	s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
-	s_ip4->manual = manual;
+	s_ip4->method = g_strdup (method);
 	if (tmp.address || tmp.netmask || tmp.gateway) {
 		NMSettingIP4Address *addr;
 		addr = g_new0 (NMSettingIP4Address, 1);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]