diff --git a/ChangeLog b/ChangeLog index 7be2eceb59..9587f1dbb9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2004-10-14 Dan Williams + + Patch from Robert Paskowitz: + * NEWS + src/NetworkManagerDevice.[ch] + src/backends/NetworkManagerDebian.c + src/backends/NetworkManagerGentoo.c + src/backends/NetworkManagerRedHat.c + src/backends/NetworkManagerSlackware.c + - Add support for grabbing and using a broadcast address + from system config files + - Some Gentoo backend fixes for grabbing network config + - Fix LOG_WARN->LOG_WARNING + 2004-10-14 Dan Williams * NEWS: a few small fixes in the credits diff --git a/NEWS b/NEWS index 5472c4b6a7..fbc053eaa0 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ NetworkManager: * Lots of fixes, Dan Williams * Support static IP addresses, Dan Williams + - Get broadcast address from config files, Robert Paskowitz * Support for non-ESSID-broadcasting base stations, Dan Williams * Only accept and manager 802.3 and 802.11 devices, Dan Williams * Don't blow away an active wired connection on startup, Dan Williams diff --git a/src/NetworkManagerDevice.c b/src/NetworkManagerDevice.c index 70708c086c..5a35c844e4 100644 --- a/src/NetworkManagerDevice.c +++ b/src/NetworkManagerDevice.c @@ -94,6 +94,7 @@ typedef struct NMDeviceConfigInfo guint32 ip4_gateway; guint32 ip4_address; guint32 ip4_netmask; + guint32 ip4_broadcast; /* FIXME: ip6 stuff */ } NMDeviceConfigInfo; @@ -2504,6 +2505,19 @@ void nm_device_config_set_ip4_netmask (NMDevice *dev, guint32 netmask) dev->config_info.ip4_netmask = netmask; } +guint32 nm_device_config_get_ip4_broadcast (NMDevice *dev) +{ + g_return_val_if_fail (dev != NULL, 0); + + return (dev->config_info.ip4_broadcast); +} + +void nm_device_config_set_ip4_broadcast (NMDevice *dev, guint32 broadcast) +{ + g_return_if_fail (dev != NULL); + + dev->config_info.ip4_broadcast = broadcast; +} /****************************************/ diff --git a/src/NetworkManagerDevice.h b/src/NetworkManagerDevice.h index 6e5670b281..721d280c3a 100644 --- a/src/NetworkManagerDevice.h +++ b/src/NetworkManagerDevice.h @@ -116,6 +116,8 @@ guint32 nm_device_config_get_ip4_gateway (NMDevice *dev); void nm_device_config_set_ip4_gateway (NMDevice *dev, guint32 gateway); guint32 nm_device_config_get_ip4_netmask (NMDevice *dev); void nm_device_config_set_ip4_netmask (NMDevice *dev, guint32 netmask); +guint32 nm_device_config_get_ip4_broadcast (NMDevice *dev); +void nm_device_config_set_ip4_broadcast (NMDevice *dev, guint32 broadcast); /* Utility routines */ NMDevice * nm_get_device_by_udi (NMData *data, const char *udi); diff --git a/src/backends/NetworkManagerDebian.c b/src/backends/NetworkManagerDebian.c index 2293189ec8..ed1ec7baa4 100644 --- a/src/backends/NetworkManagerDebian.c +++ b/src/backends/NetworkManagerDebian.c @@ -172,7 +172,7 @@ void nm_system_device_flush_addresses (NMDevice *dev) */ gboolean nm_system_device_setup_static_ip4_config (NMDevice *dev) { - syslog (LOG_WARN, "nm_system_device_setup_static_ip4_config() is not implemented yet for this distribution.\n"); + syslog (LOG_WARNING, "nm_system_device_setup_static_ip4_config() is not implemented yet for this distribution.\n"); } diff --git a/src/backends/NetworkManagerGentoo.c b/src/backends/NetworkManagerGentoo.c index 6b30b88633..bfa30c1f65 100644 --- a/src/backends/NetworkManagerGentoo.c +++ b/src/backends/NetworkManagerGentoo.c @@ -194,20 +194,7 @@ void nm_system_device_flush_addresses (NMDevice *dev) */ gboolean nm_system_device_setup_static_ip4_config (NMDevice *dev) { - syslog (LOG_WARN, "nm_system_device_setup_static_ip4_config() is not implemented yet for this distribution.\n"); -} - - -/* - * nm_system_device_update_config_info - * - * 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_system_device_update_config_info (NMDevice *dev) -{ + syslog (LOG_WARNING, "nm_system_device_setup_static_ip4_config() is not implemented yet for this distribution.\n"); } @@ -300,6 +287,7 @@ void nm_system_device_update_config_info (NMDevice *dev) guint32 ip4_address = 0; guint32 ip4_netmask = 0; guint32 ip4_gateway = 0; + guint32 ip4_broadcast = 0; g_return_if_fail (dev != NULL); @@ -308,6 +296,7 @@ void nm_system_device_update_config_info (NMDevice *dev) nm_device_config_set_ip4_address (dev, 0); nm_device_config_set_ip4_gateway (dev, 0); nm_device_config_set_ip4_netmask (dev, 0); + nm_device_config_set_ip4_broadcast (dev, 0); /* Gentoo systems store this information in * /etc/conf.d/net, this is for all interfaces. @@ -351,8 +340,6 @@ void nm_system_device_update_config_info (NMDevice *dev) } else { - syslog (LOG_WARNING, "Device '%s' is setup as static, and we do not (yet) support that\n", - nm_device_get_iface (dev)); use_dhcp = FALSE; confToken = strtok(&buffer[strlen(confline) + 2], " "); while (count < 3) @@ -373,6 +360,7 @@ void nm_system_device_update_config_info (NMDevice *dev) else if (strcmp(confToken, "broadcast") == 0) { confToken = strtok(NULL, " "); + ip4_broadcast = inet_addr (confToken); count++; bNext = 1; } @@ -395,7 +383,6 @@ void nm_system_device_update_config_info (NMDevice *dev) sscanf(buffer, ipline, &ipa, &ipb, &ipc, &ipd); sprintf(ipline, "%d.%d.%d.%d", ipa, ipb, ipc, ipd); ip4_gateway = inet_addr (ipline); - syslog (LOG_WARNING, "Gateway(%s): %s", nm_device_get_iface (dev), ipline); } } } @@ -412,5 +399,7 @@ void nm_system_device_update_config_info (NMDevice *dev) nm_device_config_set_ip4_gateway (dev, ip4_gateway); if (ip4_netmask) nm_device_config_set_ip4_netmask (dev, ip4_netmask); + if (ip4_broadcast) + nm_device_config_set_ip4_broadcast (dev, ip4_broadcast); } } diff --git a/src/backends/NetworkManagerRedHat.c b/src/backends/NetworkManagerRedHat.c index a2fdc33e26..1dc9213e0a 100644 --- a/src/backends/NetworkManagerRedHat.c +++ b/src/backends/NetworkManagerRedHat.c @@ -212,6 +212,7 @@ gboolean nm_system_device_setup_static_ip4_config (NMDevice *dev) 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); /* Calculate the prefix (# bits stripped off by the netmask) */ for (i = 0; i < IPBITS; i++) @@ -220,8 +221,9 @@ gboolean nm_system_device_setup_static_ip4_config (NMDevice *dev) prefix--; } - /* Calculate the broadcast address */ - broadcast = ((addr & (int)netmask) | ~(int)netmask); + /* Calculate the broadcast address if the user didn't specify one */ + if (!broadcast) + broadcast = ((addr & (int)netmask) | ~(int)netmask); /* FIXME: what if some other device is already using our IP address? */ @@ -350,6 +352,7 @@ void nm_system_device_update_config_info (NMDevice *dev) guint32 ip4_address = 0; guint32 ip4_netmask = 0; guint32 ip4_gateway = 0; + guint32 ip4_broadcast = 0; g_return_if_fail (dev != NULL); @@ -358,6 +361,7 @@ void nm_system_device_update_config_info (NMDevice *dev) nm_device_config_set_ip4_address (dev, 0); nm_device_config_set_ip4_gateway (dev, 0); nm_device_config_set_ip4_netmask (dev, 0); + nm_device_config_set_ip4_broadcast (dev, 0); /* Red Hat/Fedora Core systems store this information in * /etc/sysconfig/network-scripts/ifcfg-* where * is the interface @@ -425,6 +429,13 @@ void nm_system_device_update_config_info (NMDevice *dev) } } + buf = svGetValue (file, "BROADCAST"); + if (buf) + { + ip4_broadcast = inet_addr (buf); + free (buf); + } + if (!use_dhcp && (!ip4_address || !ip4_gateway || !ip4_netmask)) { syslog (LOG_ERR, "Error: network configuration for device '%s' was invalid (non-DCHP configuration," @@ -440,6 +451,8 @@ void nm_system_device_update_config_info (NMDevice *dev) nm_device_config_set_ip4_gateway (dev, ip4_gateway); if (ip4_netmask) nm_device_config_set_ip4_netmask (dev, ip4_netmask); + if (ip4_broadcast) + nm_device_config_set_ip4_broadcast (dev, ip4_broadcast); #if 0 syslog (LOG_DEBUG, "------ Config (%s)", nm_device_get_iface (dev)); diff --git a/src/backends/NetworkManagerSlackware.c b/src/backends/NetworkManagerSlackware.c index c04db22069..be01b62fee 100644 --- a/src/backends/NetworkManagerSlackware.c +++ b/src/backends/NetworkManagerSlackware.c @@ -166,7 +166,7 @@ void nm_system_device_flush_addresses (NMDevice *dev) */ gboolean nm_system_device_setup_static_ip4_config (NMDevice *dev) { - syslog (LOG_WARN, "nm_system_device_setup_static_ip4_config() is not implemented yet for this distribution.\n"); + syslog (LOG_WARNING, "nm_system_device_setup_static_ip4_config() is not implemented yet for this distribution.\n"); }