trivial: move a couple of functions to nm-ip[46]-config
Note that this patch doesn't effectively change any code. Functions moved from nm-system: * nm_system_apply_ip?_config → nm_ip?_config_commit * ip?_dest_in_same_subnet → nm_ip?_config_destination_is_direct Functions moved from NetworkManagerUtils: * nm_utils_merge_ip?_config → nm_ip?_config_merge_setting Functions renamed (and moved down to form one group): * nm_ip?_config_new_for_interface → nm_ip?_config_capture (The rationale for the rename is that from the achitectural point of view it doesn't matter whether the function creates a new object or updates an existing one. After the rename, it's obvious that nm_ip?_config_capture() and nm_ip?_config_commit() are counterparts of each other.)
This commit is contained in:
@@ -153,229 +153,6 @@ nm_utils_ip4_prefix_to_netmask (guint32 prefix)
|
||||
return (guint32) htonl (netmask);
|
||||
}
|
||||
|
||||
void
|
||||
nm_utils_merge_ip4_config (NMIP4Config *ip4_config, NMSettingIP4Config *setting)
|
||||
{
|
||||
int i, j;
|
||||
gboolean setting_never_default;
|
||||
|
||||
if (!setting)
|
||||
return; /* Defaults are just fine */
|
||||
|
||||
if (nm_setting_ip4_config_get_ignore_auto_dns (setting)) {
|
||||
nm_ip4_config_reset_nameservers (ip4_config);
|
||||
nm_ip4_config_reset_domains (ip4_config);
|
||||
nm_ip4_config_reset_searches (ip4_config);
|
||||
}
|
||||
|
||||
if (nm_setting_ip4_config_get_ignore_auto_routes (setting))
|
||||
nm_ip4_config_reset_routes (ip4_config);
|
||||
|
||||
for (i = 0; i < nm_setting_ip4_config_get_num_dns (setting); i++) {
|
||||
guint32 ns;
|
||||
gboolean found = FALSE;
|
||||
|
||||
/* Avoid dupes */
|
||||
ns = nm_setting_ip4_config_get_dns (setting, 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);
|
||||
}
|
||||
|
||||
/* DNS search domains */
|
||||
for (i = 0; i < nm_setting_ip4_config_get_num_dns_searches (setting); i++) {
|
||||
const char *search = nm_setting_ip4_config_get_dns_search (setting, i);
|
||||
gboolean found = FALSE;
|
||||
|
||||
/* Avoid dupes */
|
||||
for (j = 0; j < nm_ip4_config_get_num_searches (ip4_config); j++) {
|
||||
if (!strcmp (search, nm_ip4_config_get_search (ip4_config, j))) {
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
nm_ip4_config_add_search (ip4_config, search);
|
||||
}
|
||||
|
||||
/* IPv4 addresses */
|
||||
for (i = 0; i < nm_setting_ip4_config_get_num_addresses (setting); i++) {
|
||||
NMIP4Address *setting_addr = nm_setting_ip4_config_get_address (setting, i);
|
||||
guint32 num;
|
||||
|
||||
num = nm_ip4_config_get_num_addresses (ip4_config);
|
||||
for (j = 0; j < num; j++) {
|
||||
NMIP4Address *cfg_addr = nm_ip4_config_get_address (ip4_config, j);
|
||||
|
||||
/* Dupe, override with user-specified address */
|
||||
if (nm_ip4_address_get_address (cfg_addr) == nm_ip4_address_get_address (setting_addr)) {
|
||||
nm_ip4_config_replace_address (ip4_config, j, setting_addr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (j == num)
|
||||
nm_ip4_config_add_address (ip4_config, setting_addr);
|
||||
}
|
||||
|
||||
/* IPv4 routes */
|
||||
for (i = 0; i < nm_setting_ip4_config_get_num_routes (setting); i++) {
|
||||
NMIP4Route *setting_route = nm_setting_ip4_config_get_route (setting, i);
|
||||
guint32 num;
|
||||
|
||||
num = nm_ip4_config_get_num_routes (ip4_config);
|
||||
for (j = 0; j < num; j++) {
|
||||
NMIP4Route *cfg_route = nm_ip4_config_get_route (ip4_config, j);
|
||||
|
||||
/* Dupe, override with user-specified route */
|
||||
if ( (nm_ip4_route_get_dest (cfg_route) == nm_ip4_route_get_dest (setting_route))
|
||||
&& (nm_ip4_route_get_prefix (cfg_route) == nm_ip4_route_get_prefix (setting_route))
|
||||
&& (nm_ip4_route_get_next_hop (cfg_route) == nm_ip4_route_get_next_hop (setting_route))) {
|
||||
nm_ip4_config_replace_route (ip4_config, j, setting_route);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (j == num)
|
||||
nm_ip4_config_add_route (ip4_config, setting_route);
|
||||
}
|
||||
|
||||
setting_never_default = nm_setting_ip4_config_get_never_default (setting);
|
||||
|
||||
if (nm_setting_ip4_config_get_ignore_auto_routes (setting))
|
||||
nm_ip4_config_set_never_default (ip4_config, setting_never_default);
|
||||
else {
|
||||
if (setting_never_default)
|
||||
nm_ip4_config_set_never_default (ip4_config, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
ip6_addresses_equal (const struct in6_addr *a, const struct in6_addr *b)
|
||||
{
|
||||
return memcmp (a, b, sizeof (struct in6_addr)) == 0;
|
||||
}
|
||||
|
||||
/* This is exactly identical to nm_utils_merge_ip4_config, with s/4/6/,
|
||||
* except that we can't compare addresses with ==.
|
||||
*/
|
||||
void
|
||||
nm_utils_merge_ip6_config (NMIP6Config *ip6_config, NMSettingIP6Config *setting)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
if (!setting)
|
||||
return; /* Defaults are just fine */
|
||||
|
||||
if (nm_setting_ip6_config_get_ignore_auto_dns (setting)) {
|
||||
nm_ip6_config_reset_nameservers (ip6_config);
|
||||
nm_ip6_config_reset_domains (ip6_config);
|
||||
nm_ip6_config_reset_searches (ip6_config);
|
||||
}
|
||||
|
||||
if (nm_setting_ip6_config_get_ignore_auto_routes (setting))
|
||||
nm_ip6_config_reset_routes (ip6_config);
|
||||
|
||||
for (i = 0; i < nm_setting_ip6_config_get_num_dns (setting); i++) {
|
||||
const struct in6_addr *ns;
|
||||
gboolean found = FALSE;
|
||||
|
||||
/* Avoid dupes */
|
||||
ns = nm_setting_ip6_config_get_dns (setting, i);
|
||||
for (j = 0; j < nm_ip6_config_get_num_nameservers (ip6_config); j++) {
|
||||
if (ip6_addresses_equal (nm_ip6_config_get_nameserver (ip6_config, j), ns)) {
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
nm_ip6_config_add_nameserver (ip6_config, ns);
|
||||
}
|
||||
|
||||
/* DNS search domains */
|
||||
for (i = 0; i < nm_setting_ip6_config_get_num_dns_searches (setting); i++) {
|
||||
const char *search = nm_setting_ip6_config_get_dns_search (setting, i);
|
||||
gboolean found = FALSE;
|
||||
|
||||
/* Avoid dupes */
|
||||
for (j = 0; j < nm_ip6_config_get_num_searches (ip6_config); j++) {
|
||||
if (!strcmp (search, nm_ip6_config_get_search (ip6_config, j))) {
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
nm_ip6_config_add_search (ip6_config, search);
|
||||
}
|
||||
|
||||
/* IPv6 addresses */
|
||||
for (i = 0; i < nm_setting_ip6_config_get_num_addresses (setting); i++) {
|
||||
NMIP6Address *setting_addr = nm_setting_ip6_config_get_address (setting, i);
|
||||
guint32 num;
|
||||
|
||||
num = nm_ip6_config_get_num_addresses (ip6_config);
|
||||
for (j = 0; j < num; j++) {
|
||||
NMIP6Address *cfg_addr = nm_ip6_config_get_address (ip6_config, j);
|
||||
|
||||
/* Dupe, override with user-specified address */
|
||||
if (ip6_addresses_equal (nm_ip6_address_get_address (cfg_addr), nm_ip6_address_get_address (setting_addr))) {
|
||||
nm_ip6_config_replace_address (ip6_config, j, setting_addr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (j == num)
|
||||
nm_ip6_config_add_address (ip6_config, setting_addr);
|
||||
}
|
||||
|
||||
/* IPv6 routes */
|
||||
for (i = 0; i < nm_setting_ip6_config_get_num_routes (setting); i++) {
|
||||
NMIP6Route *setting_route = nm_setting_ip6_config_get_route (setting, i);
|
||||
guint32 num;
|
||||
|
||||
num = nm_ip6_config_get_num_routes (ip6_config);
|
||||
for (j = 0; j < num; j++) {
|
||||
NMIP6Route *cfg_route = nm_ip6_config_get_route (ip6_config, j);
|
||||
|
||||
/* Dupe, override with user-specified route */
|
||||
if ( ip6_addresses_equal (nm_ip6_route_get_dest (cfg_route), nm_ip6_route_get_dest (setting_route))
|
||||
&& (nm_ip6_route_get_prefix (cfg_route) == nm_ip6_route_get_prefix (setting_route))
|
||||
&& ip6_addresses_equal (nm_ip6_route_get_next_hop (cfg_route), nm_ip6_route_get_next_hop (setting_route))) {
|
||||
nm_ip6_config_replace_route (ip6_config, j, setting_route);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (j == num)
|
||||
nm_ip6_config_add_route (ip6_config, setting_route);
|
||||
}
|
||||
|
||||
if (nm_setting_ip6_config_get_never_default (setting))
|
||||
nm_ip6_config_set_never_default (ip6_config, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_match_spec_string (const GSList *specs, const char *match)
|
||||
{
|
||||
const GSList *iter;
|
||||
|
||||
for (iter = specs; iter; iter = g_slist_next (iter)) {
|
||||
if (!g_ascii_strcasecmp ((const char *) iter->data, match))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr)
|
||||
{
|
||||
|
Reference in New Issue
Block a user