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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user