2008-03-12 Dan Williams <dcbw@redhat.com>

* src/nm-device.c
		- (merge_ip4_config): avoid duplicates



git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3444 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
Dan Williams 2008-03-13 03:52:50 +00:00
parent 1cfb4db69f
commit 3ba6495785
2 changed files with 48 additions and 9 deletions

View file

@ -1,3 +1,8 @@
2008-03-12 Dan Williams <dcbw@redhat.com>
* src/nm-device.c
- (merge_ip4_config): avoid duplicates
2008-03-12 Dan Williams <dcbw@redhat.com>
* libnm-util/nm-setting-ip4-config.c

View file

@ -658,28 +658,62 @@ merge_ip4_config (NMIP4Config *ip4_config, NMSettingIP4Config *setting)
return; /* Defaults are just fine */
if (setting->dns) {
int i;
int i, j;
for (i = 0; i < setting->dns->len; i++)
nm_ip4_config_add_nameserver (ip4_config, g_array_index (setting->dns, guint32, i));
for (i = 0; i < setting->dns->len; i++) {
guint32 ns;
gboolean found = FALSE;
/* Avoid dupes */
ns = g_array_index (setting->dns, guint32, i);
for (j = 0; j < nm_ip4_config_get_num_nameservers (ip4_config); j++) {
if (nm_ip4_config_get_nameserver (ip4_config, j) == ns) {
found = TRUE;
break;
}
}
if (!found)
nm_ip4_config_add_nameserver (ip4_config, ns);
}
}
if (setting->dns_search) {
GSList *iter;
for (iter = setting->dns_search; iter; iter = iter->next)
nm_ip4_config_add_domain (ip4_config, (char *) iter->data);
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);
if (!strcmp (search, (char *) iter->data)) {
found = TRUE;
break;
}
}
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;
nm_ip4_config_set_address (ip4_config, addr->address);
nm_ip4_config_set_netmask (ip4_config, addr->netmask);
/* 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);
if (addr->gateway)
nm_ip4_config_set_gateway (ip4_config, addr->gateway);
if (addr->gateway)
nm_ip4_config_set_gateway (ip4_config, addr->gateway);
}
}
}