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 <[EMAIL PROTECTED]> @@ -58,6 +60,7 @@ + * (C) Copyright 2004 Narayan Newton + * (C) Copyright 2005 wrobell <[EMAIL PROTECTED]> + * (C) Copyright 2005 Patryk Zawadzki <[EMAIL PROTECTED]> ++ * (C) Copyright 2007 Marcin Banasiak <[EMAIL PROTECTED]> + */ + +#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 _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit