summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2015-08-05 10:01:39 +0200
committerThomas Haller <thaller@redhat.com>2015-08-05 17:48:40 +0200
commit20acaf301610570e7dc65b73181c6dcf7395ff77 (patch)
tree81270e98d00394923d72db6d6a346641c4cfc4fd
parentc0138fa7e7a9fbd67e985e548e24270bf9a4434c (diff)
downloadNetworkManager-20acaf301610570e7dc65b73181c6dcf7395ff77.tar.gz
core: add @merge_flags argument to nm_ip4_config_merge() and nm_ip6_config_merge()
The new flags are not yet used, so there is no change in functionality. The flags NM_IP_CONFIG_MERGE_NO_ROUTES and NM_IP_CONFIG_MERGE_NO_DNS go together with the 'ignore-auto-routes' and 'ignore-auto-dns' setting. Note that for IPv4, NM_IP_CONFIG_MERGE_NO_DNS also ignores NIS, WINS, and dns-options. This is different from current other places that handle 'ignore-auto-dns' and only care about nameservers, domains, and searches.
-rw-r--r--src/devices/nm-device.c22
-rw-r--r--src/nm-iface-helper.c4
-rw-r--r--src/nm-ip4-config.c49
-rw-r--r--src/nm-ip4-config.h2
-rw-r--r--src/nm-ip6-config.c27
-rw-r--r--src/nm-ip6-config.h2
-rw-r--r--src/nm-types.h6
-rw-r--r--src/tests/test-ip4-config.c4
-rw-r--r--src/vpn-manager/nm-vpn-connection.c4
9 files changed, 75 insertions, 45 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 78c9e14a43..9d87a47f0f 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -3440,17 +3440,17 @@ ip4_config_merge_and_apply (NMDevice *self,
ensure_con_ip4_config (self);
if (priv->dev_ip4_config)
- nm_ip4_config_merge (composite, priv->dev_ip4_config);
+ nm_ip4_config_merge (composite, priv->dev_ip4_config, NM_IP_CONFIG_MERGE_DEFAULT);
if (priv->vpn4_config)
- nm_ip4_config_merge (composite, priv->vpn4_config);
+ nm_ip4_config_merge (composite, priv->vpn4_config, NM_IP_CONFIG_MERGE_DEFAULT);
if (priv->ext_ip4_config)
- nm_ip4_config_merge (composite, priv->ext_ip4_config);
+ nm_ip4_config_merge (composite, priv->ext_ip4_config, NM_IP_CONFIG_MERGE_DEFAULT);
/* Merge WWAN config *last* to ensure modem-given settings overwrite
* any external stuff set by pppd or other scripts.
*/
if (priv->wwan_ip4_config)
- nm_ip4_config_merge (composite, priv->wwan_ip4_config);
+ nm_ip4_config_merge (composite, priv->wwan_ip4_config, NM_IP_CONFIG_MERGE_DEFAULT);
/* Apply ignore-auto-routes and ignore-auto-dns settings */
connection = nm_device_get_connection (self);
@@ -3471,7 +3471,7 @@ ip4_config_merge_and_apply (NMDevice *self,
/* Merge user overrides into the composite config. For assumed connections,
* con_ip4_config is empty. */
if (priv->con_ip4_config)
- nm_ip4_config_merge (composite, priv->con_ip4_config);
+ nm_ip4_config_merge (composite, priv->con_ip4_config, NM_IP_CONFIG_MERGE_DEFAULT);
/* Add the default route.
@@ -4049,19 +4049,19 @@ ip6_config_merge_and_apply (NMDevice *self,
/* Merge all the IP configs into the composite config */
if (priv->ac_ip6_config)
- nm_ip6_config_merge (composite, priv->ac_ip6_config);
+ nm_ip6_config_merge (composite, priv->ac_ip6_config, NM_IP_CONFIG_MERGE_DEFAULT);
if (priv->dhcp6_ip6_config)
- nm_ip6_config_merge (composite, priv->dhcp6_ip6_config);
+ nm_ip6_config_merge (composite, priv->dhcp6_ip6_config, NM_IP_CONFIG_MERGE_DEFAULT);
if (priv->vpn6_config)
- nm_ip6_config_merge (composite, priv->vpn6_config);
+ nm_ip6_config_merge (composite, priv->vpn6_config, NM_IP_CONFIG_MERGE_DEFAULT);
if (priv->ext_ip6_config)
- nm_ip6_config_merge (composite, priv->ext_ip6_config);
+ nm_ip6_config_merge (composite, priv->ext_ip6_config, NM_IP_CONFIG_MERGE_DEFAULT);
/* Merge WWAN config *last* to ensure modem-given settings overwrite
* any external stuff set by pppd or other scripts.
*/
if (priv->wwan_ip6_config)
- nm_ip6_config_merge (composite, priv->wwan_ip6_config);
+ nm_ip6_config_merge (composite, priv->wwan_ip6_config, NM_IP_CONFIG_MERGE_DEFAULT);
/* Apply ignore-auto-routes and ignore-auto-dns settings */
connection = nm_device_get_connection (self);
@@ -4082,7 +4082,7 @@ ip6_config_merge_and_apply (NMDevice *self,
/* Merge user overrides into the composite config. For assumed connections,
* con_ip6_config is empty. */
if (priv->con_ip6_config)
- nm_ip6_config_merge (composite, priv->con_ip6_config);
+ nm_ip6_config_merge (composite, priv->con_ip6_config, NM_IP_CONFIG_MERGE_DEFAULT);
/* Add the default route.
*
diff --git a/src/nm-iface-helper.c b/src/nm-iface-helper.c
index 6b1710f670..1b5fdc5a31 100644
--- a/src/nm-iface-helper.c
+++ b/src/nm-iface-helper.c
@@ -101,7 +101,7 @@ dhcp4_state_changed (NMDhcpClient *client,
if (last_config)
nm_ip4_config_subtract (existing, last_config);
- nm_ip4_config_merge (existing, ip4_config);
+ nm_ip4_config_merge (existing, ip4_config, NM_IP_CONFIG_MERGE_DEFAULT);
if (!nm_ip4_config_commit (existing, ifindex, TRUE, global_opt.priority_v4))
nm_log_warn (LOGD_DHCP4, "(%s): failed to apply DHCPv4 config", global_opt.ifname);
@@ -238,7 +238,7 @@ rdisc_config_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, gpointer user_da
if (last_config)
nm_ip6_config_subtract (existing, last_config);
- nm_ip6_config_merge (existing, ip6_config);
+ nm_ip6_config_merge (existing, ip6_config, NM_IP_CONFIG_MERGE_DEFAULT);
if (!nm_ip6_config_commit (existing, ifindex, TRUE))
nm_log_warn (LOGD_IP6, "(%s): failed to apply IPv6 config", global_opt.ifname);
diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c
index f365fd065c..f660407e39 100644
--- a/src/nm-ip4-config.c
+++ b/src/nm-ip4-config.c
@@ -35,6 +35,7 @@
#include "nm-core-internal.h"
#include "nm-route-manager.h"
#include "nm-core-internal.h"
+#include "nm-macros-internal.h"
G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, NM_TYPE_EXPORTED_OBJECT)
@@ -562,7 +563,7 @@ nm_ip4_config_create_setting (const NMIP4Config *config)
/******************************************************************/
void
-nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src)
+nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src, NMIPConfigMergeFlags merge_flags)
{
NMIP4ConfigPrivate *dst_priv, *src_priv;
guint32 i;
@@ -580,16 +581,20 @@ nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src)
nm_ip4_config_add_address (dst, nm_ip4_config_get_address (src, i));
/* nameservers */
- for (i = 0; i < nm_ip4_config_get_num_nameservers (src); i++)
- nm_ip4_config_add_nameserver (dst, nm_ip4_config_get_nameserver (src, i));
+ if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
+ for (i = 0; i < nm_ip4_config_get_num_nameservers (src); i++)
+ nm_ip4_config_add_nameserver (dst, nm_ip4_config_get_nameserver (src, i));
+ }
/* default gateway */
if (nm_ip4_config_has_gateway (src))
nm_ip4_config_set_gateway (dst, nm_ip4_config_get_gateway (src));
/* routes */
- for (i = 0; i < nm_ip4_config_get_num_routes (src); i++)
- nm_ip4_config_add_route (dst, nm_ip4_config_get_route (src, i));
+ if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_ROUTES)) {
+ for (i = 0; i < nm_ip4_config_get_num_routes (src); i++)
+ nm_ip4_config_add_route (dst, nm_ip4_config_get_route (src, i));
+ }
if (dst_priv->route_metric == -1)
dst_priv->route_metric = src_priv->route_metric;
@@ -597,16 +602,22 @@ nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src)
dst_priv->route_metric = MIN (dst_priv->route_metric, src_priv->route_metric);
/* domains */
- for (i = 0; i < nm_ip4_config_get_num_domains (src); i++)
- nm_ip4_config_add_domain (dst, nm_ip4_config_get_domain (src, i));
+ if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
+ for (i = 0; i < nm_ip4_config_get_num_domains (src); i++)
+ nm_ip4_config_add_domain (dst, nm_ip4_config_get_domain (src, i));
+ }
/* dns searches */
- for (i = 0; i < nm_ip4_config_get_num_searches (src); i++)
- nm_ip4_config_add_search (dst, nm_ip4_config_get_search (src, i));
+ if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
+ for (i = 0; i < nm_ip4_config_get_num_searches (src); i++)
+ nm_ip4_config_add_search (dst, nm_ip4_config_get_search (src, i));
+ }
/* dns options */
- for (i = 0; i < nm_ip4_config_get_num_dns_options (src); i++)
- nm_ip4_config_add_dns_option (dst, nm_ip4_config_get_dns_option (src, i));
+ if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
+ for (i = 0; i < nm_ip4_config_get_num_dns_options (src); i++)
+ nm_ip4_config_add_dns_option (dst, nm_ip4_config_get_dns_option (src, i));
+ }
/* MSS */
if (nm_ip4_config_get_mss (src))
@@ -618,15 +629,19 @@ nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src)
nm_ip4_config_get_mtu_source (src));
/* NIS */
- for (i = 0; i < nm_ip4_config_get_num_nis_servers (src); i++)
- nm_ip4_config_add_nis_server (dst, nm_ip4_config_get_nis_server (src, i));
+ if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
+ for (i = 0; i < nm_ip4_config_get_num_nis_servers (src); i++)
+ nm_ip4_config_add_nis_server (dst, nm_ip4_config_get_nis_server (src, i));
- if (nm_ip4_config_get_nis_domain (src))
- nm_ip4_config_set_nis_domain (dst, nm_ip4_config_get_nis_domain (src));
+ if (nm_ip4_config_get_nis_domain (src))
+ nm_ip4_config_set_nis_domain (dst, nm_ip4_config_get_nis_domain (src));
+ }
/* WINS */
- for (i = 0; i < nm_ip4_config_get_num_wins (src); i++)
- nm_ip4_config_add_wins (dst, nm_ip4_config_get_wins (src, i));
+ if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
+ for (i = 0; i < nm_ip4_config_get_num_wins (src); i++)
+ nm_ip4_config_add_wins (dst, nm_ip4_config_get_wins (src, i));
+ }
/* metered flag */
nm_ip4_config_set_metered (dst, nm_ip4_config_get_metered (dst) ||
diff --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h
index bffebe2cd8..1c76b97e99 100644
--- a/src/nm-ip4-config.h
+++ b/src/nm-ip4-config.h
@@ -70,7 +70,7 @@ void nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIPConfig *settin
NMSetting *nm_ip4_config_create_setting (const NMIP4Config *config);
/* Utility functions */
-void nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src);
+void nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src, NMIPConfigMergeFlags merge_flags);
void nm_ip4_config_subtract (NMIP4Config *dst, const NMIP4Config *src);
void nm_ip4_config_intersect (NMIP4Config *dst, const NMIP4Config *src);
gboolean nm_ip4_config_replace (NMIP4Config *dst, const NMIP4Config *src, gboolean *relevant_changes);
diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c
index b4b5b3e19c..4e37a73b17 100644
--- a/src/nm-ip6-config.c
+++ b/src/nm-ip6-config.c
@@ -34,6 +34,7 @@
#include "nm-route-manager.h"
#include "nm-core-internal.h"
#include "NetworkManagerUtils.h"
+#include "nm-macros-internal.h"
G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, NM_TYPE_EXPORTED_OBJECT)
@@ -640,7 +641,7 @@ nm_ip6_config_create_setting (const NMIP6Config *config)
/******************************************************************/
void
-nm_ip6_config_merge (NMIP6Config *dst, const NMIP6Config *src)
+nm_ip6_config_merge (NMIP6Config *dst, const NMIP6Config *src, NMIPConfigMergeFlags merge_flags)
{
NMIP6ConfigPrivate *dst_priv, *src_priv;
guint32 i;
@@ -666,8 +667,10 @@ nm_ip6_config_merge (NMIP6Config *dst, const NMIP6Config *src)
nm_ip6_config_set_gateway (dst, nm_ip6_config_get_gateway (src));
/* routes */
- for (i = 0; i < nm_ip6_config_get_num_routes (src); i++)
- nm_ip6_config_add_route (dst, nm_ip6_config_get_route (src, i));
+ if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_ROUTES)) {
+ for (i = 0; i < nm_ip6_config_get_num_routes (src); i++)
+ nm_ip6_config_add_route (dst, nm_ip6_config_get_route (src, i));
+ }
if (dst_priv->route_metric == -1)
dst_priv->route_metric = src_priv->route_metric;
@@ -675,16 +678,22 @@ nm_ip6_config_merge (NMIP6Config *dst, const NMIP6Config *src)
dst_priv->route_metric = MIN (dst_priv->route_metric, src_priv->route_metric);
/* domains */
- for (i = 0; i < nm_ip6_config_get_num_domains (src); i++)
- nm_ip6_config_add_domain (dst, nm_ip6_config_get_domain (src, i));
+ if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
+ for (i = 0; i < nm_ip6_config_get_num_domains (src); i++)
+ nm_ip6_config_add_domain (dst, nm_ip6_config_get_domain (src, i));
+ }
/* dns searches */
- for (i = 0; i < nm_ip6_config_get_num_searches (src); i++)
- nm_ip6_config_add_search (dst, nm_ip6_config_get_search (src, i));
+ if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
+ for (i = 0; i < nm_ip6_config_get_num_searches (src); i++)
+ nm_ip6_config_add_search (dst, nm_ip6_config_get_search (src, i));
+ }
/* dns options */
- for (i = 0; i < nm_ip6_config_get_num_dns_options (src); i++)
- nm_ip6_config_add_dns_option (dst, nm_ip6_config_get_dns_option (src, i));
+ if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
+ for (i = 0; i < nm_ip6_config_get_num_dns_options (src); i++)
+ nm_ip6_config_add_dns_option (dst, nm_ip6_config_get_dns_option (src, i));
+ }
if (nm_ip6_config_get_mss (src))
nm_ip6_config_set_mss (dst, nm_ip6_config_get_mss (src));
diff --git a/src/nm-ip6-config.h b/src/nm-ip6-config.h
index 98a21e5c8f..751d450575 100644
--- a/src/nm-ip6-config.h
+++ b/src/nm-ip6-config.h
@@ -71,7 +71,7 @@ void nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIPConfig *settin
NMSetting *nm_ip6_config_create_setting (const NMIP6Config *config);
/* Utility functions */
-void nm_ip6_config_merge (NMIP6Config *dst, const NMIP6Config *src);
+void nm_ip6_config_merge (NMIP6Config *dst, const NMIP6Config *src, NMIPConfigMergeFlags merge_flags);
void nm_ip6_config_subtract (NMIP6Config *dst, const NMIP6Config *src);
void nm_ip6_config_intersect (NMIP6Config *dst, const NMIP6Config *src);
gboolean nm_ip6_config_replace (NMIP6Config *dst, const NMIP6Config *src, gboolean *relevant_changes);
diff --git a/src/nm-types.h b/src/nm-types.h
index 7e9d488a18..b8ed972ee9 100644
--- a/src/nm-types.h
+++ b/src/nm-types.h
@@ -132,6 +132,12 @@ typedef enum {
NMP_OBJECT_TYPE_MAX = __NMP_OBJECT_TYPE_LAST - 1,
} NMPObjectType;
+typedef enum {
+ NM_IP_CONFIG_MERGE_DEFAULT = 0,
+ NM_IP_CONFIG_MERGE_NO_ROUTES = (1LL << 0),
+ NM_IP_CONFIG_MERGE_NO_DNS = (1LL << 1),
+} NMIPConfigMergeFlags;
+
/* settings */
typedef struct _NMAgentManager NMAgentManager;
typedef struct _NMSecretAgent NMSecretAgent;
diff --git a/src/tests/test-ip4-config.c b/src/tests/test-ip4-config.c
index 828bb3417a..abf623b15a 100644
--- a/src/tests/test-ip4-config.c
+++ b/src/tests/test-ip4-config.c
@@ -318,12 +318,12 @@ test_merge_subtract_mss_mtu (void)
nm_ip4_config_set_mss (cfg3, expected_mss3);
nm_ip4_config_set_mtu (cfg3, expected_mtu3, NM_IP_CONFIG_SOURCE_UNKNOWN);
- nm_ip4_config_merge (cfg1, cfg2);
+ nm_ip4_config_merge (cfg1, cfg2, NM_IP_CONFIG_MERGE_DEFAULT);
/* ensure MSS and MTU are in cfg1 */
g_assert_cmpuint (nm_ip4_config_get_mss (cfg1), ==, expected_mss2);
g_assert_cmpuint (nm_ip4_config_get_mtu (cfg1), ==, expected_mtu2);
- nm_ip4_config_merge (cfg1, cfg3);
+ nm_ip4_config_merge (cfg1, cfg3, NM_IP_CONFIG_MERGE_DEFAULT);
/* ensure again the MSS and MTU in cfg1 got overriden */
g_assert_cmpuint (nm_ip4_config_get_mss (cfg1), ==, expected_mss3);
g_assert_cmpuint (nm_ip4_config_get_mtu (cfg1), ==, expected_mtu3);
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index 3d14fb2db2..2a1a16a23a 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -919,12 +919,12 @@ apply_parent_device_config (NMVpnConnection *connection)
ifindex = nm_device_get_ip_ifindex (parent_dev);
if (priv->ip4_config) {
vpn4_parent_config = nm_ip4_config_new (ifindex);
- nm_ip4_config_merge (vpn4_parent_config, priv->ip4_config);
+ nm_ip4_config_merge (vpn4_parent_config, priv->ip4_config, NM_IP_CONFIG_MERGE_DEFAULT);
nm_ip4_config_set_gateway (vpn4_parent_config, 0);
}
if (priv->ip6_config) {
vpn6_parent_config = nm_ip6_config_new (ifindex);
- nm_ip6_config_merge (vpn6_parent_config, priv->ip6_config);
+ nm_ip6_config_merge (vpn6_parent_config, priv->ip6_config, NM_IP_CONFIG_MERGE_DEFAULT);
nm_ip6_config_set_gateway (vpn6_parent_config, NULL);
}
}