Re: [PATCH] Generic backend functions
- From: Dan Williams <dcbw redhat com>
- To: Timothée Lecomte <timothee lecomte ens fr>
- Cc: networkmanager list <networkmanager-list gnome org>
- Subject: Re: [PATCH] Generic backend functions
- Date: Sat, 22 Jul 2006 11:17:13 -0400
On Thu, 2006-07-20 at 21:26 +0200, Timoth�Lecomte wrote:
> Dear NetworkManager developpers,
>
> Please find attached a patch that implements generic backend functions.
> This allows to factorize a large amount of the duplicated code in the
> backend specific files. It applies to current CVS, in src/backends.
On vacation now, but will try to review the patch either today or
tomorrow...
Thanks!
Dan
> The patch does not change any of the backend behaviours : it only
> switches a "native" code to its "generic" counterpart when they are
> identical. It also does not restrict the flexibility of the current
> design : each backend is still free to implement its own function if the
> generic one is not satisfying.
>
> Here is the diffstat :
>
> Makefile.am | 3
> NetworkManagerArch.c | 171 +--------------
> NetworkManagerDebian.c | 169 +--------------
> NetworkManagerGeneric.c | 495
> ++++++++++++++++++++++++++++++++++++++++++++++
> NetworkManagerGeneric.h | 93 ++++++++
> NetworkManagerGentoo.c | 90 +-------
> NetworkManagerPaldo.c | 88 +-------
> NetworkManagerRedHat.c | 173 +---------------
> NetworkManagerSlackware.c | 94 +-------
> NetworkManagerSuSE.c | 172 +--------------
> 10 files changed, 687 insertions(+), 861 deletions(-)
>
> For your information, I plan to extend NetworkManagerGeneric.c with more
> autoconf tests. It will allow to factorize more code, like the mDNS,
> avahi and nscd calls. Please tell me if it is appropriate.
>
> NetworkManagerGeneric.c is also a perfect place to experiment with libnl
> instead of the "ip" command-line tool.
>
> I was also planning to write some sort of "dummy" backend for
> distributions that are not currently supported, but I have realized that
> the Slackware backend also plays this role quite nicely.
>
> Best regards,
>
> Timoth�Lecomte
> plain text document attachment (NetworkManagerGeneric.diff)
> diff -Naur old/Makefile.am new/Makefile.am
> --- old/Makefile.am 2006-03-27 21:58:03.000000000 +0200
> +++ new/Makefile.am 2006-07-20 20:29:34.000000000 +0200
> @@ -8,7 +8,8 @@
>
> noinst_LTLIBRARIES = libnmbackend.la
>
> -libnmbackend_la_SOURCES =
> +libnmbackend_la_SOURCES = NetworkManagerGeneric.c \
> + NetworkManagerGeneric.h
>
> if TARGET_REDHAT
> libnmbackend_la_SOURCES += NetworkManagerRedHat.c \
> diff -Naur old/NetworkManagerArch.c new/NetworkManagerArch.c
> --- old/NetworkManagerArch.c 2006-07-13 18:40:34.000000000 +0200
> +++ new/NetworkManagerArch.c 2006-07-20 20:36:25.000000000 +0200
> @@ -42,6 +42,7 @@
> #include <arpa/inet.h>
> #include <glib/gprintf.h>
> #include <glib/gfileutils.h>
> +#include "NetworkManagerGeneric.h"
> #include "NetworkManagerSystem.h"
> #include "NetworkManagerUtils.h"
> #include "nm-device.h"
> @@ -61,6 +62,7 @@
> */
> void nm_system_init (void)
> {
> + nm_generic_init ();
> }
>
> /*
> @@ -71,13 +73,7 @@
> */
> void nm_system_device_add_default_route_via_device (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_add_default_route_via_device_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_add_default_route_via_device (dev);
> }
>
>
> @@ -89,14 +85,7 @@
> */
> void nm_system_device_add_default_route_via_device_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add default dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_default_route_via_device_with_iface (iface);
> }
>
> /*
> @@ -107,14 +96,7 @@
> */
> void nm_system_device_add_route_via_device_with_iface (const char *iface, const char *route)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add %s dev %s", route, iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_route_via_device_with_iface (iface, route);
> }
>
>
> @@ -126,14 +108,7 @@
> */
> void nm_system_device_flush_routes (NMDevice *dev)
> {
> -
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_flush_routes_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_routes (dev);
> }
>
> /*
> @@ -144,14 +119,7 @@
> */
> void nm_system_device_flush_routes_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove routing table entries */
> - buf = g_strdup_printf (IP_BINARY_PATH " route flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_routes_with_iface (iface);
> }
>
> /*
> @@ -162,13 +130,7 @@
> */
> void nm_system_device_flush_addresses (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_flush_addresses_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_addresses (dev);
> }
>
>
> @@ -180,14 +142,7 @@
> */
> void nm_system_device_flush_addresses_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove all IP addresses for a device */
> - buf = g_strdup_printf (IP_BINARY_PATH " addr flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_addresses_with_iface (iface);
> }
>
> /*
> @@ -322,7 +277,7 @@
> */
> void nm_system_flush_loopback_routes (void)
> {
> - nm_system_device_flush_routes_with_iface ("lo");
> + nm_generic_flush_loopback_routes ();
> }
>
>
> @@ -334,7 +289,7 @@
> */
> void nm_system_delete_default_route (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " route del default");
> + nm_generic_delete_default_route ();
> }
>
>
> @@ -346,7 +301,7 @@
> */
> void nm_system_flush_arp_cache (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " neigh flush all");
> + nm_generic_flush_arp_cache ();
> }
>
>
> @@ -404,104 +359,7 @@
> */
> void nm_system_device_add_ip6_link_address (NMDevice *dev)
> {
> - char *buf;
> - char *addr;
> - struct ether_addr hw_addr;
> - unsigned char eui[8];
> -
> - if (nm_device_is_802_3_ethernet (dev))
> - nm_device_802_3_ethernet_get_address (NM_DEVICE_802_3_ETHERNET (dev), &hw_addr);
> - else if (nm_device_is_802_11_wireless (dev))
> - nm_device_802_11_wireless_get_address (NM_DEVICE_802_11_WIRELESS (dev), &hw_addr);
> -
> - memcpy (eui, &(hw_addr.ether_addr_octet), sizeof (hw_addr.ether_addr_octet));
> - memmove(eui+5, eui+3, 3);
> - eui[3] = 0xff;
> - eui[4] = 0xfe;
> - eui[0] ^= 2;
> -
> - /* Add the default link-local IPv6 address to a device */
> - 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);
> - g_free (buf);
> -}
> -
> -/*
> - * set_ip4_config_from_resolv_conf
> - *
> - * Add nameservers and search names from a resolv.conf format file.
> - *
> - */
> -static void set_ip4_config_from_resolv_conf (const char *filename, NMIP4Config *ip4_config)
> -{
> - 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);
> + nm_generic_device_add_ip6_link_address (dev);
> }
>
> /*
> @@ -728,7 +586,7 @@
> nm_ip4_config_set_broadcast (sys_data->config, broadcast);
> }
>
> - set_ip4_config_from_resolv_conf (SYSCONFDIR"/resolv.conf", sys_data->config);
> + nm_generic_set_ip4_config_from_resolv_conf (SYSCONFDIR"/resolv.conf", sys_data->config);
> #if 0
> {
> int j;
> @@ -985,4 +843,3 @@
> return 0;
>
> }
> -
> diff -Naur old/NetworkManagerDebian.c new/NetworkManagerDebian.c
> --- old/NetworkManagerDebian.c 2006-07-13 18:40:34.000000000 +0200
> +++ new/NetworkManagerDebian.c 2006-07-20 10:38:29.000000000 +0200
> @@ -31,6 +31,7 @@
> #include <sys/types.h>
> #include <signal.h>
> #include <arpa/inet.h>
> +#include "NetworkManagerGeneric.h"
> #include "NetworkManagerSystem.h"
> #include "NetworkManagerUtils.h"
> #include "nm-device.h"
> @@ -50,6 +51,7 @@
> */
> void nm_system_init (void)
> {
> + nm_generic_init ();
> }
>
> /*
> @@ -60,13 +62,7 @@
> */
> void nm_system_device_add_default_route_via_device (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_add_default_route_via_device_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_add_default_route_via_device (dev);
> }
>
>
> @@ -78,14 +74,7 @@
> */
> void nm_system_device_add_default_route_via_device_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add default dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_default_route_via_device_with_iface (iface);
> }
>
> /*
> @@ -96,14 +85,7 @@
> */
> void nm_system_device_add_route_via_device_with_iface (const char *iface, const char *route)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add %s dev %s", route, iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_route_via_device_with_iface (iface, route);
> }
>
>
> @@ -115,13 +97,7 @@
> */
> void nm_system_device_flush_routes (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_flush_routes_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_routes (dev);
> }
>
> /*
> @@ -132,14 +108,7 @@
> */
> void nm_system_device_flush_routes_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove routing table entries */
> - buf = g_strdup_printf (IP_BINARY_PATH " route flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_routes_with_iface (iface);
> }
>
> /*
> @@ -150,13 +119,7 @@
> */
> void nm_system_device_flush_addresses (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_flush_addresses_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_addresses (dev);
> }
>
>
> @@ -168,14 +131,7 @@
> */
> void nm_system_device_flush_addresses_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove all IP addresses for a device */
> - buf = g_strdup_printf (IP_BINARY_PATH " addr flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_addresses_with_iface (iface);
> }
>
> /*
> @@ -199,7 +155,7 @@
> */
> void nm_system_flush_loopback_routes (void)
> {
> - nm_system_device_flush_routes_with_iface ("lo");
> + nm_generic_flush_loopback_routes ();
> }
>
>
> @@ -211,7 +167,7 @@
> */
> void nm_system_delete_default_route (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " route del default");
> + nm_generic_delete_default_route ();
> }
>
>
> @@ -223,7 +179,7 @@
> */
> void nm_system_flush_arp_cache (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " neigh flush all");
> + nm_generic_flush_arp_cache ();
> }
>
>
> @@ -274,28 +230,7 @@
> */
> void nm_system_device_add_ip6_link_address (NMDevice *dev)
> {
> - char *buf;
> - struct ether_addr hw_addr;
> - unsigned char eui[8];
> -
> - if (nm_device_is_802_3_ethernet (dev))
> - nm_device_802_3_ethernet_get_address (NM_DEVICE_802_3_ETHERNET (dev), &hw_addr);
> - else if (nm_device_is_802_11_wireless (dev))
> - nm_device_802_11_wireless_get_address (NM_DEVICE_802_11_WIRELESS (dev), &hw_addr);
> -
> - memcpy (eui, &(hw_addr.ether_addr_octet), sizeof (hw_addr.ether_addr_octet));
> - memmove(eui+5, eui+3, 3);
> - eui[3] = 0xff;
> - eui[4] = 0xfe;
> - eui[0] ^= 2;
> -
> - /* Add the default link-local IPv6 address to a device */
> - 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);
> - g_free (buf);
> + nm_generic_device_add_ip6_link_address (dev);
> }
>
> typedef struct DebSystemConfigData
> @@ -305,82 +240,6 @@
> } DebSystemConfigData;
>
> /*
> - * set_ip4_config_from_resolv_conf
> - *
> - * Add nameservers and search names from a resolv.conf format file.
> - *
> - */
> -static void set_ip4_config_from_resolv_conf (const char *filename, NMIP4Config *ip4_config)
> -{
> - 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);
> -}
> -
> -
> -/*
> * nm_system_device_get_system_config
> *
> * Retrieve any relevant configuration info for a particular device
> @@ -451,7 +310,7 @@
> }
>
> if (!sys_data->use_dhcp)
> - set_ip4_config_from_resolv_conf (SYSCONFDIR"/resolv.conf", sys_data->config);
> + nm_generic_set_ip4_config_from_resolv_conf (SYSCONFDIR"/resolv.conf", sys_data->config);
>
> #if 0
> nm_debug ("------ Config (%s)", nm_device_get_iface (dev));
> diff -Naur old/NetworkManagerGeneric.c new/NetworkManagerGeneric.c
> --- old/NetworkManagerGeneric.c 1970-01-01 01:00:00.000000000 +0100
> +++ new/NetworkManagerGeneric.c 2006-07-20 20:48:13.000000000 +0200
> @@ -0,0 +1,495 @@
> +/* NetworkManager -- Network link manager
> + *
> + * Timothee Lecomte <timothee lecomte ens fr>
> + *
> + * Heavily based on NetworkManagerRedhat.c by Dan Williams <dcbw redhat com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
> + *
> + * (C) Copyright 2004 Red Hat, Inc.
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include <config.h>
> +#endif
> +
> +#include <stdio.h>
> +#include <sys/types.h>
> +#include <signal.h>
> +#include <arpa/inet.h>
> +#include "NetworkManagerSystem.h"
> +#include "NetworkManagerUtils.h"
> +#include "nm-device.h"
> +#include "nm-device-802-3-ethernet.h"
> +#include "nm-device-802-11-wireless.h"
> +#include "nm-utils.h"
> +
> +/*
> + * nm_generic_init
> + *
> + * Initializes the distribution-specific system backend
> + *
> + */
> +void nm_generic_init (void)
> +{
> + /* Kill any dhclients lying around */
> + nm_system_kill_all_dhcp_daemons ();
> +}
> +
> +/*
> + * nm_generic_device_add_default_route_via_device
> + *
> + * Add default route to the given device
> + *
> + */
> +void nm_generic_device_add_default_route_via_device (NMDevice *dev)
> +{
> + g_return_if_fail (dev != NULL);
> +
> + /* Not really applicable for test devices */
> + if (nm_device_is_test_device (dev))
> + return;
> +
> + nm_system_device_add_default_route_via_device_with_iface (nm_device_get_iface (dev));
> +}
> +
> +
> +/*
> + * nm_generic_device_add_default_route_via_device_with_iface
> + *
> + * Add default route to the given device
> + *
> + */
> +void nm_generic_device_add_default_route_via_device_with_iface (const char *iface)
> +{
> + char *buf;
> +
> + g_return_if_fail (iface != NULL);
> +
> + /* Add default gateway */
> + buf = g_strdup_printf (IP_BINARY_PATH" route add default dev %s", iface);
> + nm_spawn_process (buf);
> + g_free (buf);
> +}
> +
> +/*
> + * nm_generic_device_add_route_via_device_with_iface
> + *
> + * Add route to the given device
> + *
> + */
> +void nm_generic_device_add_route_via_device_with_iface (const char *iface, const char *route)
> +{
> + char *buf;
> +
> + g_return_if_fail (iface != NULL);
> +
> + /* Add default gateway */
> + buf = g_strdup_printf (IP_BINARY_PATH" route add %s dev %s", route, iface);
> + nm_spawn_process (buf);
> + g_free (buf);
> +}
> +
> +
> +/*
> + * nm_generic_device_flush_addresses
> + *
> + * Flush all network addresses associated with a network device
> + *
> + */
> +void nm_generic_device_flush_routes (NMDevice *dev)
> +{
> + g_return_if_fail (dev != NULL);
> +
> + /* Not really applicable for test devices */
> + if (nm_device_is_test_device (dev))
> + return;
> +
> + nm_system_device_flush_routes_with_iface (nm_device_get_iface (dev));
> +}
> +
> +/*
> + * nm_generic_device_flush_routes_with_iface
> + *
> + * Flush all routes associated with a network device
> + *
> + */
> +void nm_generic_device_flush_routes_with_iface (const char *iface)
> +{
> + char *buf;
> +
> + g_return_if_fail (iface != NULL);
> +
> + /* Remove routing table entries */
> + buf = g_strdup_printf (IP_BINARY_PATH" route flush dev %s", iface);
> + nm_spawn_process (buf);
> + g_free (buf);
> +}
> +
> +/*
> + * nm_generic_device_flush_addresses
> + *
> + * Flush all network addresses associated with a network device
> + *
> + */
> +void nm_generic_device_flush_addresses (NMDevice *dev)
> +{
> + g_return_if_fail (dev != NULL);
> +
> + /* Not really applicable for test devices */
> + if (nm_device_is_test_device (dev))
> + return;
> +
> + nm_system_device_flush_addresses_with_iface (nm_device_get_iface (dev));
> +}
> +
> +
> +/*
> + * nm_generic_device_flush_addresses_with_iface
> + *
> + * Flush all network addresses associated with a network device
> + *
> + */
> +void nm_generic_device_flush_addresses_with_iface (const char *iface)
> +{
> + char *buf;
> +
> + g_return_if_fail (iface != NULL);
> +
> + /* Remove all IP addresses for a device */
> + buf = g_strdup_printf (IP_BINARY_PATH" addr flush dev %s", iface);
> + nm_spawn_process (buf);
> + g_free (buf);
> +}
> +
> +/*
> + * nm_generic_enable_loopback
> + *
> + * Bring up the loopback interface
> + *
> + */
> +void nm_generic_enable_loopback (void)
> +{
> + nm_spawn_process (IP_BINARY_PATH" link set dev lo up");
> + nm_spawn_process (IP_BINARY_PATH" addr add 127.0.0.1/8 brd 127.255.255.255 dev lo scope host label loopback");
> +}
> +
> +
> +/*
> + * nm_generic_flush_loopback_routes
> + *
> + * Flush all routes associated with the loopback device, because it
> + * sometimes gets the first route for ZeroConf/Link-Local traffic.
> + *
> + */
> +void nm_generic_flush_loopback_routes (void)
> +{
> +- nm_system_device_flush_routes_with_iface ("lo");
> +}
> +
> +
> +/*
> + * nm_generic_delete_default_route
> + *
> + * Remove the old default route in preparation for a new one
> + *
> + */
> +void nm_generic_delete_default_route (void)
> +{
> + nm_spawn_process (IP_BINARY_PATH" route del default");
> +}
> +
> +
> +/*
> + * nm_generic_flush_arp_cache
> + *
> + * Flush all entries in the arp cache.
> + *
> + */
> +void nm_generic_flush_arp_cache (void)
> +{
> + nm_spawn_process (IP_BINARY_PATH" neigh flush all");
> +}
> +
> +
> +/*
> + * nm_generic_kill_all_dhcp_daemons
> + *
> + * Kill all DHCP daemons currently running, done at startup.
> + *
> + */
> +void nm_generic_kill_all_dhcp_daemons (void)
> +{
> +}
> +
> +
> +/*
> + * nm_generic_update_dns
> + *
> + * Make glibc/nscd aware of any changes to the resolv.conf file by
> + * restarting nscd.
> + *
> + */
> +void nm_generic_update_dns (void)
> +{
> +}
> +
> +
> +/*
> + * nm_generic_restart_mdns_responder
> + *
> + * Restart the multicast DNS responder so that it knows about new
> + * network interfaces and IP addresses.
> + *
> + */
> +void nm_generic_restart_mdns_responder (void)
> +{
> +}
> +
> +
> +/*
> + * nm_generic_device_add_ip6_link_address
> + *
> + * Add a default link-local IPv6 address to a device.
> + *
> + */
> +void nm_generic_device_add_ip6_link_address (NMDevice *dev)
> +{
> + char *buf;
> + struct ether_addr hw_addr;
> + unsigned char eui[8];
> +
> + if (nm_device_is_802_3_ethernet (dev))
> + nm_device_802_3_ethernet_get_address (NM_DEVICE_802_3_ETHERNET (dev), &hw_addr);
> + else if (nm_device_is_802_11_wireless (dev))
> + nm_device_802_11_wireless_get_address (NM_DEVICE_802_11_WIRELESS (dev), &hw_addr);
> +
> + memcpy (eui, &(hw_addr.ether_addr_octet), sizeof (hw_addr.ether_addr_octet));
> + memmove(eui+5, eui+3, 3);
> + eui[3] = 0xff;
> + eui[4] = 0xfe;
> + eui[0] ^= 2;
> +
> + /* Add the default link-local IPv6 address to a device */
> + 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);
> + g_free (buf);
> +}
> +
> +/*
> + * nm_generic_set_ip4_config_from_resolv_conf
> + *
> + * Add nameservers and search names from a resolv.conf format file.
> + *
> + */
> +void nm_generic_set_ip4_config_from_resolv_conf (const char *filename, NMIP4Config *ip4_config)
> +{
> + 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);
> +}
> +
> +
> +/*
> + * nm_generic_device_get_system_config
> + *
> + * Retrieve any relevant configuration info for a particular device
> + * from the system network configuration information. Clear out existing
> + * info before setting stuff too.
> + *
> + */
> +void* nm_generic_device_get_system_config (NMDevice *dev, NMData *app_data)
> +{
> + return NULL;
> +}
> +
> +/*
> + * nm_generic_device_free_system_config
> + *
> + * Free stored system config data
> + *
> + */
> +void nm_generic_device_free_system_config (NMDevice *dev, void *system_config_data)
> +{
> + return;
> +}
> +
> +
> +/*
> + * nm_generic_device_get_use_dhcp
> + *
> + * Return whether the distro-specific system config tells us to use
> + * dhcp for this device.
> + *
> + */
> +gboolean nm_generic_device_get_use_dhcp (NMDevice *dev)
> +{
> + return TRUE;
> +}
> +
> +
> +/*
> + * nm_generic_device_get_disabled
> + *
> + * Return whether the distro-specific system config tells us to use
> + * dhcp for this device.
> + *
> + */
> +gboolean nm_generic_device_get_disabled (NMDevice *dev)
> +{
> + return FALSE;
> +}
> +
> +
> +NMIP4Config *nm_generic_device_new_ip4_system_config (NMDevice *dev)
> +{
> + return NULL;
> +}
> +
> +void nm_generic_deactivate_all_dialup (GSList *list)
> +{
> +}
> +
> +gboolean nm_generic_deactivate_dialup (GSList *list, const char *dialup)
> +{
> + return FALSE;
> +}
> +
> +gboolean nm_generic_activate_dialup (GSList *list, const char *dialup)
> +{
> + return FALSE;
> +}
> +
> +GSList * nm_generic_get_dialup_config (void)
> +{
> + return NULL;
> +}
> +
> +/*
> + * nm_generic_activate_nis
> + *
> + * set up the nis domain and write a yp.conf
> + *
> + */
> +void nm_generic_activate_nis (NMIP4Config *config)
> +{
> +}
> +
> +/*
> + * nm_generic_shutdown_nis
> + *
> + * shutdown ypbind
> + *
> + */
> +void nm_generic_shutdown_nis (void)
> +{
> +}
> +
> +/*
> + * nm_generic_set_hostname
> + *
> + * set the hostname
> + *
> + */
> +void nm_generic_set_hostname (NMIP4Config *config)
> +{
> +}
> +
> +/*
> + * nm_generic_should_modify_resolv_conf
> + *
> + * Can NM update resolv.conf, or is it locked down?
> + */
> +gboolean nm_generic_should_modify_resolv_conf (void)
> +{
> + return TRUE;
> +}
> +
> +
> +/*
> + * nm_generic_get_mtu
> + *
> + * Return a user-provided or system-mandated MTU for this device or zero if
> + * no such MTU is provided.
> + */
> +guint32 nm_generic_get_mtu (NMDevice *dev)
> +{
> + return 0;
> +}
> diff -Naur old/NetworkManagerGeneric.h new/NetworkManagerGeneric.h
> --- old/NetworkManagerGeneric.h 1970-01-01 01:00:00.000000000 +0100
> +++ new/NetworkManagerGeneric.h 2006-07-20 20:37:54.000000000 +0200
> @@ -0,0 +1,93 @@
> +/* NetworkManager -- Network link manager
> + *
> + * Timothee Lecomte <timothee lecomte ens fr>
> + *
> + * Heavily based on NetworkManagerSystem.h by Dan Williams <dcbw redhat com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
> + *
> + * (C) Copyright 2004 Red Hat, Inc.
> + */
> +
> +#ifndef NETWORK_MANAGER_GENERIC_H
> +#define NETWORK_MANAGER_GENERIC_H
> +
> +#include <glib.h>
> +#include "nm-device.h"
> +#include "nm-ip4-config.h"
> +#include "nm-named-manager.h"
> +
> +struct NMData;
> +
> +/* Prototypes for system/distribution dependent functions,
> + * implemented in the backend files in backends/ directory
> + */
> +
> +void nm_generic_init (void);
> +gboolean nm_generic_device_has_active_routes (NMDevice *dev);
> +
> +void nm_generic_device_flush_routes (NMDevice *dev);
> +void nm_generic_device_flush_routes_with_iface (const char *iface);
> +
> +void nm_generic_device_add_default_route_via_device(NMDevice *dev);
> +void nm_generic_device_add_default_route_via_device_with_iface(const char *iface);
> +
> +void nm_generic_device_add_route_via_device_with_iface (const char *iface, const char *route);
> +
> +void nm_generic_device_flush_addresses (NMDevice *dev);
> +void nm_generic_device_flush_addresses_with_iface (const char *iface);
> +
> +void nm_generic_enable_loopback (void);
> +void nm_generic_flush_loopback_routes (void);
> +void nm_generic_delete_default_route (void);
> +void nm_generic_flush_arp_cache (void);
> +void nm_generic_kill_all_dhcp_daemons (void);
> +void nm_generic_update_dns (void);
> +void nm_generic_restart_mdns_responder (void);
> +void nm_generic_device_add_ip6_link_address (NMDevice *dev);
> +
> +void nm_generic_set_ip4_config_from_resolv_conf (const char *filename, NMIP4Config *ip4_config);
> +void * nm_generic_device_get_system_config (NMDevice *dev, struct NMData *data);
> +void nm_generic_device_free_system_config (NMDevice *dev, void *system_config_data);
> +NMIP4Config * nm_generic_device_new_ip4_system_config (NMDevice *dev);
> +
> +gboolean nm_generic_device_get_use_dhcp (NMDevice *dev);
> +
> +gboolean nm_generic_device_get_disabled (NMDevice *dev);
> +
> +gboolean nm_generic_device_set_from_ip4_config (NMDevice *dev);
> +gboolean nm_generic_vpn_device_set_from_ip4_config (NMNamedManager *named, NMDevice *active_device, const char *iface, NMIP4Config *config, char **routes, int num_routes);
> +gboolean nm_generic_vpn_device_unset_from_ip4_config (NMNamedManager *named, NMDevice *active_device, const char *iface, NMIP4Config *config);
> +
> +gboolean nm_generic_device_set_up_down (NMDevice *dev, gboolean up);
> +gboolean nm_generic_device_set_up_down_with_iface (NMDevice *dev, const char *iface, gboolean up);
> +
> +gboolean nm_generic_device_update_resolv_conf (void *data, int len, const char *domain_name);
> +
> +GSList * nm_generic_get_dialup_config (void);
> +void nm_generic_deactivate_all_dialup (GSList *list);
> +gboolean nm_generic_activate_dialup (GSList *list, const char *dialup);
> +gboolean nm_generic_deactivate_dialup (GSList *list, const char *dialup);
> +
> +void nm_generic_set_hostname (NMIP4Config *config);
> +void nm_generic_activate_nis (NMIP4Config *config);
> +void nm_generic_shutdown_nis (void);
> +
> +void nm_generic_set_mtu (NMDevice *dev);
> +guint32 nm_generic_get_mtu (NMDevice *dev);
> +
> +gboolean nm_generic_should_modify_resolv_conf (void);
> +
> +#endif
> diff -Naur old/NetworkManagerGentoo.c new/NetworkManagerGentoo.c
> --- old/NetworkManagerGentoo.c 2006-07-13 18:40:34.000000000 +0200
> +++ new/NetworkManagerGentoo.c 2006-07-20 20:50:37.000000000 +0200
> @@ -32,6 +32,7 @@
> #include <signal.h>
>
> #include <arpa/inet.h>
> +#include "NetworkManagerGeneric.h"
> #include "NetworkManagerSystem.h"
> #include "NetworkManagerUtils.h"
> #include "nm-device.h"
> @@ -48,8 +49,7 @@
> */
> void nm_system_init (void)
> {
> - /* Kill any dhclients lying around */
> - nm_system_kill_all_dhcp_daemons ();
> + nm_generic_init ();
> }
>
> /*
> @@ -60,12 +60,7 @@
> */
> void nm_system_device_flush_routes (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - g_return_if_fail (nm_device_is_test_device (dev) != TRUE);
> -
> - nm_system_device_flush_routes_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_routes (dev);
> }
>
> /*
> @@ -76,14 +71,7 @@
> */
> void nm_system_device_flush_routes_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove routing table entries */
> - buf = g_strdup_printf (IP_BINARY_PATH " route flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_routes_with_iface (iface);
> }
>
> /*
> @@ -108,12 +96,7 @@
> */
> void nm_system_device_flush_addresses (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - g_return_if_fail (nm_device_is_test_device (dev) != TRUE);
> -
> - nm_system_device_flush_addresses_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_addresses (dev);
> }
>
> /*
> @@ -124,14 +107,7 @@
> */
> void nm_system_device_flush_addresses_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove all IP addresses for a device */
> - buf = g_strdup_printf (IP_BINARY_PATH " addr flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_addresses_with_iface (iface);
> }
>
> #if 0
> @@ -154,14 +130,7 @@
> */
> void nm_system_device_add_route_via_device_with_iface (const char *iface, const char *route)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add %s dev %s", route, iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_route_via_device_with_iface (iface, route);
> }
>
>
> @@ -188,7 +157,7 @@
> */
> void nm_system_flush_loopback_routes (void)
> {
> - nm_system_device_flush_routes_with_iface ("lo");
> + nm_generic_flush_loopback_routes ();
> }
>
> /*
> @@ -199,7 +168,7 @@
> */
> void nm_system_delete_default_route (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " route del default");
> + nm_generic_delete_default_route ();
> }
>
> /*
> @@ -210,7 +179,7 @@
> */
> void nm_system_flush_arp_cache (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " neigh flush all");
> + nm_generic_flush_arp_cache ();
> }
>
>
> @@ -271,28 +240,7 @@
> */
> void nm_system_device_add_ip6_link_address (NMDevice *dev)
> {
> - char *buf;
> - struct ether_addr hw_addr;
> - unsigned char eui[8];
> -
> - if (nm_device_is_802_3_ethernet (dev))
> - nm_device_802_3_ethernet_get_address (NM_DEVICE_802_3_ETHERNET (dev), &hw_addr);
> - else if (nm_device_is_802_11_wireless (dev))
> - nm_device_802_11_wireless_get_address (NM_DEVICE_802_11_WIRELESS (dev), &hw_addr);
> -
> - /* Shouldnt we use sizeof(eui) ? In theory, obviously */
> - memcpy (eui, &(hw_addr.ether_addr_octet), sizeof (hw_addr.ether_addr_octet));
> - memmove (eui+5, eui+3, 3);
> - eui[3] = 0xff;
> - eui[4] = 0xfe;
> - eui[0] ^= 2;
> -
> - /* Add the default link-local IPv6 address to a device */
> - 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);
> - g_free(buf);
> + nm_generic_device_add_ip6_link_address (dev);
> }
>
> typedef struct GentooSystemConfigData
> @@ -454,12 +402,7 @@
> */
> void nm_system_device_add_default_route_via_device (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - g_return_if_fail (nm_device_is_test_device (dev) != TRUE);
> -
> - nm_system_device_add_default_route_via_device_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_add_default_route_via_device (dev);
> }
>
> /*
> @@ -470,14 +413,7 @@
> */
> void nm_system_device_add_default_route_via_device_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add default dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_default_route_via_device_with_iface (iface);
> }
>
> void nm_system_device_free_system_config (NMDevice *dev, void *system_config_data)
> diff -Naur old/NetworkManagerPaldo.c new/NetworkManagerPaldo.c
> --- old/NetworkManagerPaldo.c 2006-07-13 18:40:34.000000000 +0200
> +++ new/NetworkManagerPaldo.c 2006-07-20 20:28:58.000000000 +0200
> @@ -31,6 +31,7 @@
> #include <signal.h>
> #include <arpa/inet.h>
> #include <glib/gkeyfile.h>
> +#include "NetworkManagerGeneric.h"
> #include "NetworkManagerSystem.h"
> #include "NetworkManagerUtils.h"
> #include "nm-device.h"
> @@ -45,6 +46,7 @@
> */
> void nm_system_init (void)
> {
> + nm_generic_init ();
> }
>
>
> @@ -56,13 +58,7 @@
> */
> void nm_system_device_flush_routes (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_flush_routes_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_routes (dev);
> }
>
>
> @@ -74,14 +70,7 @@
> */
> void nm_system_device_flush_routes_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove routing table entries */
> - buf = g_strdup_printf (IP_BINARY_PATH " route flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_routes_with_iface (iface);
> }
>
>
> @@ -93,13 +82,7 @@
> */
> void nm_system_device_add_default_route_via_device (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_add_default_route_via_device_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_add_default_route_via_device (dev);
> }
>
>
> @@ -111,14 +94,7 @@
> */
> void nm_system_device_add_default_route_via_device_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add default dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_default_route_via_device_with_iface (iface);
> }
>
>
> @@ -130,14 +106,7 @@
> */
> void nm_system_device_add_route_via_device_with_iface (const char *iface, const char *route)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add %s dev %s", route, iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_route_via_device_with_iface (iface, route);
> }
>
>
> @@ -162,13 +131,7 @@
> */
> void nm_system_device_flush_addresses (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_flush_addresses_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_addresses (dev);
> }
>
>
> @@ -180,14 +143,7 @@
> */
> void nm_system_device_flush_addresses_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove all IP addresses for a device */
> - buf = g_strdup_printf (IP_BINARY_PATH " addr flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_addresses_with_iface (iface);
> }
>
>
> @@ -225,7 +181,7 @@
> */
> void nm_system_delete_default_route (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " route del default");
> + nm_generic_delete_default_route ();
> }
>
>
> @@ -237,7 +193,7 @@
> */
> void nm_system_flush_arp_cache (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " neigh flush all");
> + nm_generic_flush_arp_cache ();
> }
>
>
> @@ -285,27 +241,7 @@
> */
> void nm_system_device_add_ip6_link_address (NMDevice *dev)
> {
> - char *buf;
> - struct ether_addr hw_addr;
> - unsigned char eui[8];
> -
> - if (nm_device_is_802_3_ethernet (dev))
> - nm_device_802_3_ethernet_get_address (NM_DEVICE_802_3_ETHERNET (dev), &hw_addr);
> - else if (nm_device_is_802_11_wireless (dev))
> - nm_device_802_11_wireless_get_address (NM_DEVICE_802_11_WIRELESS (dev), &hw_addr);
> -
> - memcpy (eui, &(hw_addr.ether_addr_octet), sizeof (hw_addr.ether_addr_octet));
> - memmove (eui+5, eui+3, 3);
> - eui[3] = 0xff;
> - eui[4] = 0xfe;
> - eui[0] ^= 2;
> -
> - /* Add the default link-local IPv6 address to a device */
> - 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);
> - g_free (buf);
> + nm_generic_device_add_ip6_link_address (dev);
> }
>
>
> diff -Naur old/NetworkManagerRedHat.c new/NetworkManagerRedHat.c
> --- old/NetworkManagerRedHat.c 2006-07-13 18:40:34.000000000 +0200
> +++ new/NetworkManagerRedHat.c 2006-07-20 10:38:06.000000000 +0200
> @@ -27,6 +27,7 @@
> #include <sys/types.h>
> #include <signal.h>
> #include <arpa/inet.h>
> +#include "NetworkManagerGeneric.h"
> #include "NetworkManagerSystem.h"
> #include "NetworkManagerUtils.h"
> #include "nm-device.h"
> @@ -44,8 +45,7 @@
> */
> void nm_system_init (void)
> {
> - /* Kill any dhclients lying around */
> - nm_system_kill_all_dhcp_daemons ();
> + nm_generic_init ();
> }
>
>
> @@ -57,13 +57,7 @@
> */
> void nm_system_device_flush_routes (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_flush_routes_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_routes (dev);
> }
>
>
> @@ -75,14 +69,7 @@
> */
> void nm_system_device_flush_routes_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove routing table entries */
> - buf = g_strdup_printf (IP_BINARY_PATH " route flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_routes_with_iface (iface);
> }
>
>
> @@ -94,13 +81,7 @@
> */
> void nm_system_device_add_default_route_via_device (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_add_default_route_via_device_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_add_default_route_via_device (dev);
> }
>
>
> @@ -112,14 +93,7 @@
> */
> void nm_system_device_add_default_route_via_device_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add default dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_default_route_via_device_with_iface (iface);
> }
>
>
> @@ -131,14 +105,7 @@
> */
> void nm_system_device_add_route_via_device_with_iface (const char *iface, const char *route)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add %s dev %s", route, iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_route_via_device_with_iface (iface, route);
> }
>
>
> @@ -163,13 +130,7 @@
> */
> void nm_system_device_flush_addresses (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_flush_addresses_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_addresses (dev);
> }
>
>
> @@ -181,14 +142,7 @@
> */
> void nm_system_device_flush_addresses_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove all IP addresses for a device */
> - buf = g_strdup_printf (IP_BINARY_PATH " addr flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_addresses_with_iface (iface);
> }
>
>
> @@ -213,8 +167,7 @@
> */
> void nm_system_enable_loopback (void)
> {
> - 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");
> + nm_generic_enable_loopback ();
> }
>
>
> @@ -227,7 +180,7 @@
> */
> void nm_system_flush_loopback_routes (void)
> {
> - nm_system_device_flush_routes_with_iface ("lo");
> + nm_generic_flush_loopback_routes ();
> }
>
>
> @@ -239,7 +192,7 @@
> */
> void nm_system_delete_default_route (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " route del default");
> + nm_generic_delete_default_route ();
> }
>
>
> @@ -251,7 +204,7 @@
> */
> void nm_system_flush_arp_cache (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " neigh flush all");
> + nm_generic_flush_arp_cache ();
> }
>
>
> @@ -320,27 +273,7 @@
> */
> void nm_system_device_add_ip6_link_address (NMDevice *dev)
> {
> - char *buf;
> - struct ether_addr hw_addr;
> - unsigned char eui[8];
> -
> - if (nm_device_is_802_3_ethernet (dev))
> - nm_device_802_3_ethernet_get_address (NM_DEVICE_802_3_ETHERNET (dev), &hw_addr);
> - else if (nm_device_is_802_11_wireless (dev))
> - nm_device_802_11_wireless_get_address (NM_DEVICE_802_11_WIRELESS (dev), &hw_addr);
> -
> - memcpy (eui, &(hw_addr.ether_addr_octet), sizeof (hw_addr.ether_addr_octet));
> - memmove (eui+5, eui+3, 3);
> - eui[3] = 0xff;
> - eui[4] = 0xfe;
> - eui[0] ^= 2;
> -
> - /* Add the default link-local IPv6 address to a device */
> - 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);
> - g_free (buf);
> + nm_generic_device_add_ip6_link_address (dev);
> }
>
>
> @@ -376,82 +309,6 @@
>
>
> /*
> - * set_ip4_config_from_resolv_conf
> - *
> - * Add nameservers and search names from a resolv.conf format file.
> - *
> - */
> -static void set_ip4_config_from_resolv_conf (const char *filename, NMIP4Config *ip4_config)
> -{
> - 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);
> -}
> -
> -
> -/*
> * nm_system_device_get_system_config
> *
> * Read in the config file for a device.
> @@ -582,7 +439,7 @@
> {
> char *filename = g_strdup_printf (SYSCONFDIR"/sysconfig/networking/profiles/%s/resolv.conf", cur_profile_name);
>
> - set_ip4_config_from_resolv_conf (filename, sys_data->config);
> + nm_generic_set_ip4_config_from_resolv_conf (filename, sys_data->config);
> g_free (filename);
> g_free (cur_profile_name);
> }
> diff -Naur old/NetworkManagerSlackware.c new/NetworkManagerSlackware.c
> --- old/NetworkManagerSlackware.c 2006-07-13 18:40:34.000000000 +0200
> +++ new/NetworkManagerSlackware.c 2006-07-20 10:31:16.000000000 +0200
> @@ -27,6 +27,7 @@
> #include <stdio.h>
> #include <sys/types.h>
> #include <signal.h>
> +#include "NetworkManagerGeneric.h"
> #include "NetworkManagerSystem.h"
> #include "NetworkManagerUtils.h"
> #include "nm-device.h"
> @@ -46,7 +47,7 @@
> */
> void nm_system_init (void)
> {
> - nm_system_kill_all_dhcp_daemons();
> + nm_generic_init ();
> }
>
> /*
> @@ -57,13 +58,7 @@
> */
> void nm_system_device_flush_routes (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_flush_routes_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_routes (dev);
> }
>
> /*
> @@ -74,14 +69,7 @@
> */
> void nm_system_device_flush_routes_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove routing table entries */
> - buf = g_strdup_printf (IP_BINARY_PATH " route flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_routes_with_iface (iface);
> }
>
>
> @@ -93,13 +81,7 @@
> */
> void nm_system_device_flush_addresses (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_flush_addresses_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_addresses (dev);
> }
>
> /*
> @@ -110,14 +92,7 @@
> */
> void nm_system_device_flush_addresses_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove all IP addresses for a device */
> - buf = g_strdup_printf (IP_BINARY_PATH " addr flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_addresses_with_iface (iface);
> }
>
> /*
> @@ -169,8 +144,7 @@
> */
> void nm_system_enable_loopback (void)
> {
> - 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 label loopback");
> + nm_generic_enable_loopback ();
> }
>
>
> @@ -182,7 +156,7 @@
> */
> void nm_system_delete_default_route (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " route del default");
> + nm_generic_delete_default_route ();
> }
>
>
> @@ -230,27 +204,7 @@
> */
> void nm_system_device_add_ip6_link_address (NMDevice *dev)
> {
> - char *buf;
> - struct ether_addr hw_addr;
> - unsigned char eui[8];
> -
> - if (nm_device_is_802_3_ethernet (dev))
> - nm_device_802_3_ethernet_get_address (NM_DEVICE_802_3_ETHERNET (dev), &hw_addr);
> - else if (nm_device_is_802_11_wireless (dev))
> - nm_device_802_11_wireless_get_address (NM_DEVICE_802_11_WIRELESS (dev), &hw_addr);
> -
> - memcpy (eui, &(hw_addr.ether_addr_octet), sizeof (hw_addr.ether_addr_octet));
> - memmove (eui+5, eui+3, 3);
> - eui[3] = 0xff;
> - eui[4] = 0xfe;
> - eui[0] ^= 2;
> -
> - /* Add the default link-local IPv6 address to a device */
> - 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);
> - g_free (buf);
> + nm_generic_device_add_ip6_link_address (dev);
> }
>
> /*
> @@ -261,14 +215,7 @@
> */
> void nm_system_device_add_route_via_device_with_iface (const char *iface, const char *route)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add %s dev %s", route, iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_route_via_device_with_iface (iface, route);
> }
>
> /*
> @@ -279,13 +226,7 @@
> */
> void nm_system_device_add_default_route_via_device (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_add_default_route_via_device_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_add_default_route_via_device (dev);
> }
>
> /*
> @@ -296,14 +237,7 @@
> */
> void nm_system_device_add_default_route_via_device_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add default dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_default_route_via_device_with_iface (iface);
> }
>
>
> @@ -316,7 +250,7 @@
> */
> void nm_system_flush_loopback_routes (void)
> {
> - nm_system_device_flush_routes_with_iface ("lo");
> + nm_generic_flush_loopback_routes ();
> }
>
>
> @@ -328,7 +262,7 @@
> */
> void nm_system_flush_arp_cache (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " neigh flush all");
> + nm_generic_flush_arp_cache ();
> }
>
> void nm_system_deactivate_all_dialup (GSList *list)
> diff -Naur old/NetworkManagerSuSE.c new/NetworkManagerSuSE.c
> --- old/NetworkManagerSuSE.c 2006-07-13 18:40:34.000000000 +0200
> +++ new/NetworkManagerSuSE.c 2006-07-20 20:52:00.000000000 +0200
> @@ -33,6 +33,7 @@
> #include <sys/stat.h>
> #include <arpa/inet.h>
>
> +#include "NetworkManagerGeneric.h"
> #include "NetworkManagerSystem.h"
> #include "NetworkManagerUtils.h"
> #include "NetworkManagerMain.h"
> @@ -62,8 +63,7 @@
> */
> void nm_system_init (void)
> {
> - /* Kill any dhclients lying around */
> - nm_system_kill_all_dhcp_daemons ();
> + nm_generic_init ();
> }
>
>
> @@ -75,13 +75,7 @@
> */
> void nm_system_device_flush_routes (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_flush_routes_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_routes (dev);
> }
>
>
> @@ -93,14 +87,7 @@
> */
> void nm_system_device_flush_routes_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove routing table entries */
> - buf = g_strdup_printf (IP_BINARY_PATH " route flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_routes_with_iface (iface);
> }
>
>
> @@ -112,13 +99,7 @@
> */
> void nm_system_device_add_default_route_via_device (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_add_default_route_via_device_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_add_default_route_via_device (dev);
> }
>
>
> @@ -130,14 +111,7 @@
> */
> void nm_system_device_add_default_route_via_device_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add default dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_default_route_via_device_with_iface (iface);
> }
>
>
> @@ -149,14 +123,7 @@
> */
> void nm_system_device_add_route_via_device_with_iface (const char *iface, const char *route)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Add default gateway */
> - buf = g_strdup_printf (IP_BINARY_PATH " route add %s dev %s", route, iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_add_route_via_device_with_iface (iface, route);
> }
>
>
> @@ -181,13 +148,7 @@
> */
> void nm_system_device_flush_addresses (NMDevice *dev)
> {
> - g_return_if_fail (dev != NULL);
> -
> - /* Not really applicable for test devices */
> - if (nm_device_is_test_device (dev))
> - return;
> -
> - nm_system_device_flush_addresses_with_iface (nm_device_get_iface (dev));
> + nm_generic_device_flush_addresses (dev);
> }
>
>
> @@ -199,14 +160,7 @@
> */
> void nm_system_device_flush_addresses_with_iface (const char *iface)
> {
> - char *buf;
> -
> - g_return_if_fail (iface != NULL);
> -
> - /* Remove all IP addresses for a device */
> - buf = g_strdup_printf (IP_BINARY_PATH " addr flush dev %s", iface);
> - nm_spawn_process (buf);
> - g_free (buf);
> + nm_generic_device_flush_addresses_with_iface (iface);
> }
>
>
> @@ -218,8 +172,7 @@
> */
> void nm_system_enable_loopback (void)
> {
> - 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");
> + nm_generic_enable_loopback ();
> }
>
>
> @@ -232,7 +185,7 @@
> */
> void nm_system_flush_loopback_routes (void)
> {
> - nm_system_device_flush_routes_with_iface ("lo");
> + nm_generic_flush_loopback_routes ();
> }
>
>
> @@ -244,7 +197,7 @@
> */
> void nm_system_delete_default_route (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " route del default");
> + nm_generic_delete_default_route ();
> }
>
>
> @@ -256,7 +209,7 @@
> */
> void nm_system_flush_arp_cache (void)
> {
> - nm_spawn_process (IP_BINARY_PATH " neigh flush all");
> + nm_generic_flush_arp_cache ();
> }
>
>
> @@ -328,27 +281,7 @@
> */
> void nm_system_device_add_ip6_link_address (NMDevice *dev)
> {
> - char *buf;
> - struct ether_addr hw_addr;
> - unsigned char eui[8];
> -
> - if (nm_device_is_802_3_ethernet (dev))
> - nm_device_802_3_ethernet_get_address (NM_DEVICE_802_3_ETHERNET (dev), &hw_addr);
> - else if (nm_device_is_802_11_wireless (dev))
> - nm_device_802_11_wireless_get_address (NM_DEVICE_802_11_WIRELESS (dev), &hw_addr);
> -
> - memcpy (eui, &(hw_addr.ether_addr_octet), sizeof (hw_addr.ether_addr_octet));
> - memmove (eui+5, eui+3, 3);
> - eui[3] = 0xff;
> - eui[4] = 0xfe;
> - eui[0] ^= 2;
> -
> - /* Add the default link-local IPv6 address to a device */
> - 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);
> - g_free (buf);
> + nm_generic_device_add_ip6_link_address (dev);
> }
>
>
> @@ -360,81 +293,6 @@
> guint32 mtu;
> } SuSEDeviceConfigData;
>
> -/*
> - * set_ip4_config_from_resolv_conf
> - *
> - * Add nameservers and search names from a resolv.conf format file.
> - *
> - */
> -static void set_ip4_config_from_resolv_conf (const char *filename, NMIP4Config *ip4_config)
> -{
> - 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);
> -}
> -
>
> /*
> * nm_system_device_get_system_config
> @@ -746,7 +604,7 @@
> nm_info ("Network configuration for device '%s' does not specify a gateway but is "
> "statically configured (non-DHCP).", nm_device_get_iface (dev));
>
> - set_ip4_config_from_resolv_conf (SYSCONFDIR"/resolv.conf", sys_data->config);
> + nm_generic_set_ip4_config_from_resolv_conf (SYSCONFDIR"/resolv.conf", sys_data->config);
> }
>
> out:
> _______________________________________________
> NetworkManager-list mailing list
> NetworkManager-list gnome org
> http://mail.gnome.org/mailman/listinfo/networkmanager-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]