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