2008-04-20 Dan Williams <dcbw@redhat.com>
* src/NetworkManagerUtils.c src/NetworkManagerUtils.h - (nm_utils_merge_ip4_config): new function; merge settings from an NMSettingIP4Config to an NMIP4Config object * src/nm-device.c - (merge_ip4_config): move to NetworkManagerUtils.c * src/vpn-manager/nm-vpn-connection.c - (nm_vpn_connection_ip4_config_get): merge in user-specified settings too git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3580 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
@@ -361,3 +361,70 @@ nm_ether_ntop (const struct ether_addr *mac)
|
||||
mac->ether_addr_octet[4], mac->ether_addr_octet[5]);
|
||||
}
|
||||
|
||||
void
|
||||
nm_utils_merge_ip4_config (NMIP4Config *ip4_config, NMSettingIP4Config *setting)
|
||||
{
|
||||
if (!setting)
|
||||
return; /* Defaults are just fine */
|
||||
|
||||
if (setting->dns) {
|
||||
int i, j;
|
||||
|
||||
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) {
|
||||
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;
|
||||
|
||||
/* 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user