From a888de7ea15ee57fb51bec53829ef17cb03a5c09 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 10 Feb 2005 21:16:03 +0000 Subject: [PATCH] 2005-02-10 Dan Williams Patch from Dave Woodhouse: * src/NetworkManagerSystem.h src/backends/NetworkManagerDebian.c src/backends/NetworkManagerGentoo.c src/backends/NetworkManagerSlackware.c - New nm_system_device_add_ip6_link_address() function to add link-local address on an interface. Stubbed in Debian, Gentoo, and Slackware. * src/backends/NetworkManagerRedHat.c - (nm_system_device_add_ip6_link_address): implement - (nm_system_device_flush_addresses): revert to previous behavior of flushing all addresses git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@432 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- ChangeLog | 15 ++++++++++++ src/NetworkManagerDevice.c | 1 + src/NetworkManagerSystem.h | 1 + src/backends/NetworkManagerDebian.c | 11 +++++++++ src/backends/NetworkManagerGentoo.c | 11 +++++++++ src/backends/NetworkManagerRedHat.c | 34 ++++++++++++++++++++++---- src/backends/NetworkManagerSlackware.c | 11 +++++++++ 7 files changed, 79 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 866a077767..b29aec1a47 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2005-02-10 Dan Williams + + Patch from Dave Woodhouse: + * src/NetworkManagerSystem.h + src/backends/NetworkManagerDebian.c + src/backends/NetworkManagerGentoo.c + src/backends/NetworkManagerSlackware.c + - New nm_system_device_add_ip6_link_address() function to add link-local + address on an interface. Stubbed in Debian, Gentoo, and Slackware. + + * src/backends/NetworkManagerRedHat.c + - (nm_system_device_add_ip6_link_address): implement + - (nm_system_device_flush_addresses): revert to previous behavior of + flushing all addresses + 2005-02-10 Dan Williams Patch from Tom Parker: diff --git a/src/NetworkManagerDevice.c b/src/NetworkManagerDevice.c index c72badf6cc..095b59fd1e 100644 --- a/src/NetworkManagerDevice.c +++ b/src/NetworkManagerDevice.c @@ -2366,6 +2366,7 @@ static gboolean nm_device_activation_configure_ip (NMDevice *dev, gboolean do_on if (success) { + nm_system_device_add_ip6_link_address (dev); nm_system_flush_arp_cache (); nm_system_restart_mdns_responder (); } diff --git a/src/NetworkManagerSystem.h b/src/NetworkManagerSystem.h index 901fbd87d3..560487146b 100644 --- a/src/NetworkManagerSystem.h +++ b/src/NetworkManagerSystem.h @@ -45,6 +45,7 @@ void nm_system_kill_all_dhcp_daemons (void); void nm_system_update_dns (void); void nm_system_load_device_modules (void); void nm_system_restart_mdns_responder (void); +void nm_system_device_add_ip6_link_address (NMDevice *dev); /* Prototyps for system-layer network functions (ie setting IP address, etc) */ gboolean nm_system_device_set_ip4_address (NMDevice *dev, int ip4_address); diff --git a/src/backends/NetworkManagerDebian.c b/src/backends/NetworkManagerDebian.c index 2b763ba844..61dbcdb4b5 100644 --- a/src/backends/NetworkManagerDebian.c +++ b/src/backends/NetworkManagerDebian.c @@ -325,6 +325,17 @@ void nm_system_restart_mdns_responder (void) } +/* + * 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) +{ +} + + /* * nm_system_device_update_config_info * diff --git a/src/backends/NetworkManagerGentoo.c b/src/backends/NetworkManagerGentoo.c index 6eafa1061a..bbabb0383f 100644 --- a/src/backends/NetworkManagerGentoo.c +++ b/src/backends/NetworkManagerGentoo.c @@ -220,6 +220,17 @@ void nm_system_restart_mdns_responder (void) } +/* + * 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) +{ +} + + /* * nm_system_device_update_config_info * diff --git a/src/backends/NetworkManagerRedHat.c b/src/backends/NetworkManagerRedHat.c index a4c6f0a31e..f31c1795c0 100644 --- a/src/backends/NetworkManagerRedHat.c +++ b/src/backends/NetworkManagerRedHat.c @@ -114,11 +114,8 @@ void nm_system_device_flush_addresses (NMDevice *dev) if (nm_device_is_test_device (dev)) return; - /* Remove all IP addresses for a device, but leave IPv6 local-scope addresses */ - buf = g_strdup_printf ("/sbin/ip address flush dev %s scope global", nm_device_get_iface (dev)); - nm_spawn_process (buf); - g_free (buf); - buf = g_strdup_printf ("/sbin/ip address flush dev %s scope site", nm_device_get_iface (dev)); + /* Remove all IP addresses for a device */ + buf = g_strdup_printf ("/sbin/ip address flush dev %s", nm_device_get_iface (dev)); nm_spawn_process (buf); g_free (buf); } @@ -333,6 +330,33 @@ void nm_system_restart_mdns_responder (void) } +/* + * 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) +{ + char *buf; + unsigned char eui[8]; + + nm_device_get_hw_address(dev, eui); + + 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); +} + + /* * nm_system_device_update_config_info * diff --git a/src/backends/NetworkManagerSlackware.c b/src/backends/NetworkManagerSlackware.c index 79d06acc54..86edd11e2d 100644 --- a/src/backends/NetworkManagerSlackware.c +++ b/src/backends/NetworkManagerSlackware.c @@ -185,6 +185,17 @@ void nm_system_restart_mdns_responder (void) } +/* + * 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) +{ +} + + /* * nm_system_device_add_default_route_via_device *