2004-08-25 21:07:19 +00:00
|
|
|
/* NetworkManager -- Network link manager
|
|
|
|
|
*
|
|
|
|
|
* Matthew Garrett <mjg59@srcf.ucam.org>
|
|
|
|
|
*
|
|
|
|
|
* 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.
|
|
|
|
|
*
|
2004-11-11 02:24:04 +00:00
|
|
|
* (C) Copyright 2004 Tom Parker
|
2004-08-25 21:07:19 +00:00
|
|
|
* (C) Copyright 2004 Matthew Garrett
|
|
|
|
|
* (C) Copyright 2004 Red Hat, Inc.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
#include <signal.h>
|
2004-10-19 02:27:04 +00:00
|
|
|
#include <arpa/inet.h>
|
2004-08-25 21:07:19 +00:00
|
|
|
#include "NetworkManagerSystem.h"
|
|
|
|
|
#include "NetworkManagerUtils.h"
|
|
|
|
|
#include "NetworkManagerDevice.h"
|
2005-08-16 17:16:40 +00:00
|
|
|
#include "NetworkManagerDialup.h"
|
2004-11-11 02:24:04 +00:00
|
|
|
#include "interface_parser.h"
|
2005-04-04 16:24:36 +00:00
|
|
|
#include "nm-utils.h"
|
2004-08-25 21:07:19 +00:00
|
|
|
|
2004-11-11 02:24:04 +00:00
|
|
|
#define ARPING "/usr/sbin/arping"
|
|
|
|
|
|
2004-09-07 17:22:04 +00:00
|
|
|
/*
|
|
|
|
|
* nm_system_init
|
|
|
|
|
*
|
|
|
|
|
* Initializes the distribution-specific system backend
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_init (void)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2004-08-25 21:07:19 +00:00
|
|
|
/*
|
2005-04-28 01:37:37 +00:00
|
|
|
* nm_system_device_add_default_route_via_device
|
2004-08-25 21:07:19 +00:00
|
|
|
*
|
2005-04-28 01:37:37 +00:00
|
|
|
* Add default route to the given device
|
2004-08-25 21:07:19 +00:00
|
|
|
*
|
|
|
|
|
*/
|
2005-04-28 01:37:37 +00:00
|
|
|
void nm_system_device_add_default_route_via_device (NMDevice *dev)
|
2004-08-25 21:07:19 +00:00
|
|
|
{
|
|
|
|
|
g_return_if_fail (dev != NULL);
|
|
|
|
|
|
2004-08-31 Dan Williams <dcbw@redhat.com>
* Remove 'debug' extern global from all files since we now
use syslog()
* src/NetworkManager.[ch]
- Break out routine that get the net.interface property from HAL,
removing that logic from nm_create_device_and_add_to_list()
- (nm_create_device_and_add_to_list): make this a bit more general so
it doesn't do the talking to HAL. Also add arguments to facilitate
the create of test devices.
- (nm_data_mark_state_changed): rename from nm_data_set_state_modified()
- (nm_data_new, main, nm_print_usage): add new argument "--enable-test-devices"
which makes NetworkManager listen for dbus commands to create test
devices, which have no backing hardware. Use when you're on a plane
for example, and/or forgot your wireless card at home. Test devices
_cannot_ be created unless NM is started with --enable-test-devices.
* src/NetworkManagerDbus.[ch]
- New "getLinkActive" method for devices
- New "setLinkActive" method for devices (only works on test devices)
- New "createTestDevice" method on NetworkManager object to create a test
device of a specified type (ie wired, wireless). UDI is created from
scratch, as is the interface name. Only works when NM is started with
--enable-test-devices switch.
- New "removeTestDevice" method on NetworkManager object which removes a
test device. Only works when NM is started with --enable-test-devices
* src/NetworkManagerDevice.[ch]
- Logic to facilitate test devices. Add variables to NMDevice struct to indicate
whether a device is a test device or not, and what its link status is.
- Deal with test devices in most functions. For those that work directly on hardware
special-case test devices.
- (nm_device_new): don't create a test device if test devices weren't enabled on the
command-line.
- (nm_device_update_link_active): split out logic for wired and wireless device link
checking to separate functions to facilitate test device link checking.
- (nm_device_set_enc_key): Since some drivers for wireless cards are daft and
don't make a distinction between System Authentication and Encryption
(namely Cisco aironet), we use Open System auth when setting a WEP key
on the card. We don't deal with Shared Key auth yet.
- (nm_device_activation_worker): split the activation cancel check logic out into
a separate routine nm_device_activation_cancel_if_needed()
- (nm_device_activation_signal_cancel): rename from nm_device_activation_cancel()
- (nm_device_fake_ap_list): Test wireless devices obviously cannot scan, so create
a list of fake access points that they can "see"
- (nm_device_is_test_device): return whether or not a device is a test device
* src/NetworkManagerPolicy.c
- (nm_policy_get_best_device): attempt to deal with wireless network selection,
previously if you "locked"/forced NM to use a wireless device but then
selected a wireless network for NM to use, it would switch to a wired device.
So, if the active device is wireless and it has a "forced" best AP, use it
if the "forced" best AP is still valid
- (nm_state_modification_monitor): deal with NULL best devices, for example
there were no usable network devices, or the last one was removed
* src/backends/NetworkManager*.c
- Deal with test devices, mostly just return success for operations like getting
a DHCP address
* test/nmtestdevices.c
- Test tool to create/remove/link-switch test devices
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@112 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
2004-08-31 16:09:15 +00:00
|
|
|
/* Not really applicable for test devices */
|
|
|
|
|
if (nm_device_is_test_device (dev))
|
|
|
|
|
return;
|
|
|
|
|
|
2005-04-28 01:37:37 +00:00
|
|
|
nm_system_device_add_default_route_via_device_with_iface (nm_device_get_iface (dev));
|
2004-12-22 18:42:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
2005-04-28 01:37:37 +00:00
|
|
|
* nm_system_device_add_default_route_via_device_with_iface
|
2004-12-22 18:42:37 +00:00
|
|
|
*
|
|
|
|
|
* Add default route to the given device
|
|
|
|
|
*
|
|
|
|
|
*/
|
2005-04-28 01:37:37 +00:00
|
|
|
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 ("/sbin/ip route add default dev %s", iface);
|
|
|
|
|
nm_spawn_process (buf);
|
|
|
|
|
g_free (buf);
|
|
|
|
|
}
|
|
|
|
|
|
2005-05-16 12:57:08 +00:00
|
|
|
/*
|
|
|
|
|
* nm_system_device_add_route_via_device_with_iface
|
|
|
|
|
*
|
|
|
|
|
* Add route to the given device
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
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 ("/sbin/ip route add %s dev %s", route, iface);
|
|
|
|
|
nm_spawn_process (buf);
|
|
|
|
|
g_free (buf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2005-04-28 01:37:37 +00:00
|
|
|
/*
|
|
|
|
|
* nm_system_device_flush_addresses
|
|
|
|
|
*
|
|
|
|
|
* Flush all network addresses associated with a network device
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_device_flush_routes (NMDevice *dev)
|
2004-12-22 18:42:37 +00:00
|
|
|
{
|
|
|
|
|
char *buf;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (dev != NULL);
|
|
|
|
|
|
|
|
|
|
/* Not really applicable for test devices */
|
|
|
|
|
if (nm_device_is_test_device (dev))
|
|
|
|
|
return;
|
|
|
|
|
|
2005-04-28 01:37:37 +00:00
|
|
|
nm_system_device_flush_routes_with_iface (nm_device_get_iface (dev));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* nm_system_device_flush_routes_with_iface
|
|
|
|
|
*
|
|
|
|
|
* Flush all routes associated with a network device
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
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 ("/sbin/ip route flush dev %s", iface);
|
2004-12-22 18:42:37 +00:00
|
|
|
nm_spawn_process (buf);
|
|
|
|
|
g_free (buf);
|
2004-08-25 21:07:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* nm_system_device_flush_addresses
|
|
|
|
|
*
|
|
|
|
|
* Flush all network addresses associated with a network device
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_device_flush_addresses (NMDevice *dev)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (dev != NULL);
|
|
|
|
|
|
2004-08-31 Dan Williams <dcbw@redhat.com>
* Remove 'debug' extern global from all files since we now
use syslog()
* src/NetworkManager.[ch]
- Break out routine that get the net.interface property from HAL,
removing that logic from nm_create_device_and_add_to_list()
- (nm_create_device_and_add_to_list): make this a bit more general so
it doesn't do the talking to HAL. Also add arguments to facilitate
the create of test devices.
- (nm_data_mark_state_changed): rename from nm_data_set_state_modified()
- (nm_data_new, main, nm_print_usage): add new argument "--enable-test-devices"
which makes NetworkManager listen for dbus commands to create test
devices, which have no backing hardware. Use when you're on a plane
for example, and/or forgot your wireless card at home. Test devices
_cannot_ be created unless NM is started with --enable-test-devices.
* src/NetworkManagerDbus.[ch]
- New "getLinkActive" method for devices
- New "setLinkActive" method for devices (only works on test devices)
- New "createTestDevice" method on NetworkManager object to create a test
device of a specified type (ie wired, wireless). UDI is created from
scratch, as is the interface name. Only works when NM is started with
--enable-test-devices switch.
- New "removeTestDevice" method on NetworkManager object which removes a
test device. Only works when NM is started with --enable-test-devices
* src/NetworkManagerDevice.[ch]
- Logic to facilitate test devices. Add variables to NMDevice struct to indicate
whether a device is a test device or not, and what its link status is.
- Deal with test devices in most functions. For those that work directly on hardware
special-case test devices.
- (nm_device_new): don't create a test device if test devices weren't enabled on the
command-line.
- (nm_device_update_link_active): split out logic for wired and wireless device link
checking to separate functions to facilitate test device link checking.
- (nm_device_set_enc_key): Since some drivers for wireless cards are daft and
don't make a distinction between System Authentication and Encryption
(namely Cisco aironet), we use Open System auth when setting a WEP key
on the card. We don't deal with Shared Key auth yet.
- (nm_device_activation_worker): split the activation cancel check logic out into
a separate routine nm_device_activation_cancel_if_needed()
- (nm_device_activation_signal_cancel): rename from nm_device_activation_cancel()
- (nm_device_fake_ap_list): Test wireless devices obviously cannot scan, so create
a list of fake access points that they can "see"
- (nm_device_is_test_device): return whether or not a device is a test device
* src/NetworkManagerPolicy.c
- (nm_policy_get_best_device): attempt to deal with wireless network selection,
previously if you "locked"/forced NM to use a wireless device but then
selected a wireless network for NM to use, it would switch to a wired device.
So, if the active device is wireless and it has a "forced" best AP, use it
if the "forced" best AP is still valid
- (nm_state_modification_monitor): deal with NULL best devices, for example
there were no usable network devices, or the last one was removed
* src/backends/NetworkManager*.c
- Deal with test devices, mostly just return success for operations like getting
a DHCP address
* test/nmtestdevices.c
- Test tool to create/remove/link-switch test devices
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@112 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
2004-08-31 16:09:15 +00:00
|
|
|
/* Not really applicable for test devices */
|
|
|
|
|
if (nm_device_is_test_device (dev))
|
|
|
|
|
return;
|
|
|
|
|
|
2005-04-28 01:37:37 +00:00
|
|
|
nm_system_device_flush_addresses_with_iface (nm_device_get_iface (dev));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* nm_system_device_flush_addresses_with_iface
|
|
|
|
|
*
|
|
|
|
|
* Flush all network addresses associated with a network device
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_device_flush_addresses_with_iface (const char *iface)
|
|
|
|
|
{
|
|
|
|
|
char *buf;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (iface != NULL);
|
|
|
|
|
|
2004-08-31 Dan Williams <dcbw@redhat.com>
* Remove 'debug' extern global from all files since we now
use syslog()
* src/NetworkManager.[ch]
- Break out routine that get the net.interface property from HAL,
removing that logic from nm_create_device_and_add_to_list()
- (nm_create_device_and_add_to_list): make this a bit more general so
it doesn't do the talking to HAL. Also add arguments to facilitate
the create of test devices.
- (nm_data_mark_state_changed): rename from nm_data_set_state_modified()
- (nm_data_new, main, nm_print_usage): add new argument "--enable-test-devices"
which makes NetworkManager listen for dbus commands to create test
devices, which have no backing hardware. Use when you're on a plane
for example, and/or forgot your wireless card at home. Test devices
_cannot_ be created unless NM is started with --enable-test-devices.
* src/NetworkManagerDbus.[ch]
- New "getLinkActive" method for devices
- New "setLinkActive" method for devices (only works on test devices)
- New "createTestDevice" method on NetworkManager object to create a test
device of a specified type (ie wired, wireless). UDI is created from
scratch, as is the interface name. Only works when NM is started with
--enable-test-devices switch.
- New "removeTestDevice" method on NetworkManager object which removes a
test device. Only works when NM is started with --enable-test-devices
* src/NetworkManagerDevice.[ch]
- Logic to facilitate test devices. Add variables to NMDevice struct to indicate
whether a device is a test device or not, and what its link status is.
- Deal with test devices in most functions. For those that work directly on hardware
special-case test devices.
- (nm_device_new): don't create a test device if test devices weren't enabled on the
command-line.
- (nm_device_update_link_active): split out logic for wired and wireless device link
checking to separate functions to facilitate test device link checking.
- (nm_device_set_enc_key): Since some drivers for wireless cards are daft and
don't make a distinction between System Authentication and Encryption
(namely Cisco aironet), we use Open System auth when setting a WEP key
on the card. We don't deal with Shared Key auth yet.
- (nm_device_activation_worker): split the activation cancel check logic out into
a separate routine nm_device_activation_cancel_if_needed()
- (nm_device_activation_signal_cancel): rename from nm_device_activation_cancel()
- (nm_device_fake_ap_list): Test wireless devices obviously cannot scan, so create
a list of fake access points that they can "see"
- (nm_device_is_test_device): return whether or not a device is a test device
* src/NetworkManagerPolicy.c
- (nm_policy_get_best_device): attempt to deal with wireless network selection,
previously if you "locked"/forced NM to use a wireless device but then
selected a wireless network for NM to use, it would switch to a wired device.
So, if the active device is wireless and it has a "forced" best AP, use it
if the "forced" best AP is still valid
- (nm_state_modification_monitor): deal with NULL best devices, for example
there were no usable network devices, or the last one was removed
* src/backends/NetworkManager*.c
- Deal with test devices, mostly just return success for operations like getting
a DHCP address
* test/nmtestdevices.c
- Test tool to create/remove/link-switch test devices
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@112 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
2004-08-31 16:09:15 +00:00
|
|
|
/* Remove all IP addresses for a device */
|
2005-04-28 01:37:37 +00:00
|
|
|
buf = g_strdup_printf ("/sbin/ip address flush dev %s", iface);
|
2004-08-25 21:07:19 +00:00
|
|
|
nm_spawn_process (buf);
|
2005-04-28 01:37:37 +00:00
|
|
|
g_free (buf);
|
2004-08-25 21:07:19 +00:00
|
|
|
}
|
|
|
|
|
|
2004-10-12 11:15:47 +00:00
|
|
|
/*
|
|
|
|
|
* nm_system_device_setup_static_ip4_config
|
|
|
|
|
*
|
|
|
|
|
* Set up the device with a particular IPv4 address/netmask/gateway.
|
|
|
|
|
*
|
|
|
|
|
* Returns: TRUE on success
|
|
|
|
|
* FALSE on error
|
|
|
|
|
*
|
|
|
|
|
*/
|
2005-04-28 01:37:37 +00:00
|
|
|
#if 0
|
2004-10-12 11:15:47 +00:00
|
|
|
gboolean nm_system_device_setup_static_ip4_config (NMDevice *dev)
|
|
|
|
|
{
|
2004-10-19 02:27:04 +00:00
|
|
|
#define IPBITS (sizeof (guint32) * 8)
|
|
|
|
|
struct in_addr temp_addr;
|
|
|
|
|
struct in_addr temp_addr2;
|
|
|
|
|
char *s_tmp;
|
|
|
|
|
char *s_tmp2;
|
|
|
|
|
int i;
|
|
|
|
|
guint32 addr;
|
|
|
|
|
guint32 netmask;
|
|
|
|
|
guint32 prefix = IPBITS; /* initialize with # bits in ipv4 address */
|
|
|
|
|
guint32 broadcast;
|
|
|
|
|
char *buf;
|
|
|
|
|
int err;
|
2004-11-11 02:24:04 +00:00
|
|
|
const char *iface;
|
2004-10-19 02:27:04 +00:00
|
|
|
|
|
|
|
|
g_return_val_if_fail (dev != NULL, FALSE);
|
|
|
|
|
g_return_val_if_fail (!nm_device_config_get_use_dhcp (dev), FALSE);
|
|
|
|
|
|
|
|
|
|
addr = nm_device_config_get_ip4_address (dev);
|
|
|
|
|
netmask = nm_device_config_get_ip4_netmask (dev);
|
|
|
|
|
iface = nm_device_get_iface (dev);
|
|
|
|
|
broadcast = nm_device_config_get_ip4_broadcast (dev);
|
|
|
|
|
|
|
|
|
|
/* get the prefix from the netmask */
|
|
|
|
|
for (i = 0; i < IPBITS; i++)
|
|
|
|
|
{
|
|
|
|
|
if (!(ntohl (netmask) & ((2 << i) - 1)))
|
|
|
|
|
prefix--;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Calculate the broadcast address if the user didn't specify one */
|
|
|
|
|
if (!broadcast)
|
|
|
|
|
broadcast = ((addr & (int)netmask) | ~(int)netmask);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Try and work out if someone else has our IP
|
|
|
|
|
* using RFC 2131 Duplicate Address Detection
|
|
|
|
|
*/
|
|
|
|
|
temp_addr.s_addr = addr;
|
2004-11-11 02:24:04 +00:00
|
|
|
buf = g_strdup_printf ("%s -q -D -c 1 -I %s %s",ARPING,
|
2004-10-19 02:27:04 +00:00
|
|
|
iface, inet_ntoa (temp_addr));
|
|
|
|
|
if ((err = nm_spawn_process (buf)))
|
|
|
|
|
{
|
2005-03-14 Ray Strode <rstrode@redhat.com>
Fourth (probably working) cut at porting to
dbus 0.30 api and new hal. This cut adds
some new logging macros to make debugging
easier.
* dispatcher-daemon/NetworkManagerDispatcher.c:
* info-daemon/NetworkmanagerInfo.c:
* info-daemon/NetworkManagerInfoPassphraseDialog.c:
* info-daemon/NetworkManagerInfoVPN.c:
* src/NetworkManager.c:
* src/NetworkManagerAP.c:
* src/NetworkManagerAPList.c:
* src/NetworkManagerDHCP.c:
* src/NetworkManagerDbus.c:
* src/NetworkManagerDevice.c:
* src/NetworkManagerPolicy.c:
* src/NetworkManagerSystem.c:
* src/NetworkManagerUtils.c:
* src/NetworkManagerWireless.c:
* src/autoip.c:
* src/nm-dbus-nm.c:
* src/backends/NetworkManagerDebian.c:
* src/backends/NetworkManagerGentoo.c:
* src/backends/NetworkManagerRedHat.c:
* src/backends/NetworkManagerSlackware.c:
use new logging macros.
* dispatcher-daemon/NetworkManagerDispatcher.c:
(nmd_dbus_filter): s/dbus_free/g_free/
* info-daemon/Makefile.am: link in utils library.
* info-daemon/NetworkmanagerInfo.c: use new logging
macros.
(nmi_dbus_get_network): don't assume enumerations
are 32-bit.
(nmi_dbus_nmi_message_handler): don't free what
doesn't belong to us.
* libnm_glib/libnm_glib.c:
(libnm_glib_get_nm_status):
(libnm_glib_init): don't free what doesn't
belong to us.
(libnm_glib_dbus): strdup result, so it doesn't get
lost when message is unref'd.
* panel-applet/NMWirelessAppletDbus.c:
(nmwa_dbus_update_devices): s/dbus_free/g_free/
* src/NetworkManager.c:
(nm_monitor_wired_link_state): request initial status
dump of all cards when we start up, instead of relying
on /sys/.../carrier.
(nm_info_handler), (nm_set_up_log_handlers):
log handlers to specify what syslog priorites
the logging macros default to.
* src/NetworkManagerAPList.c:
(nm_ap_list_populate_from_nmi):
s/dbus_free_string_array/g_strfreev/
* src/NetworkManagerDbus.c:
(nm_dbus_get_network_object):
validate d-bus message argument types.
Advance message iterator after reading argument,
prepend instead of append to GSList.
* src/NetworkManagerDevice.c:
(nm_device_probe_wired_link_status):
remove redundant /sys in /sys path. remove wrong
contents == NULL means has carrier assumption.
* src/nm-netlink-monitor.c
(nm_netlink_monitor_request_status): implement
function to ask kernel to dump interface link
status over netlink socket.
* test/*.c: s/dbus_free/g_free/
* utils/nm-utils.h:
(nm_print_backtrace): new macro to print backtrace.
(nm_get_timestamp): new macro to get sub-second precise
unix timestamp.
(nm_info), (nm_debug), (nm_warning), (nm_error):
new logging functions. nm_info just prints,
nm_debug includes timestamp and function,
nm_warning includes function, nm_error includes
backtrace and sigtrap.
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@497 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
2005-03-15 05:30:15 +00:00
|
|
|
nm_warning ("Error: Duplicate address '%s' detected for "
|
2004-10-19 02:27:04 +00:00
|
|
|
"device '%s' \n", iface, inet_ntoa (temp_addr));
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
g_free (buf);
|
|
|
|
|
|
|
|
|
|
/* set our IP address */
|
|
|
|
|
temp_addr.s_addr = addr;
|
|
|
|
|
temp_addr2.s_addr = broadcast;
|
|
|
|
|
s_tmp = g_strdup (inet_ntoa (temp_addr));
|
|
|
|
|
s_tmp2 = g_strdup (inet_ntoa (temp_addr2));
|
|
|
|
|
buf = g_strdup_printf ("/sbin/ip addr add %s/%d brd %s dev %s label %s",
|
|
|
|
|
s_tmp, prefix, s_tmp2, iface, iface);
|
|
|
|
|
g_free (s_tmp);
|
|
|
|
|
g_free (s_tmp2);
|
|
|
|
|
if ((err = nm_spawn_process (buf)))
|
|
|
|
|
{
|
2005-03-14 Ray Strode <rstrode@redhat.com>
Fourth (probably working) cut at porting to
dbus 0.30 api and new hal. This cut adds
some new logging macros to make debugging
easier.
* dispatcher-daemon/NetworkManagerDispatcher.c:
* info-daemon/NetworkmanagerInfo.c:
* info-daemon/NetworkManagerInfoPassphraseDialog.c:
* info-daemon/NetworkManagerInfoVPN.c:
* src/NetworkManager.c:
* src/NetworkManagerAP.c:
* src/NetworkManagerAPList.c:
* src/NetworkManagerDHCP.c:
* src/NetworkManagerDbus.c:
* src/NetworkManagerDevice.c:
* src/NetworkManagerPolicy.c:
* src/NetworkManagerSystem.c:
* src/NetworkManagerUtils.c:
* src/NetworkManagerWireless.c:
* src/autoip.c:
* src/nm-dbus-nm.c:
* src/backends/NetworkManagerDebian.c:
* src/backends/NetworkManagerGentoo.c:
* src/backends/NetworkManagerRedHat.c:
* src/backends/NetworkManagerSlackware.c:
use new logging macros.
* dispatcher-daemon/NetworkManagerDispatcher.c:
(nmd_dbus_filter): s/dbus_free/g_free/
* info-daemon/Makefile.am: link in utils library.
* info-daemon/NetworkmanagerInfo.c: use new logging
macros.
(nmi_dbus_get_network): don't assume enumerations
are 32-bit.
(nmi_dbus_nmi_message_handler): don't free what
doesn't belong to us.
* libnm_glib/libnm_glib.c:
(libnm_glib_get_nm_status):
(libnm_glib_init): don't free what doesn't
belong to us.
(libnm_glib_dbus): strdup result, so it doesn't get
lost when message is unref'd.
* panel-applet/NMWirelessAppletDbus.c:
(nmwa_dbus_update_devices): s/dbus_free/g_free/
* src/NetworkManager.c:
(nm_monitor_wired_link_state): request initial status
dump of all cards when we start up, instead of relying
on /sys/.../carrier.
(nm_info_handler), (nm_set_up_log_handlers):
log handlers to specify what syslog priorites
the logging macros default to.
* src/NetworkManagerAPList.c:
(nm_ap_list_populate_from_nmi):
s/dbus_free_string_array/g_strfreev/
* src/NetworkManagerDbus.c:
(nm_dbus_get_network_object):
validate d-bus message argument types.
Advance message iterator after reading argument,
prepend instead of append to GSList.
* src/NetworkManagerDevice.c:
(nm_device_probe_wired_link_status):
remove redundant /sys in /sys path. remove wrong
contents == NULL means has carrier assumption.
* src/nm-netlink-monitor.c
(nm_netlink_monitor_request_status): implement
function to ask kernel to dump interface link
status over netlink socket.
* test/*.c: s/dbus_free/g_free/
* utils/nm-utils.h:
(nm_print_backtrace): new macro to print backtrace.
(nm_get_timestamp): new macro to get sub-second precise
unix timestamp.
(nm_info), (nm_debug), (nm_warning), (nm_error):
new logging functions. nm_info just prints,
nm_debug includes timestamp and function,
nm_warning includes function, nm_error includes
backtrace and sigtrap.
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@497 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
2005-03-15 05:30:15 +00:00
|
|
|
nm_warning ("Error: could not set network configuration for "
|
2004-10-19 02:27:04 +00:00
|
|
|
"device '%s' using command:\n '%s'",
|
|
|
|
|
iface, buf);
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
g_free (buf);
|
|
|
|
|
|
|
|
|
|
/* Alert other computers of our new address */
|
|
|
|
|
temp_addr.s_addr = addr;
|
2004-11-11 02:24:04 +00:00
|
|
|
buf = g_strdup_printf ("%s -q -A -c 1 -I %s %s", ARPING,iface,
|
2004-10-19 02:27:04 +00:00
|
|
|
inet_ntoa (temp_addr));
|
|
|
|
|
nm_spawn_process (buf);
|
|
|
|
|
g_free (buf);
|
|
|
|
|
g_usleep (G_USEC_PER_SEC * 2);
|
2004-11-11 02:24:04 +00:00
|
|
|
buf = g_strdup_printf ("%s -q -U -c 1 -I %s %s", ARPING, iface,
|
2004-10-19 02:27:04 +00:00
|
|
|
inet_ntoa (temp_addr));
|
|
|
|
|
nm_spawn_process (buf);
|
|
|
|
|
g_free (buf);
|
|
|
|
|
|
|
|
|
|
/* set the default route to be this device's gateway */
|
|
|
|
|
temp_addr.s_addr = nm_device_config_get_ip4_gateway (dev);
|
|
|
|
|
buf = g_strdup_printf ("/sbin/ip route replace default via %s dev %s",
|
|
|
|
|
inet_ntoa (temp_addr), iface);
|
|
|
|
|
if ((err = nm_spawn_process (buf)))
|
|
|
|
|
{
|
2005-03-14 Ray Strode <rstrode@redhat.com>
Fourth (probably working) cut at porting to
dbus 0.30 api and new hal. This cut adds
some new logging macros to make debugging
easier.
* dispatcher-daemon/NetworkManagerDispatcher.c:
* info-daemon/NetworkmanagerInfo.c:
* info-daemon/NetworkManagerInfoPassphraseDialog.c:
* info-daemon/NetworkManagerInfoVPN.c:
* src/NetworkManager.c:
* src/NetworkManagerAP.c:
* src/NetworkManagerAPList.c:
* src/NetworkManagerDHCP.c:
* src/NetworkManagerDbus.c:
* src/NetworkManagerDevice.c:
* src/NetworkManagerPolicy.c:
* src/NetworkManagerSystem.c:
* src/NetworkManagerUtils.c:
* src/NetworkManagerWireless.c:
* src/autoip.c:
* src/nm-dbus-nm.c:
* src/backends/NetworkManagerDebian.c:
* src/backends/NetworkManagerGentoo.c:
* src/backends/NetworkManagerRedHat.c:
* src/backends/NetworkManagerSlackware.c:
use new logging macros.
* dispatcher-daemon/NetworkManagerDispatcher.c:
(nmd_dbus_filter): s/dbus_free/g_free/
* info-daemon/Makefile.am: link in utils library.
* info-daemon/NetworkmanagerInfo.c: use new logging
macros.
(nmi_dbus_get_network): don't assume enumerations
are 32-bit.
(nmi_dbus_nmi_message_handler): don't free what
doesn't belong to us.
* libnm_glib/libnm_glib.c:
(libnm_glib_get_nm_status):
(libnm_glib_init): don't free what doesn't
belong to us.
(libnm_glib_dbus): strdup result, so it doesn't get
lost when message is unref'd.
* panel-applet/NMWirelessAppletDbus.c:
(nmwa_dbus_update_devices): s/dbus_free/g_free/
* src/NetworkManager.c:
(nm_monitor_wired_link_state): request initial status
dump of all cards when we start up, instead of relying
on /sys/.../carrier.
(nm_info_handler), (nm_set_up_log_handlers):
log handlers to specify what syslog priorites
the logging macros default to.
* src/NetworkManagerAPList.c:
(nm_ap_list_populate_from_nmi):
s/dbus_free_string_array/g_strfreev/
* src/NetworkManagerDbus.c:
(nm_dbus_get_network_object):
validate d-bus message argument types.
Advance message iterator after reading argument,
prepend instead of append to GSList.
* src/NetworkManagerDevice.c:
(nm_device_probe_wired_link_status):
remove redundant /sys in /sys path. remove wrong
contents == NULL means has carrier assumption.
* src/nm-netlink-monitor.c
(nm_netlink_monitor_request_status): implement
function to ask kernel to dump interface link
status over netlink socket.
* test/*.c: s/dbus_free/g_free/
* utils/nm-utils.h:
(nm_print_backtrace): new macro to print backtrace.
(nm_get_timestamp): new macro to get sub-second precise
unix timestamp.
(nm_info), (nm_debug), (nm_warning), (nm_error):
new logging functions. nm_info just prints,
nm_debug includes timestamp and function,
nm_warning includes function, nm_error includes
backtrace and sigtrap.
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@497 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
2005-03-15 05:30:15 +00:00
|
|
|
nm_warning ("Error: could not set default route using "
|
2004-10-19 02:27:04 +00:00
|
|
|
"command:\n '%s'", buf);
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
g_free (buf);
|
|
|
|
|
return (TRUE);
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
g_free (buf);
|
|
|
|
|
nm_system_device_flush_addresses (dev);
|
|
|
|
|
nm_system_device_flush_routes (dev);
|
|
|
|
|
return (FALSE);
|
2004-10-12 11:15:47 +00:00
|
|
|
}
|
2005-04-28 01:37:37 +00:00
|
|
|
#endif
|
2004-10-12 11:15:47 +00:00
|
|
|
|
2004-12-22 18:42:37 +00:00
|
|
|
/*
|
|
|
|
|
* nm_system_enable_loopback
|
|
|
|
|
*
|
|
|
|
|
* Bring up the loopback interface
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_enable_loopback (void)
|
|
|
|
|
{
|
|
|
|
|
nm_spawn_process ("/sbin/ifup lo");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* nm_system_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_system_flush_loopback_routes (void)
|
|
|
|
|
{
|
|
|
|
|
nm_spawn_process ("/sbin/ip route flush dev lo");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* nm_system_delete_default_route
|
|
|
|
|
*
|
|
|
|
|
* Remove the old default route in preparation for a new one
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_delete_default_route (void)
|
|
|
|
|
{
|
|
|
|
|
nm_spawn_process ("/sbin/ip route del default");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* nm_system_flush_arp_cache
|
|
|
|
|
*
|
|
|
|
|
* Flush all entries in the arp cache.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_flush_arp_cache (void)
|
|
|
|
|
{
|
|
|
|
|
nm_spawn_process ("/sbin/ip neigh flush all");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* nm_system_kill_all_dhcp_daemons
|
|
|
|
|
*
|
|
|
|
|
* Kill all DHCP daemons currently running, done at startup.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_kill_all_dhcp_daemons (void)
|
|
|
|
|
{
|
|
|
|
|
nm_spawn_process ("/usr/bin/killall -q dhclient");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* nm_system_update_dns
|
|
|
|
|
*
|
|
|
|
|
* Make glibc/nscd aware of any changes to the resolv.conf file by
|
|
|
|
|
* restarting nscd.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_update_dns (void)
|
|
|
|
|
{
|
|
|
|
|
nm_spawn_process ("/usr/sbin/invoke-rc.d nscd restart");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* nm_system_load_device_modules
|
|
|
|
|
*
|
|
|
|
|
* This is a null op - all our drivers should already be loaded.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_load_device_modules (void)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* nm_system_restart_mdns_responder
|
|
|
|
|
*
|
|
|
|
|
* Restart the multicast DNS responder so that it knows about new
|
|
|
|
|
* network interfaces and IP addresses.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_restart_mdns_responder (void)
|
|
|
|
|
{
|
|
|
|
|
nm_spawn_process ("/usr/bin/killall -q -USR1 mDNSResponder");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2005-02-10 21:16:03 +00:00
|
|
|
/*
|
|
|
|
|
* nm_system_device_add_ip6_link_address
|
|
|
|
|
*
|
|
|
|
|
* Add a default link-local IPv6 address to a device.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_device_add_ip6_link_address (NMDevice *dev)
|
|
|
|
|
{
|
2005-02-11 21:44:35 +00:00
|
|
|
char *buf;
|
2005-03-31 Dan Williams <dcbw@redhat.com>
Tighten up handling of wireless devices that don't support wireless
scanning (ie, Orinoco). Due to restructuring of code, these devices
hadn't been doing pseudo-scanning for a while either and would just
spin waiting for an access point. They are now manual devices where
the user must choose the access point from the menu every time. All
"allowed" access points are listed in the applet's menu regardless
of whether or not they can be seen by the card, since it can't scan
anyway.
* src/NetworkManager.c
- (nm_wireless_link_state_handle): new function, but only update
the "best" ap for non-scanning devices when its not activating,
and when no device is being forced on the card
- (nm_link_state_monitor): split wireless link state handling out
into separate function
* src/NetworkManagerDevice.c
- (nm_device_copy_allowed_to_dev_list): new function
- (nm_device_new): populate non-scanning cards' AP lists with
access points from the "allowed" list
- (nm_device_new): don't start a scanning timeout for devices that
can't scan
- (nm_device_activation_schedule_finish): new parameter, should be
the AP that failed to be connected to, pass it on to the
activation finish function in NetworkManagerPolicy.c
- (nm_device_activate_wireless): don't ever try to get a new AP
for non-scanning devices, just fail. The user must choose
a new access point manually.
- (nm_device_activate): grab the AP that failed connection and
pass it on
- (nm_device_update_best_ap): Clear the best AP if we don't have
a link to it, user must manually choose a new one
- (nm_device_do_pseudo_scan): remove function
- (nm_device_wireless_process_scan_results): remove bits for non-
scanning cards since they never get here
- (nm_device_wireless_scan): remove bits for non-scanning devices,
and fake the scan list for test devices a bit earlier
* src/NetworkManagerPolicy.c
- (nm_policy_activation_finish): use the failed_ap that we get
passed rather than getting the best_ap from the card, which
may have changed since we were scheduled
- (nm_policy_allowed_ap_list_update): for non-scanning devices,
update their scan list directly from the allowed list when
we get updates to the allowed list from NetworkManagerInfo
* src/NetworkManagerPolicy.h
- New member for failed access point in NMActivationResult
-------------------------------------
Driver Notification patch: notifies the user when their driver
sucks. Gives them the option to ignore further insertions
of the card that has the sucky driver.
* NetworkManager.h
- Remove the SEMI_SUPPORTED member from the NMDriverSupportLevel
enum and replace it with NO_CARRIER_DETECT and
NO_WIRELESS_SCAN
* panel-applet/NMWirelessApplet.[ch]
- Merge essid.glade -> wireless-applet.glade
- Implement the "Your driver sucks" notification dialog
* panel-applet/NMWirelessAppletDbus.c
- Change stuff from getSupportsCarrierDetect->getDriverSupportLevel
- Grab hardware address for each device from NM too
- Check whether the driver for each device sucks or not whenever
a new device is noticed
* panel-applet/NMWirelessAppletOtherNetworkDialog.c
- Deal with stuff being in wireless-applet.glade now rather than essid.glade
* src/NetworkManager.c
- Fix a double-unref on device removal
* src/NetworkManagerUtils.c
- Set appropriate driver support level on a device that doesn't
support scanning or carrier detection
* src/nm-dbus-device.c
- New "getHWAddress" dbus method on devices
- getSupportsCarrierDetect -> getDriverSupportLevel
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@534 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
2005-03-31 21:02:21 +00:00
|
|
|
char *addr;
|
2005-05-03 Dan Williams <dcbw@redhat.com>
* Kill dhcpcd. We now use "dhcdbd", a dbus daemon that controls dhclient.
This means that NetworkManager shouldn't have DHCP issues anymore. It also
means you need dhcdbd, which you can get here (get the latest one):
http://people.redhat.com/jvdias/dhcdbd/
Technically NetworkManager can use any DHCP daemon that uses the same DBUS
interface as dhcdbd.
* Rewrite device activation to facilitate the new DHCP infrastructure and
future improvements. Its now "activation request" based, ie there is a single
activation request composed of the device, access point, and other info which
follows the entire activation process. There are 5 stages of the activation
process which correspond to:
1) Device preparation
2) Device configuration (bring it up, set ESSID/Key/etc)
3) IP Config Start (fire off DHCP if we're using it)
4) IP Config Get (grab config from DHCP or static config files)
5) IP Config Commit (set device's IP address, DNS, etc)
Note that there is no longer a "scanning" step, since the access point must
be known _before_ activation starts. If the access point drops out or does
not exist for some reason, the entire activation process fails and must be
restarted for a different access point or device.
Patch from Bill Moss:
* gnome/applet/applet.c
- Fix type of vpn_failure dialog -> vpn_banner dialog
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@597 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
2005-05-03 20:41:36 +00:00
|
|
|
struct ether_addr hw_addr;
|
2005-02-11 21:44:35 +00:00
|
|
|
unsigned char eui[8];
|
|
|
|
|
|
2005-05-03 Dan Williams <dcbw@redhat.com>
* Kill dhcpcd. We now use "dhcdbd", a dbus daemon that controls dhclient.
This means that NetworkManager shouldn't have DHCP issues anymore. It also
means you need dhcdbd, which you can get here (get the latest one):
http://people.redhat.com/jvdias/dhcdbd/
Technically NetworkManager can use any DHCP daemon that uses the same DBUS
interface as dhcdbd.
* Rewrite device activation to facilitate the new DHCP infrastructure and
future improvements. Its now "activation request" based, ie there is a single
activation request composed of the device, access point, and other info which
follows the entire activation process. There are 5 stages of the activation
process which correspond to:
1) Device preparation
2) Device configuration (bring it up, set ESSID/Key/etc)
3) IP Config Start (fire off DHCP if we're using it)
4) IP Config Get (grab config from DHCP or static config files)
5) IP Config Commit (set device's IP address, DNS, etc)
Note that there is no longer a "scanning" step, since the access point must
be known _before_ activation starts. If the access point drops out or does
not exist for some reason, the entire activation process fails and must be
restarted for a different access point or device.
Patch from Bill Moss:
* gnome/applet/applet.c
- Fix type of vpn_failure dialog -> vpn_banner dialog
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@597 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
2005-05-03 20:41:36 +00:00
|
|
|
nm_device_get_hw_address(dev, &hw_addr);
|
2005-02-11 21:44:35 +00:00
|
|
|
|
2005-05-03 Dan Williams <dcbw@redhat.com>
* Kill dhcpcd. We now use "dhcdbd", a dbus daemon that controls dhclient.
This means that NetworkManager shouldn't have DHCP issues anymore. It also
means you need dhcdbd, which you can get here (get the latest one):
http://people.redhat.com/jvdias/dhcdbd/
Technically NetworkManager can use any DHCP daemon that uses the same DBUS
interface as dhcdbd.
* Rewrite device activation to facilitate the new DHCP infrastructure and
future improvements. Its now "activation request" based, ie there is a single
activation request composed of the device, access point, and other info which
follows the entire activation process. There are 5 stages of the activation
process which correspond to:
1) Device preparation
2) Device configuration (bring it up, set ESSID/Key/etc)
3) IP Config Start (fire off DHCP if we're using it)
4) IP Config Get (grab config from DHCP or static config files)
5) IP Config Commit (set device's IP address, DNS, etc)
Note that there is no longer a "scanning" step, since the access point must
be known _before_ activation starts. If the access point drops out or does
not exist for some reason, the entire activation process fails and must be
restarted for a different access point or device.
Patch from Bill Moss:
* gnome/applet/applet.c
- Fix type of vpn_failure dialog -> vpn_banner dialog
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@597 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
2005-05-03 20:41:36 +00:00
|
|
|
memcpy (eui, &(hw_addr.ether_addr_octet), sizeof (hw_addr.ether_addr_octet));
|
2005-02-11 21:44:35 +00:00
|
|
|
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 ("/sbin/ip -6 address 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);
|
2005-02-10 21:16:03 +00:00
|
|
|
}
|
|
|
|
|
|
2005-04-28 01:37:37 +00:00
|
|
|
typedef struct DebSystemConfigData
|
|
|
|
|
{
|
|
|
|
|
NMIP4Config * config;
|
|
|
|
|
gboolean use_dhcp;
|
|
|
|
|
} DebSystemConfigData;
|
2005-02-10 21:16:03 +00:00
|
|
|
|
2004-10-12 11:15:47 +00:00
|
|
|
/*
|
2005-06-15 12:03:30 +00:00
|
|
|
* 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] == ';'))
|
|
|
|
|
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 */
|
2005-06-16 01:00:26 +00:00
|
|
|
if ((split_searches = g_strsplit (searches, " ", 0)))
|
2005-06-15 12:03:30 +00:00
|
|
|
{
|
|
|
|
|
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
|
2004-10-12 11:15:47 +00:00
|
|
|
*
|
|
|
|
|
* Retrieve any relevant configuration info for a particular device
|
|
|
|
|
* from the system network configuration information. Clear out existing
|
|
|
|
|
* info before setting stuff too.
|
|
|
|
|
*
|
|
|
|
|
*/
|
2005-04-28 01:37:37 +00:00
|
|
|
void* nm_system_device_get_system_config (NMDevice *dev)
|
2004-10-12 11:15:47 +00:00
|
|
|
{
|
2005-04-28 01:37:37 +00:00
|
|
|
DebSystemConfigData * sys_data = NULL;
|
2004-11-11 02:24:04 +00:00
|
|
|
if_block *curr_device;
|
|
|
|
|
const char *buf;
|
2005-04-28 01:37:37 +00:00
|
|
|
gboolean error = FALSE;
|
2004-11-11 02:24:04 +00:00
|
|
|
|
2005-04-28 01:37:37 +00:00
|
|
|
g_return_val_if_fail (dev != NULL, NULL);
|
2004-11-11 02:24:04 +00:00
|
|
|
|
2005-04-28 01:37:37 +00:00
|
|
|
sys_data = g_malloc0 (sizeof (DebSystemConfigData));
|
|
|
|
|
sys_data->use_dhcp = TRUE;
|
2004-11-11 02:24:04 +00:00
|
|
|
|
|
|
|
|
ifparser_init();
|
|
|
|
|
|
|
|
|
|
/* Make sure this config file is for this device */
|
|
|
|
|
curr_device = ifparser_getif(nm_device_get_iface (dev));
|
|
|
|
|
if (curr_device == NULL)
|
|
|
|
|
goto out;
|
|
|
|
|
|
|
|
|
|
buf = ifparser_getkey(curr_device, "inet");
|
|
|
|
|
if (buf)
|
|
|
|
|
{
|
|
|
|
|
if (strcmp (buf, "dhcp")!=0)
|
2005-04-28 01:37:37 +00:00
|
|
|
sys_data->use_dhcp = FALSE;
|
2004-11-11 02:24:04 +00:00
|
|
|
}
|
2004-10-12 11:15:47 +00:00
|
|
|
|
2004-11-11 02:24:04 +00:00
|
|
|
buf = ifparser_getkey (curr_device, "address");
|
|
|
|
|
if (buf)
|
2005-04-28 01:37:37 +00:00
|
|
|
nm_ip4_config_set_address (sys_data->config, inet_addr (buf));
|
2004-11-11 02:24:04 +00:00
|
|
|
|
|
|
|
|
buf = ifparser_getkey (curr_device, "gateway");
|
|
|
|
|
if (buf)
|
2005-04-28 01:37:37 +00:00
|
|
|
nm_ip4_config_set_gateway (sys_data->config, inet_addr (buf));
|
2004-11-11 02:24:04 +00:00
|
|
|
|
|
|
|
|
buf = ifparser_getkey (curr_device, "netmask");
|
|
|
|
|
if (buf)
|
2005-04-28 01:37:37 +00:00
|
|
|
nm_ip4_config_set_netmask (sys_data->config, inet_addr (buf));
|
2004-11-11 02:24:04 +00:00
|
|
|
else
|
|
|
|
|
{
|
2005-04-28 01:37:37 +00:00
|
|
|
guint32 addr = nm_ip4_config_get_address (sys_data->config);
|
|
|
|
|
|
2004-11-11 02:24:04 +00:00
|
|
|
/* Make a default netmask if we have an IP address */
|
2005-04-28 01:37:37 +00:00
|
|
|
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));
|
2004-11-11 02:24:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
buf = ifparser_getkey (curr_device, "broadcast");
|
|
|
|
|
if (buf)
|
2005-04-28 01:37:37 +00:00
|
|
|
nm_ip4_config_set_broadcast (sys_data->config, inet_addr (buf));
|
|
|
|
|
else
|
2004-11-11 02:24:04 +00:00
|
|
|
{
|
2005-04-28 01:37:37 +00:00
|
|
|
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);
|
2004-11-11 02:24:04 +00:00
|
|
|
}
|
|
|
|
|
|
2005-06-15 12:03:30 +00:00
|
|
|
if (!sys_data->use_dhcp)
|
|
|
|
|
set_ip4_config_from_resolv_conf (SYSCONFDIR"/resolv.conf", sys_data->config);
|
|
|
|
|
|
2004-11-11 02:24:04 +00:00
|
|
|
#if 0
|
2005-03-14 Ray Strode <rstrode@redhat.com>
Fourth (probably working) cut at porting to
dbus 0.30 api and new hal. This cut adds
some new logging macros to make debugging
easier.
* dispatcher-daemon/NetworkManagerDispatcher.c:
* info-daemon/NetworkmanagerInfo.c:
* info-daemon/NetworkManagerInfoPassphraseDialog.c:
* info-daemon/NetworkManagerInfoVPN.c:
* src/NetworkManager.c:
* src/NetworkManagerAP.c:
* src/NetworkManagerAPList.c:
* src/NetworkManagerDHCP.c:
* src/NetworkManagerDbus.c:
* src/NetworkManagerDevice.c:
* src/NetworkManagerPolicy.c:
* src/NetworkManagerSystem.c:
* src/NetworkManagerUtils.c:
* src/NetworkManagerWireless.c:
* src/autoip.c:
* src/nm-dbus-nm.c:
* src/backends/NetworkManagerDebian.c:
* src/backends/NetworkManagerGentoo.c:
* src/backends/NetworkManagerRedHat.c:
* src/backends/NetworkManagerSlackware.c:
use new logging macros.
* dispatcher-daemon/NetworkManagerDispatcher.c:
(nmd_dbus_filter): s/dbus_free/g_free/
* info-daemon/Makefile.am: link in utils library.
* info-daemon/NetworkmanagerInfo.c: use new logging
macros.
(nmi_dbus_get_network): don't assume enumerations
are 32-bit.
(nmi_dbus_nmi_message_handler): don't free what
doesn't belong to us.
* libnm_glib/libnm_glib.c:
(libnm_glib_get_nm_status):
(libnm_glib_init): don't free what doesn't
belong to us.
(libnm_glib_dbus): strdup result, so it doesn't get
lost when message is unref'd.
* panel-applet/NMWirelessAppletDbus.c:
(nmwa_dbus_update_devices): s/dbus_free/g_free/
* src/NetworkManager.c:
(nm_monitor_wired_link_state): request initial status
dump of all cards when we start up, instead of relying
on /sys/.../carrier.
(nm_info_handler), (nm_set_up_log_handlers):
log handlers to specify what syslog priorites
the logging macros default to.
* src/NetworkManagerAPList.c:
(nm_ap_list_populate_from_nmi):
s/dbus_free_string_array/g_strfreev/
* src/NetworkManagerDbus.c:
(nm_dbus_get_network_object):
validate d-bus message argument types.
Advance message iterator after reading argument,
prepend instead of append to GSList.
* src/NetworkManagerDevice.c:
(nm_device_probe_wired_link_status):
remove redundant /sys in /sys path. remove wrong
contents == NULL means has carrier assumption.
* src/nm-netlink-monitor.c
(nm_netlink_monitor_request_status): implement
function to ask kernel to dump interface link
status over netlink socket.
* test/*.c: s/dbus_free/g_free/
* utils/nm-utils.h:
(nm_print_backtrace): new macro to print backtrace.
(nm_get_timestamp): new macro to get sub-second precise
unix timestamp.
(nm_info), (nm_debug), (nm_warning), (nm_error):
new logging functions. nm_info just prints,
nm_debug includes timestamp and function,
nm_warning includes function, nm_error includes
backtrace and sigtrap.
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@497 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
2005-03-15 05:30:15 +00:00
|
|
|
nm_debug ("------ Config (%s)", nm_device_get_iface (dev));
|
|
|
|
|
nm_debug (" DHCP=%d\n", use_dhcp);
|
|
|
|
|
nm_debug (" ADDR=%d\n", ip4_address);
|
|
|
|
|
nm_debug (" GW=%d\n", ip4_gateway);
|
|
|
|
|
nm_debug (" NM=%d\n", ip4_netmask);
|
|
|
|
|
nm_debug ("---------------------\n");
|
2004-11-11 02:24:04 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
out:
|
|
|
|
|
ifparser_destroy();
|
2005-04-28 01:37:37 +00:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* nm_system_device_free_system_config
|
|
|
|
|
*
|
|
|
|
|
* Free stored system config data
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
void nm_system_device_free_system_config (NMDevice *dev, void *system_config_data)
|
|
|
|
|
{
|
|
|
|
|
DebSystemConfigData *sys_data = (DebSystemConfigData *)system_config_data;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (dev != NULL);
|
|
|
|
|
|
|
|
|
|
if (!sys_data)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (sys_data->config)
|
|
|
|
|
nm_ip4_config_unref (sys_data->config);
|
|
|
|
|
}
|
|
|
|
|
|
2005-06-15 12:15:34 +00:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* nm_system_device_get_use_dhcp
|
|
|
|
|
*
|
|
|
|
|
* Return whether the distro-specific system config tells us to use
|
|
|
|
|
* dhcp for this device.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
gboolean nm_system_device_get_use_dhcp (NMDevice *dev)
|
|
|
|
|
{
|
|
|
|
|
DebSystemConfigData *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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2005-04-28 01:37:37 +00:00
|
|
|
NMIP4Config *nm_system_device_new_ip4_system_config (NMDevice *dev)
|
|
|
|
|
{
|
|
|
|
|
DebSystemConfigData *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;
|
2004-11-11 02:24:04 +00:00
|
|
|
}
|
2005-08-16 17:16:40 +00:00
|
|
|
|
|
|
|
|
void nm_system_deactivate_all_dialup (GSList *list)
|
|
|
|
|
{
|
|
|
|
|
GSList *elt;
|
|
|
|
|
|
|
|
|
|
for (elt = list; elt; elt = g_slist_next (elt))
|
|
|
|
|
{
|
|
|
|
|
NMDialUpConfig *config = (NMDialUpConfig *) elt->data;
|
|
|
|
|
char *cmd;
|
|
|
|
|
|
|
|
|
|
cmd = g_strdup_printf ("/sbin/ifdown %s", (char *) config->data);
|
|
|
|
|
nm_spawn_process (cmd);
|
|
|
|
|
g_free (cmd);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gboolean nm_system_activate_dialup (GSList *list, const char *dialup)
|
|
|
|
|
{
|
|
|
|
|
GSList *elt;
|
|
|
|
|
gboolean ret = FALSE;
|
|
|
|
|
|
|
|
|
|
for (elt = list; elt; elt = g_slist_next (elt))
|
|
|
|
|
{
|
|
|
|
|
NMDialUpConfig *config = (NMDialUpConfig *) elt->data;
|
|
|
|
|
if (strcmp (dialup, config->name) == 0)
|
|
|
|
|
{
|
|
|
|
|
char *cmd;
|
|
|
|
|
|
|
|
|
|
nm_info ("Activating dialup device %s (%s) ...", dialup, (char *) config->data);
|
|
|
|
|
cmd = g_strdup_printf ("/sbin/ifup %s", (char *) config->data);
|
|
|
|
|
nm_spawn_process (cmd);
|
|
|
|
|
g_free (cmd);
|
|
|
|
|
ret = TRUE;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GSList * nm_system_get_dialup_config (void)
|
|
|
|
|
{
|
|
|
|
|
const char *buf;
|
|
|
|
|
if_block *curr_device;
|
|
|
|
|
gboolean error = FALSE;
|
|
|
|
|
GError *err;
|
|
|
|
|
unsigned int i = 0;
|
|
|
|
|
size_t len;
|
|
|
|
|
GSList *list = NULL;
|
|
|
|
|
if_block *curr;
|
|
|
|
|
ifparser_init();
|
|
|
|
|
|
|
|
|
|
/* FIXME: get all ppp(and others?) lines from /e/n/i here */
|
|
|
|
|
curr = ifparser_getfirst();
|
|
|
|
|
while(curr!=NULL)
|
|
|
|
|
{
|
|
|
|
|
NMDialUpConfig *config;
|
|
|
|
|
if (strcmp(curr->type,"iface")==0)
|
|
|
|
|
{
|
|
|
|
|
buf = ifparser_getkey(curr,"inet");
|
|
|
|
|
if (buf && strcmp (buf, "ppp")==0)
|
|
|
|
|
{
|
|
|
|
|
config = g_malloc (sizeof (NMDialUpConfig));
|
|
|
|
|
config->name = g_strdup_printf ("Modem (#%d)", i++);
|
|
|
|
|
config->data = g_strdup (curr->name); /* interface name */
|
|
|
|
|
|
|
|
|
|
list = g_slist_append (list, config);
|
|
|
|
|
|
|
|
|
|
nm_info ("Found dial up configuration for %s: %s", config->name, (char *) config->data);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
curr = curr->next;
|
|
|
|
|
}
|
|
|
|
|
ifparser_destroy();
|
|
|
|
|
|
|
|
|
|
/* Hack: Go back and remove the "(#0)" if there is only one device */
|
|
|
|
|
if (i == 1)
|
|
|
|
|
{
|
|
|
|
|
NMDialUpConfig *config = (NMDialUpConfig *) list->data;
|
|
|
|
|
g_free (config->name);
|
|
|
|
|
config->name = g_strdup ("Modem");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return list;
|
|
|
|
|
}
|