2008-05-06 Dan Williams <dcbw@redhat.com>

* src/dhcp-manager/nm-dhcp-manager.c
		- (nm_dhcp_manager_get_ip4_config): clean up; update for changes to
			NMIP4Config to support multiple IP addresses

	* src/NetworkManagerUtils.c
		- (nm_utils_merge_ip4_config): update for multiple IP addresses

	* src/nm-ip4-config.c
	  src/nm-ip4-config.h
		- Store a list of IPv4 address/netmask/gateway tuples
		- (nm_ip4_config_get_gateway, nm_ip4_config_set_gateway,
		   nm_ip4_config_get_netmask, nm_ip4_config_set_netmask,
		   nm_ip4_config_get_broadcast, nm_ip4_config_set_broadcast,
		   nm_ip4_config_set_address): remove
		- (nm_ip4_config_take_address, nm_ip4_config_add_address,
		   nm_ip4_config_replace_address, nm_ip4_config_get_num_addresses):
			new functions; handle multiple IPv4 addresses

	* src/nm-device.c
	  src/ppp-manager/nm-ppp-manager.c
	  src/vpn-manager/nm-vpn-connection.c
	  src/NetworkManagerPolicy.c
	  test/nm-tool.c
	  libnm-glib/libnm-glib-test.c
		- update for changes to NMIP4Config for multiple IPv4 addresses

	* src/NetworkManagerSystem.c
		- (nm_system_device_set_ip4_route): don't add the route if any address
			is on the same subnet as the destination
		- (check_one_address): ignore the exact match, just match family and
			interface index
		- (add_ip4_addresses): add all IPv4 addresses in an NMIP4Config to
			an interface
		- (nm_system_device_set_from_ip4_config): use add_ip4_addresses()
		- (nm_system_vpn_device_set_from_ip4_config): use add_ip4_addresses()

	* introspection/nm-ip4-config.xml
		- Remove 'address', 'gateway', 'netmask', and 'broadcast' properties
		- Add 'addresses' property which is an array of (uuu) tuples of
			address/netmask/gateway

	* libnm-util/nm-setting-ip4-config.c
		- (set_property): use ip-address <-> GValue converters from nm-utils.c

	* libnm-glib/nm-ip4-config.c
	  libnm-glib/nm-ip4-config.h
		- Handle D-Bus interface changes to support multiple IP addresses



git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3637 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
Dan Williams
2008-05-06 21:53:22 +00:00
parent 3cbc245395
commit 51503b2d5f
16 changed files with 567 additions and 593 deletions

View File

@@ -237,6 +237,8 @@ nm_ether_ntop (const struct ether_addr *mac)
void
nm_utils_merge_ip4_config (NMIP4Config *ip4_config, NMSettingIP4Config *setting)
{
GSList *iter;
if (!setting)
return; /* Defaults are just fine */
@@ -261,42 +263,44 @@ nm_utils_merge_ip4_config (NMIP4Config *ip4_config, NMSettingIP4Config *setting)
}
}
if (setting->dns_search) {
GSList *iter;
/* DNS search domains */
for (iter = setting->dns_search; iter; iter = iter->next) {
int i;
gboolean found = FALSE;
for (iter = setting->dns_search; iter; iter = iter->next) {
int i;
gboolean found = FALSE;
/* Avoid dupes */
for (i = 0; i < nm_ip4_config_get_num_searches (ip4_config); i++) {
const char *search = nm_ip4_config_get_search (ip4_config, i);
/* Avoid dupes */
for (i = 0; i < nm_ip4_config_get_num_searches (ip4_config); i++) {
const char *search = nm_ip4_config_get_search (ip4_config, i);
if (!strcmp (search, (char *) iter->data)) {
found = TRUE;
break;
}
if (!strcmp (search, (char *) iter->data)) {
found = TRUE;
break;
}
if (!found)
nm_ip4_config_add_search (ip4_config, (char *) iter->data);
}
if (!found)
nm_ip4_config_add_search (ip4_config, (char *) iter->data);
}
if (setting->addresses) {
/* FIXME; add support for more than one set of address/netmask/gateway for NMIP4Config */
NMSettingIP4Address *addr = (NMSettingIP4Address *) setting->addresses->data;
/* IPv4 addresses */
for (iter = setting->addresses; iter; iter = g_slist_next (iter)) {
NMSettingIP4Address *setting_addr = (NMSettingIP4Address *) iter->data;
guint32 i, num;
/* Avoid dupes, but override if anything is different */
if ( (nm_ip4_config_get_address (ip4_config) != addr->address)
|| (nm_ip4_config_get_netmask (ip4_config) != addr->netmask)
|| (addr->gateway && (nm_ip4_config_get_gateway (ip4_config) != addr->gateway))) {
nm_ip4_config_set_address (ip4_config, addr->address);
nm_ip4_config_set_netmask (ip4_config, addr->netmask);
num = nm_ip4_config_get_num_addresses (ip4_config);
for (i = 0; i < num; i++) {
const NMSettingIP4Address *cfg_addr;
if (addr->gateway)
nm_ip4_config_set_gateway (ip4_config, addr->gateway);
cfg_addr = nm_ip4_config_get_address (ip4_config, i);
/* Dupe, override with user-specified address */
if (cfg_addr->address == setting_addr->address) {
nm_ip4_config_replace_address (ip4_config, i, setting_addr);
break;
}
}
if (i == num)
nm_ip4_config_add_address (ip4_config, setting_addr);
}
}