SOURCES: NetworkManager-pld.patch - added partial support for syst...

megabajt megabajt at pld-linux.org
Mon Oct 29 22:16:37 CET 2007


Author: megabajt                     Date: Mon Oct 29 21:16:37 2007 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- added partial support for system configuration (Ethernet connections should work)

---- Files affected:
SOURCES:
   NetworkManager-pld.patch (1.6 -> 1.7) 

---- Diffs:

================================================================
Index: SOURCES/NetworkManager-pld.patch
diff -u SOURCES/NetworkManager-pld.patch:1.6 SOURCES/NetworkManager-pld.patch:1.7
--- SOURCES/NetworkManager-pld.patch:1.6	Fri May 11 15:03:11 2007
+++ SOURCES/NetworkManager-pld.patch	Mon Oct 29 22:16:32 2007
@@ -1,7 +1,7 @@
-diff -urN NetworkManager-0.6.2-o/configure.in NetworkManager-0.6.2/configure.in
---- NetworkManager-0.6.2-o/configure.in	2006-03-27 09:05:17.000000000 -0700
-+++ NetworkManager-0.6.2/configure.in	2006-04-03 13:39:20.000000000 -0600
-@@ -60,7 +60,7 @@
+diff -urN NetworkManager-0.6.5.orig/configure.in NetworkManager-0.6.5/configure.in
+--- NetworkManager-0.6.5.orig/configure.in	2007-07-23 19:44:13.000000000 +0200
++++ NetworkManager-0.6.5/configure.in	2007-07-23 20:09:37.000000000 +0200
+@@ -72,7 +72,7 @@
  	exit 1
  else
  	case $with_distro in
@@ -10,7 +10,7 @@
  		*)
  			echo "Your distribution (${with_distro}) is not yet supported!  (patches welcome)"
  			exit 1
-@@ -72,6 +72,7 @@
+@@ -85,6 +85,7 @@
  AM_CONDITIONAL(TARGET_DEBIAN, test x"$with_distro" = xdebian)
  AM_CONDITIONAL(TARGET_SLACKWARE, test x"$with_distro" = xslackware)
  AM_CONDITIONAL(TARGET_ARCH, test x"$with_distro" = xarch)
@@ -18,24 +18,26 @@
  
  AC_MSG_CHECKING([for wireless-tools >= 28pre9])
  AC_TRY_COMPILE([#include <iwlib.h>],
-diff -urN NetworkManager-0.6.2-o/src/backends/Makefile.am NetworkManager-0.6.2/src/backends/Makefile.am
---- NetworkManager-0.6.2-o/src/backends/Makefile.am	2006-03-09 13:52:16.000000000 -0700
-+++ NetworkManager-0.6.2/src/backends/Makefile.am	2006-04-03 13:39:20.000000000 -0600
-@@ -38,6 +38,10 @@
- libnmbackend_la_SOURCES +=	NetworkManagerSlackware.c
+diff -urN NetworkManager-0.6.5.orig/src/backends/Makefile.am NetworkManager-0.6.5/src/backends/Makefile.am
+--- NetworkManager-0.6.5.orig/src/backends/Makefile.am	2007-07-23 19:44:13.000000000 +0200
++++ NetworkManager-0.6.5/src/backends/Makefile.am	2007-07-23 20:12:37.000000000 +0200
+@@ -42,6 +42,12 @@
+ libnmbackend_la_SOURCES +=	NetworkManagerArch.c
  endif
  
 +if TARGET_PLD
-+libnmbackend_la_SOURCES += NetworkManagerPLD.c
++libnmbackend_la_SOURCES += NetworkManagerPLD.c \
++	shvar.c \
++	shvar.h
 +endif
 +
  libnmbackend_la_LIBADD = $(DBUS_LIBS) $(GTHREAD_LIBS)
  libnmbackend_la_CPPFLAGS =	$(DBUS_CFLAGS)				\
  					$(GTHREAD_CFLAGS)				\
-diff -urN NetworkManager-0.6.2-o/src/backends/NetworkManagerPLD.c NetworkManager-0.6.2/src/backends/NetworkManagerPLD.c
---- NetworkManager-0.6.2-o/src/backends/NetworkManagerPLD.c	1969-12-31 17:00:00.000000000 -0700
-+++ NetworkManager-0.6.2/src/backends/NetworkManagerPLD.c	2006-04-03 13:39:45.000000000 -0600
-@@ -0,0 +1,426 @@
+diff -urN NetworkManager-0.6.5.orig/src/backends/NetworkManagerPLD.c NetworkManager-0.6.5/src/backends/NetworkManagerPLD.c
+--- NetworkManager-0.6.5.orig/src/backends/NetworkManagerPLD.c	1970-01-01 01:00:00.000000000 +0100
++++ NetworkManager-0.6.5/src/backends/NetworkManagerPLD.c	2007-10-29 21:38:41.000000000 +0100
+@@ -0,0 +1,694 @@
 +/* NetworkManager -- Network link manager
 + *
 + * Narayan Newton <narayan_newton at yahoo.com>
@@ -58,6 +60,7 @@
 + * (C) Copyright 2004 Narayan Newton
 + * (C) Copyright 2005 wrobell <wrobell at pld-linux.org>
 + * (C) Copyright 2005 Patryk Zawadzki <patrys at pld-linux.org>
++ * (C) Copyright 2007 Marcin Banasiak <megabajt at pld-linux.org>
 + */
 +
 +#include <stdio.h>
@@ -69,10 +72,7 @@
 +#include "nm-device-802-3-ethernet.h"
 +#include "nm-device-802-11-wireless.h"
 +#include "nm-utils.h"
-+
-+/*
-+ *	PLD specific backend based on Slackware backend.
-+ */
++#include "shvar.h"
 +
 +/*
 + * nm_system_init
@@ -82,6 +82,7 @@
 + */
 +void nm_system_init (void)
 +{
++	/* Kill any dhclients lying around */
 +        nm_system_kill_all_dhcp_daemons();
 +}
 +
@@ -93,8 +94,6 @@
 + */
 +void nm_system_device_flush_routes (NMDevice *dev)
 +{
-+	char	buf [100];
-+
 +	g_return_if_fail (dev != NULL);
 +
 +	/* Not really applicable for test devices */
@@ -117,7 +116,7 @@
 +	g_return_if_fail (iface != NULL);
 +
 +	/* Remove routing table entries */
-+	buf = g_strdup_printf ("/sbin/ip route flush dev %s", iface);
++	buf = g_strdup_printf (IP_BINARY_PATH" route flush dev %s", iface);
 +	nm_spawn_process (buf);
 +	g_free (buf);
 +}
@@ -130,8 +129,6 @@
 + */
 +void nm_system_device_flush_addresses (NMDevice *dev)
 +{
-+	char	buf [100];
-+
 +	g_return_if_fail (dev != NULL);
 +
 +	/* Not really applicable for test devices */
@@ -153,23 +150,90 @@
 +	g_return_if_fail (iface != NULL);
 +
 +	/* Remove all IP addresses for a device */
-+	buf = g_strdup_printf ("/sbin/ip addr flush dev %s", iface);
++	buf = g_strdup_printf (IP_BINARY_PATH" addr flush dev %s", iface);
 +	nm_spawn_process (buf);
 +	g_free (buf);
 +}
 +
++typedef struct PLDSystemConfigData
++{
++	NMIP4Config	*config;
++	gboolean	use_dhcp;
++} PLDSystemConfigData;
++
 +/*
-+ * nm_system_device_setup_static_ip4_config
-+ *
-+ * Set up the device with a particular IPv4 address/netmask/gateway.
++ * set_ip4_config_from_resolv_conf
 + *
-+ * Returns:	TRUE	on success
-+ *			FALSE on error
++ * Add nameservers and search names from a resolv.conf format file.
 + *
 + */
-+gboolean nm_system_device_setup_static_ip4_config (NMDevice *dev)
++static void set_ip4_config_from_resolv_conf (const char *filename, NMIP4Config *ip4_config)
 +{
-+	syslog (LOG_WARNING, "nm_system_device_setup_static_ip4_config() is not implemented yet for this distribution.\n");
++	char *contents = NULL;
++	char **split_contents = NULL;
++	int i, len;
++
++	g_return_if_fail (filename != NULL);
++	g_return_if_fail (ip4_config != NULL);
++
++	if (!g_file_get_contents (filename, &contents, NULL, NULL) || (contents == NULL))
++		return;
++
++	if (!(split_contents = g_strsplit (contents, "\n", 0)))
++		goto out;
++
++	len = g_strv_length (split_contents);
++	for (i = 0; i < len; i++)
++	{
++		char *line = split_contents[i];
++
++		/* Ignore comments */
++		if (!line || (line[0] == ';') || (line[0] == '#'))
++			continue;
++
++		line = g_strstrip (line);
++		if ((strncmp (line, "search", 6) == 0) && (strlen (line) > 6))
++		{
++			char *searches = g_strdup (line + 7);
++			char **split_searches = NULL;
++
++			if (!searches || !strlen (searches))
++				continue;
++
++			/* Allow space-separated search domains */
++			if ((split_searches = g_strsplit (searches, " ", 0)))
++			{
++				int m, srch_len;
++
++				srch_len = g_strv_length (split_searches);
++				for (m = 0; m < srch_len; m++)
++				{
++					if (split_searches[m])
++						nm_ip4_config_add_domain	(ip4_config, split_searches[m]);
++				}
++				g_strfreev (split_searches);
++			}
++			else
++			{
++				/* Only 1 item, add the whole line */
++				nm_ip4_config_add_domain	(ip4_config, searches);
++			}
++
++			g_free (searches);
++		}
++		else if ((strncmp (line, "nameserver", 10) == 0) && (strlen (line) > 10))
++		{
++			guint32 addr = (guint32) (inet_addr (line + 11));
++
++			if (addr != (guint32) -1)
++				nm_ip4_config_add_nameserver (ip4_config, addr);
++		}
++	}
++
++	g_strfreev (split_contents);
++
++out:
++	g_free (contents);
 +}
 +
 +/*
@@ -180,9 +244,191 @@
 + * info before setting stuff too.
 + *
 + */
-+void *nm_system_device_get_system_config (NMDevice *dev, struct NMData *data)
++void *nm_system_device_get_system_config (NMDevice *dev, NMData *app_data)
 +{
-+	return NULL;
++	char			*cfg_file_path = NULL;
++	shvarFile		*file, *gateway_file;
++	char			*buf = NULL;
++	int			i, ip[4], prefix;
++	PLDSystemConfigData	*sys_data = NULL;
++	gboolean		error = FALSE;
++
++	g_return_val_if_fail (dev != NULL, NULL);
++
++	/* PLD stores this information in
++	 * /etc/sysconfig/interfaces/ifcfg-* where * is the interface
++	 * name.
++	 */
++
++	sys_data = g_malloc0 (sizeof (PLDSystemConfigData));
++	sys_data->use_dhcp = TRUE;
++
++	cfg_file_path = g_strdup_printf (SYSCONFDIR"/sysconfig/interfaces/ifcfg-%s", nm_device_get_iface (dev));
++	if (!cfg_file_path)
++		return sys_data;
++
++	if (!(file = svNewFile (cfg_file_path)))
++	{
++		g_free (cfg_file_path);
++		return sys_data;
++	}
++	g_free (cfg_file_path);
++
++	/* Make sure this config file is for this device */
++	buf = svGetValue (file, "DEVICE");
++	if (!buf || strcmp (buf, nm_device_get_iface (dev)))
++	{
++		free (buf);
++		goto out;
++	}
++
++	if ((buf = svGetValue (file, "BOOTPROTO")))
++	{
++		if (strcasecmp (buf, "dhcp"))
++			sys_data->use_dhcp = FALSE;
++		free (buf);
++	}
++
++	sys_data->config = nm_ip4_config_new ();
++
++	if (!(sys_data->use_dhcp))
++	{
++		if ((buf = svGetValue (file, "IPADDR")))
++		{
++			sscanf (buf, "%d.%d.%d.%d/%d", &ip[0], &ip[1], &ip[2], &ip[3], &prefix); 
++			sprintf (buf, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
++			nm_ip4_config_set_address (sys_data->config, inet_addr (buf));
++			
++			if (prefix >= 0 && prefix <= 32)
++			{
++				for (i = 0; i <= 3; i++)
++				{
++					switch (prefix)
++					{
++						case 7:
++							ip[i] = 254;
++							break;
++						case 6:
++							ip[i] = 252;
++							break;
++						case 5:
++							ip[i] = 248;
++							break;
++						case 4:
++							ip[i] = 240;
++							break;
++						case 3:
++							ip[i] = 224;
++							break;
++						case 2:
++							ip[i] = 192;
++							break;
++						case 1:
++							ip[i] = 128;
++							break;
++						default:
++							if (prefix >= 8)
++							{
++								ip[i] = 255;
++							}
++							else
++							{
++								ip[i] = 0;
++							}
++					}
++					prefix = prefix - 8;
++				}
++				sprintf (buf, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
++				nm_ip4_config_set_netmask (sys_data->config, inet_addr (buf));
++				free (buf);
++			}
++			else
++			{
++				nm_warning ("Prefix for device '%s' was invalid (should be between 0 and 32). " 
++						"Try to make default. ", nm_device_get_iface (dev));
++
++				guint32 addr = nm_ip4_config_get_address (sys_data->config);
++
++				if (((ntohl (addr) & 0xFF000000) >> 24) <= 127)
++					nm_ip4_config_set_netmask (sys_data->config, htonl (0xFF000000));
++				else if (((ntohl (addr) & 0xFF000000) >> 24) <= 191)
++					nm_ip4_config_set_netmask (sys_data->config, htonl (0xFFFF0000));
++				else
++				        nm_ip4_config_set_netmask (sys_data->config, htonl (0xFFFFFF00));
++			}
++		}
++		else
++		{
++			nm_warning ("Network configuration for device '%s' was invalid (non-DHCP configuration, "
++						"but no IP address specified.  Will use DHCP instead.", nm_device_get_iface (dev));
++			error = TRUE;
++			goto out;
++		}
++
++		if (gateway_file = svNewFile (SYSCONFDIR"/sysconfig/network"))
++		{
++			buf = svGetValue (gateway_file, "GATEWAYDEV");
++			
++			/* Make sure that GATEWAY is set for this device */
++			if (!buf || strcmp (buf, nm_device_get_iface (dev)))
++			{
++				nm_warning ("Network configuration for device '%s' was invalid (non-DHCP configuration, "
++					    "but no gateway specified - GATEWAYDEV set for other device or unset). Will "
++					    "use DHCP instead.", nm_device_get_iface (dev));
++				
++				free (buf);
++				svCloseFile (gateway_file);
++				error = TRUE;
++				goto out;
++			}
++			
++			if ((buf = svGetValue (gateway_file, "GATEWAY")))
++			{			
++				nm_ip4_config_set_gateway (sys_data->config, inet_addr (buf));
++				free (buf);
++				svCloseFile (gateway_file);
++			}
++			else
++			{
++				nm_warning ("Network configuration for device '%s' was invalid (non-DHCP configuration, "
++						"but no gateway specified.  Will use DHCP instead.", nm_device_get_iface (dev));
++				svCloseFile (gateway_file);
++				error = TRUE;
++				goto out;
++			}
++		}
++
++		if ((buf = svGetValue (file, "BROADCAST")))
++		{
++			nm_ip4_config_set_broadcast (sys_data->config, inet_addr (buf));
++			free (buf);
++		}
++		else
++		{
++			guint32 broadcast = ((nm_ip4_config_get_address (sys_data->config) & nm_ip4_config_get_netmask (sys_data->config))
++									| ~nm_ip4_config_get_netmask (sys_data->config));
++			nm_ip4_config_set_broadcast (sys_data->config, broadcast);
++		}
++	}
++
++	/* If we're using Static IP, grab DNS servers from the config file */
++	if (!sys_data->use_dhcp)
++	{
++		set_ip4_config_from_resolv_conf (SYSCONFDIR"/resolv.conf", sys_data->config);
++	}
++
++out:
++	svCloseFile (file);
++	
++	if (error)
++	{
++		sys_data->use_dhcp = TRUE;
++		/* Clear out the config */
++		nm_ip4_config_unref (sys_data->config);
++		sys_data->config = NULL;
++	}
++
++	return (void *)sys_data;
 +}
 +
 +/*
@@ -205,8 +451,8 @@
 + */
 +void nm_system_enable_loopback (void)
 +{
-+	nm_spawn_process ("/sbin/ip link set dev lo up");
-+	nm_spawn_process ("/sbin/ip addr add 127.0.0.1/8 brd 127.255.255.255 dev lo label loopback");
++	nm_system_device_set_up_down_with_iface ("lo", TRUE);
++	nm_spawn_process (IP_BINARY_PATH" addr add 127.0.0.1/8 brd 127.255.255.255 dev lo scope host label loopback");
 +}
 +
 +/*
@@ -217,7 +463,7 @@
 + */
 +void nm_system_delete_default_route (void)
 +{
-+	nm_spawn_process ("/sbin/ip route del default");
++	nm_spawn_process (IP_BINARY_PATH" route del default");
 +}
 +
 +/*
@@ -228,7 +474,7 @@
 + */
 +void nm_system_kill_all_dhcp_daemons (void)
 +{
-+	nm_spawn_process ("/bin/killall -q dhcpcd");
++	nm_spawn_process ("/bin/killall -q dhclient");
 +}
 +
 +/*
@@ -275,7 +521,7 @@
 +	eui[0] ^= 2;
 +
 +	/* Add the default link-local IPv6 address to a device */
-+	buf = g_strdup_printf ("/sbin/ip -6 addr add fe80::%x%02x:%x%02x:%x%02x:%x%02x/64 dev %s",
++	buf = g_strdup_printf (IP_BINARY_PATH" -6 addr add fe80::%x%02x:%x%02x:%x%02x:%x%02x/64 dev %s",
 +					eui[0], eui[1], eui[2], eui[3], eui[4], eui[5],
 +					eui[6], eui[7], nm_device_get_iface (dev));
 +	nm_spawn_process (buf);
@@ -295,7 +541,7 @@
 +	g_return_if_fail (iface != NULL);
 +
 +	/* Add default gateway */
-+	buf = g_strdup_printf ("/sbin/ip route add %s dev %s", route, iface);
++	buf = g_strdup_printf (IP_BINARY_PATH" route add %s dev %s", route, iface);
 +	nm_spawn_process (buf);
 +	g_free (buf);
 +}
@@ -330,7 +576,7 @@
 +	g_return_if_fail (iface != NULL);
 +
 +	/* Add default gateway */
-+	buf = g_strdup_printf ("/sbin/ip route add default dev %s", iface);
++	buf = g_strdup_printf (IP_BINARY_PATH" route add default dev %s", iface);
 +	nm_spawn_process (buf);
 +	g_free (buf);
 +}
@@ -345,7 +591,7 @@
 +void nm_system_flush_loopback_routes (void)
 +{
 +	/* Remove routing table entries for lo */
-+	nm_spawn_process ("/sbin/ip route flush dev lo");
++	nm_spawn_process (IP_BINARY_PATH" route flush dev lo");
 +}
 +
 +/*
@@ -356,7 +602,7 @@
 + */
 +void nm_system_flush_arp_cache (void)
 +{
-+	nm_spawn_process ("/sbin/ip neigh flush all");
++	nm_spawn_process (IP_BINARY_PATH" neigh flush all");
 +}
 +
 +void nm_system_deactivate_all_dialup (GSList *list)
@@ -387,16 +633,40 @@
 +
 +void nm_system_device_free_system_config (NMDevice *dev, void *system_config_data)
 +{
++	PLDSystemConfigData *sys_data = (PLDSystemConfigData *)system_config_data;
++	
++	g_return_if_fail (dev != NULL);
++	    
++	if (!sys_data)
++		return;
++	
++	if (sys_data->config)
++		nm_ip4_config_unref (sys_data->config);
 +}
 +
 +NMIP4Config *nm_system_device_new_ip4_system_config (NMDevice *dev)
 +{
-+	        return NULL;
++	PLDSystemConfigData	*sys_data;
++	NMIP4Config		*new_config = NULL;
++	    
++	g_return_val_if_fail (dev != NULL, NULL);
++		
++	if ((sys_data = nm_device_get_system_config_data (dev)))
++		new_config = nm_ip4_config_copy (sys_data->config);
++			    
++	return new_config;
 +}
 +
 +gboolean nm_system_device_get_use_dhcp (NMDevice *dev)
 +{
-+	        return TRUE;
++	PLDSystemConfigData	*sys_data;
++	
++	g_return_val_if_fail (dev != NULL, TRUE);
++	
++	if ((sys_data = nm_device_get_system_config_data (dev)))
++		return sys_data->use_dhcp;
++		    
++	return TRUE;
 +}
 +
 +/*
@@ -462,3 +732,15 @@
 +{
 +	return 0;
 +}
+diff -urN NetworkManager-0.6.5.orig/src/backends/NetworkManagerRedHat.c NetworkManager-0.6.5/src/backends/NetworkManagerRedHat.c
+--- NetworkManager-0.6.5.orig/src/backends/NetworkManagerRedHat.c	2007-07-23 19:44:13.000000000 +0200
++++ NetworkManager-0.6.5/src/backends/NetworkManagerRedHat.c	2007-10-29 21:43:12.000000000 +0100
+@@ -927,7 +927,7 @@
+  */
+ gboolean nm_system_should_modify_resolv_conf (void)
+ {
+-	return TRUE;
++	return FALSE;
+ }
+ 
+ 
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/NetworkManager-pld.patch?r1=1.6&r2=1.7&f=u



More information about the pld-cvs-commit mailing list