mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-09 04:48:10 +02:00
device: merge branch 'th/device-ignore-auto-bgo752546'
https://bugzilla.gnome.org/show_bug.cgi?id=752546
(cherry picked from commit 558117222f)
This commit is contained in:
commit
bcc94bb989
9 changed files with 115 additions and 80 deletions
|
|
@ -3238,6 +3238,8 @@ ip4_config_merge_and_apply (NMDevice *self,
|
||||||
guint32 gateway;
|
guint32 gateway;
|
||||||
gboolean connection_has_default_route, connection_is_never_default;
|
gboolean connection_has_default_route, connection_is_never_default;
|
||||||
gboolean routes_full_sync;
|
gboolean routes_full_sync;
|
||||||
|
gboolean ignore_auto_routes = FALSE;
|
||||||
|
gboolean ignore_auto_dns = FALSE;
|
||||||
|
|
||||||
/* Merge all the configs into the composite config */
|
/* Merge all the configs into the composite config */
|
||||||
if (config) {
|
if (config) {
|
||||||
|
|
@ -3245,44 +3247,45 @@ ip4_config_merge_and_apply (NMDevice *self,
|
||||||
priv->dev_ip4_config = g_object_ref (config);
|
priv->dev_ip4_config = g_object_ref (config);
|
||||||
}
|
}
|
||||||
|
|
||||||
composite = nm_ip4_config_new ();
|
|
||||||
|
|
||||||
if (commit)
|
|
||||||
ensure_con_ip4_config (self);
|
|
||||||
|
|
||||||
if (priv->dev_ip4_config)
|
|
||||||
nm_ip4_config_merge (composite, priv->dev_ip4_config);
|
|
||||||
if (priv->vpn4_config)
|
|
||||||
nm_ip4_config_merge (composite, priv->vpn4_config);
|
|
||||||
if (priv->ext_ip4_config)
|
|
||||||
nm_ip4_config_merge (composite, priv->ext_ip4_config);
|
|
||||||
|
|
||||||
/* 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);
|
|
||||||
|
|
||||||
/* Apply ignore-auto-routes and ignore-auto-dns settings */
|
/* Apply ignore-auto-routes and ignore-auto-dns settings */
|
||||||
connection = nm_device_get_connection (self);
|
connection = nm_device_get_connection (self);
|
||||||
if (connection) {
|
if (connection) {
|
||||||
NMSettingIPConfig *s_ip4 = nm_connection_get_setting_ip4_config (connection);
|
NMSettingIPConfig *s_ip4 = nm_connection_get_setting_ip4_config (connection);
|
||||||
|
|
||||||
if (s_ip4) {
|
if (s_ip4) {
|
||||||
if (nm_setting_ip_config_get_ignore_auto_routes (s_ip4))
|
ignore_auto_routes = nm_setting_ip_config_get_ignore_auto_routes (s_ip4);
|
||||||
nm_ip4_config_reset_routes (composite);
|
ignore_auto_dns = nm_setting_ip_config_get_ignore_auto_dns (s_ip4);
|
||||||
if (nm_setting_ip_config_get_ignore_auto_dns (s_ip4)) {
|
|
||||||
nm_ip4_config_reset_nameservers (composite);
|
|
||||||
nm_ip4_config_reset_domains (composite);
|
|
||||||
nm_ip4_config_reset_searches (composite);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
composite = nm_ip4_config_new ();
|
||||||
|
|
||||||
|
if (commit)
|
||||||
|
ensure_con_ip4_config (self);
|
||||||
|
|
||||||
|
if (priv->dev_ip4_config) {
|
||||||
|
nm_ip4_config_merge (composite, priv->dev_ip4_config,
|
||||||
|
(ignore_auto_routes ? NM_IP_CONFIG_MERGE_NO_ROUTES : 0)
|
||||||
|
| (ignore_auto_dns ? NM_IP_CONFIG_MERGE_NO_DNS : 0));
|
||||||
|
}
|
||||||
|
if (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_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,
|
||||||
|
(ignore_auto_routes ? NM_IP_CONFIG_MERGE_NO_ROUTES : 0)
|
||||||
|
| (ignore_auto_dns ? NM_IP_CONFIG_MERGE_NO_DNS : 0));
|
||||||
|
}
|
||||||
|
|
||||||
/* Merge user overrides into the composite config. For assumed connections,
|
/* Merge user overrides into the composite config. For assumed connections,
|
||||||
* con_ip4_config is empty. */
|
* con_ip4_config is empty. */
|
||||||
if (priv->con_ip4_config)
|
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.
|
/* Add the default route.
|
||||||
|
|
@ -3865,6 +3868,19 @@ ip6_config_merge_and_apply (NMDevice *self,
|
||||||
const struct in6_addr *gateway;
|
const struct in6_addr *gateway;
|
||||||
gboolean connection_has_default_route, connection_is_never_default;
|
gboolean connection_has_default_route, connection_is_never_default;
|
||||||
gboolean routes_full_sync;
|
gboolean routes_full_sync;
|
||||||
|
gboolean ignore_auto_routes = FALSE;
|
||||||
|
gboolean ignore_auto_dns = FALSE;
|
||||||
|
|
||||||
|
/* Apply ignore-auto-routes and ignore-auto-dns settings */
|
||||||
|
connection = nm_device_get_connection (self);
|
||||||
|
if (connection) {
|
||||||
|
NMSettingIPConfig *s_ip6 = nm_connection_get_setting_ip6_config (connection);
|
||||||
|
|
||||||
|
if (s_ip6) {
|
||||||
|
ignore_auto_routes = nm_setting_ip_config_get_ignore_auto_routes (s_ip6);
|
||||||
|
ignore_auto_dns = nm_setting_ip_config_get_ignore_auto_dns (s_ip6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* If no config was passed in, create a new one */
|
/* If no config was passed in, create a new one */
|
||||||
composite = nm_ip6_config_new ();
|
composite = nm_ip6_config_new ();
|
||||||
|
|
@ -3873,41 +3889,34 @@ ip6_config_merge_and_apply (NMDevice *self,
|
||||||
ensure_con_ip6_config (self);
|
ensure_con_ip6_config (self);
|
||||||
|
|
||||||
/* Merge all the IP configs into the composite config */
|
/* Merge all the IP configs into the composite config */
|
||||||
if (priv->ac_ip6_config)
|
if (priv->ac_ip6_config) {
|
||||||
nm_ip6_config_merge (composite, priv->ac_ip6_config);
|
nm_ip6_config_merge (composite, priv->ac_ip6_config,
|
||||||
if (priv->dhcp6_ip6_config)
|
(ignore_auto_routes ? NM_IP_CONFIG_MERGE_NO_ROUTES : 0)
|
||||||
nm_ip6_config_merge (composite, priv->dhcp6_ip6_config);
|
| (ignore_auto_dns ? NM_IP_CONFIG_MERGE_NO_DNS : 0));
|
||||||
|
}
|
||||||
|
if (priv->dhcp6_ip6_config) {
|
||||||
|
nm_ip6_config_merge (composite, priv->dhcp6_ip6_config,
|
||||||
|
(ignore_auto_routes ? NM_IP_CONFIG_MERGE_NO_ROUTES : 0)
|
||||||
|
| (ignore_auto_dns ? NM_IP_CONFIG_MERGE_NO_DNS : 0));
|
||||||
|
}
|
||||||
if (priv->vpn6_config)
|
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)
|
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
|
/* Merge WWAN config *last* to ensure modem-given settings overwrite
|
||||||
* any external stuff set by pppd or other scripts.
|
* any external stuff set by pppd or other scripts.
|
||||||
*/
|
*/
|
||||||
if (priv->wwan_ip6_config)
|
if (priv->wwan_ip6_config) {
|
||||||
nm_ip6_config_merge (composite, priv->wwan_ip6_config);
|
nm_ip6_config_merge (composite, priv->wwan_ip6_config,
|
||||||
|
(ignore_auto_routes ? NM_IP_CONFIG_MERGE_NO_ROUTES : 0)
|
||||||
/* Apply ignore-auto-routes and ignore-auto-dns settings */
|
| (ignore_auto_dns ? NM_IP_CONFIG_MERGE_NO_DNS : 0));
|
||||||
connection = nm_device_get_connection (self);
|
|
||||||
if (connection) {
|
|
||||||
NMSettingIPConfig *s_ip6 = nm_connection_get_setting_ip6_config (connection);
|
|
||||||
|
|
||||||
if (s_ip6) {
|
|
||||||
if (nm_setting_ip_config_get_ignore_auto_routes (s_ip6))
|
|
||||||
nm_ip6_config_reset_routes (composite);
|
|
||||||
if (nm_setting_ip_config_get_ignore_auto_dns (s_ip6)) {
|
|
||||||
nm_ip6_config_reset_nameservers (composite);
|
|
||||||
nm_ip6_config_reset_domains (composite);
|
|
||||||
nm_ip6_config_reset_searches (composite);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Merge user overrides into the composite config. For assumed connections,
|
/* Merge user overrides into the composite config. For assumed connections,
|
||||||
* con_ip6_config is empty. */
|
* con_ip6_config is empty. */
|
||||||
if (priv->con_ip6_config)
|
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.
|
/* Add the default route.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ dhcp4_state_changed (NMDhcpClient *client,
|
||||||
if (last_config)
|
if (last_config)
|
||||||
nm_ip4_config_subtract (existing, 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))
|
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);
|
nm_log_warn (LOGD_DHCP4, "(%s): failed to apply DHCPv4 config", global_opt.ifname);
|
||||||
|
|
||||||
|
|
@ -240,7 +240,7 @@ rdisc_config_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, gpointer user_da
|
||||||
if (last_config)
|
if (last_config)
|
||||||
nm_ip6_config_subtract (existing, 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))
|
if (!nm_ip6_config_commit (existing, ifindex, TRUE))
|
||||||
nm_log_warn (LOGD_IP6, "(%s): failed to apply IPv6 config", global_opt.ifname);
|
nm_log_warn (LOGD_IP6, "(%s): failed to apply IPv6 config", global_opt.ifname);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@
|
||||||
#include "nm-core-internal.h"
|
#include "nm-core-internal.h"
|
||||||
#include "nm-route-manager.h"
|
#include "nm-route-manager.h"
|
||||||
#include "gsystem-local-alloc.h"
|
#include "gsystem-local-alloc.h"
|
||||||
|
#include "nm-macros-internal.h"
|
||||||
|
|
||||||
G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, G_TYPE_OBJECT)
|
G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, G_TYPE_OBJECT)
|
||||||
|
|
||||||
|
|
@ -542,7 +543,7 @@ nm_ip4_config_create_setting (const NMIP4Config *config)
|
||||||
/******************************************************************/
|
/******************************************************************/
|
||||||
|
|
||||||
void
|
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;
|
NMIP4ConfigPrivate *dst_priv, *src_priv;
|
||||||
guint32 i;
|
guint32 i;
|
||||||
|
|
@ -560,16 +561,20 @@ nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src)
|
||||||
nm_ip4_config_add_address (dst, nm_ip4_config_get_address (src, i));
|
nm_ip4_config_add_address (dst, nm_ip4_config_get_address (src, i));
|
||||||
|
|
||||||
/* nameservers */
|
/* nameservers */
|
||||||
for (i = 0; i < nm_ip4_config_get_num_nameservers (src); i++)
|
if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
|
||||||
nm_ip4_config_add_nameserver (dst, nm_ip4_config_get_nameserver (src, i));
|
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 */
|
/* default gateway */
|
||||||
if (nm_ip4_config_has_gateway (src))
|
if (nm_ip4_config_has_gateway (src))
|
||||||
nm_ip4_config_set_gateway (dst, nm_ip4_config_get_gateway (src));
|
nm_ip4_config_set_gateway (dst, nm_ip4_config_get_gateway (src));
|
||||||
|
|
||||||
/* routes */
|
/* routes */
|
||||||
for (i = 0; i < nm_ip4_config_get_num_routes (src); i++)
|
if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_ROUTES)) {
|
||||||
nm_ip4_config_add_route (dst, nm_ip4_config_get_route (src, i));
|
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)
|
if (dst_priv->route_metric == -1)
|
||||||
dst_priv->route_metric = src_priv->route_metric;
|
dst_priv->route_metric = src_priv->route_metric;
|
||||||
|
|
@ -577,12 +582,16 @@ nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src)
|
||||||
dst_priv->route_metric = MIN (dst_priv->route_metric, src_priv->route_metric);
|
dst_priv->route_metric = MIN (dst_priv->route_metric, src_priv->route_metric);
|
||||||
|
|
||||||
/* domains */
|
/* domains */
|
||||||
for (i = 0; i < nm_ip4_config_get_num_domains (src); i++)
|
if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
|
||||||
nm_ip4_config_add_domain (dst, nm_ip4_config_get_domain (src, i));
|
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 */
|
/* dns searches */
|
||||||
for (i = 0; i < nm_ip4_config_get_num_searches (src); i++)
|
if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
|
||||||
nm_ip4_config_add_search (dst, nm_ip4_config_get_search (src, i));
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
/* MSS */
|
/* MSS */
|
||||||
if (nm_ip4_config_get_mss (src))
|
if (nm_ip4_config_get_mss (src))
|
||||||
|
|
@ -594,15 +603,19 @@ nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src)
|
||||||
nm_ip4_config_get_mtu_source (src));
|
nm_ip4_config_get_mtu_source (src));
|
||||||
|
|
||||||
/* NIS */
|
/* NIS */
|
||||||
for (i = 0; i < nm_ip4_config_get_num_nis_servers (src); i++)
|
if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
|
||||||
nm_ip4_config_add_nis_server (dst, nm_ip4_config_get_nis_server (src, i));
|
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))
|
if (nm_ip4_config_get_nis_domain (src))
|
||||||
nm_ip4_config_set_nis_domain (dst, nm_ip4_config_get_nis_domain (src));
|
nm_ip4_config_set_nis_domain (dst, nm_ip4_config_get_nis_domain (src));
|
||||||
|
}
|
||||||
|
|
||||||
/* WINS */
|
/* WINS */
|
||||||
for (i = 0; i < nm_ip4_config_get_num_wins (src); i++)
|
if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
|
||||||
nm_ip4_config_add_wins (dst, nm_ip4_config_get_wins (src, i));
|
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 */
|
/* metered flag */
|
||||||
nm_ip4_config_set_metered (dst, nm_ip4_config_get_metered (dst) ||
|
nm_ip4_config_set_metered (dst, nm_ip4_config_get_metered (dst) ||
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ void nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIPConfig *settin
|
||||||
NMSetting *nm_ip4_config_create_setting (const NMIP4Config *config);
|
NMSetting *nm_ip4_config_create_setting (const NMIP4Config *config);
|
||||||
|
|
||||||
/* Utility functions */
|
/* 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_subtract (NMIP4Config *dst, const NMIP4Config *src);
|
||||||
void nm_ip4_config_intersect (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);
|
gboolean nm_ip4_config_replace (NMIP4Config *dst, const NMIP4Config *src, gboolean *relevant_changes);
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@
|
||||||
#include "nm-ip6-config-glue.h"
|
#include "nm-ip6-config-glue.h"
|
||||||
#include "nm-route-manager.h"
|
#include "nm-route-manager.h"
|
||||||
#include "NetworkManagerUtils.h"
|
#include "NetworkManagerUtils.h"
|
||||||
|
#include "nm-macros-internal.h"
|
||||||
|
|
||||||
G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, G_TYPE_OBJECT)
|
G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, G_TYPE_OBJECT)
|
||||||
|
|
||||||
|
|
@ -616,7 +617,7 @@ nm_ip6_config_create_setting (const NMIP6Config *config)
|
||||||
/******************************************************************/
|
/******************************************************************/
|
||||||
|
|
||||||
void
|
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;
|
NMIP6ConfigPrivate *dst_priv, *src_priv;
|
||||||
guint32 i;
|
guint32 i;
|
||||||
|
|
@ -642,8 +643,10 @@ nm_ip6_config_merge (NMIP6Config *dst, const NMIP6Config *src)
|
||||||
nm_ip6_config_set_gateway (dst, nm_ip6_config_get_gateway (src));
|
nm_ip6_config_set_gateway (dst, nm_ip6_config_get_gateway (src));
|
||||||
|
|
||||||
/* routes */
|
/* routes */
|
||||||
for (i = 0; i < nm_ip6_config_get_num_routes (src); i++)
|
if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_ROUTES)) {
|
||||||
nm_ip6_config_add_route (dst, nm_ip6_config_get_route (src, i));
|
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)
|
if (dst_priv->route_metric == -1)
|
||||||
dst_priv->route_metric = src_priv->route_metric;
|
dst_priv->route_metric = src_priv->route_metric;
|
||||||
|
|
@ -651,12 +654,16 @@ nm_ip6_config_merge (NMIP6Config *dst, const NMIP6Config *src)
|
||||||
dst_priv->route_metric = MIN (dst_priv->route_metric, src_priv->route_metric);
|
dst_priv->route_metric = MIN (dst_priv->route_metric, src_priv->route_metric);
|
||||||
|
|
||||||
/* domains */
|
/* domains */
|
||||||
for (i = 0; i < nm_ip6_config_get_num_domains (src); i++)
|
if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
|
||||||
nm_ip6_config_add_domain (dst, nm_ip6_config_get_domain (src, i));
|
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 */
|
/* dns searches */
|
||||||
for (i = 0; i < nm_ip6_config_get_num_searches (src); i++)
|
if (!NM_FLAGS_HAS (merge_flags, NM_IP_CONFIG_MERGE_NO_DNS)) {
|
||||||
nm_ip6_config_add_search (dst, nm_ip6_config_get_search (src, i));
|
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_ip6_config_get_mss (src))
|
if (nm_ip6_config_get_mss (src))
|
||||||
nm_ip6_config_set_mss (dst, nm_ip6_config_get_mss (src));
|
nm_ip6_config_set_mss (dst, nm_ip6_config_get_mss (src));
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ void nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIPConfig *settin
|
||||||
NMSetting *nm_ip6_config_create_setting (const NMIP6Config *config);
|
NMSetting *nm_ip6_config_create_setting (const NMIP6Config *config);
|
||||||
|
|
||||||
/* Utility functions */
|
/* 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_subtract (NMIP6Config *dst, const NMIP6Config *src);
|
||||||
void nm_ip6_config_intersect (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);
|
gboolean nm_ip6_config_replace (NMIP6Config *dst, const NMIP6Config *src, gboolean *relevant_changes);
|
||||||
|
|
|
||||||
|
|
@ -127,6 +127,12 @@ typedef enum {
|
||||||
NMP_OBJECT_TYPE_MAX = __NMP_OBJECT_TYPE_LAST - 1,
|
NMP_OBJECT_TYPE_MAX = __NMP_OBJECT_TYPE_LAST - 1,
|
||||||
} NMPObjectType;
|
} 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 */
|
/* settings */
|
||||||
typedef struct _NMAgentManager NMAgentManager;
|
typedef struct _NMAgentManager NMAgentManager;
|
||||||
typedef struct _NMSecretAgent NMSecretAgent;
|
typedef struct _NMSecretAgent NMSecretAgent;
|
||||||
|
|
|
||||||
|
|
@ -316,12 +316,12 @@ test_merge_subtract_mss_mtu (void)
|
||||||
nm_ip4_config_set_mss (cfg3, expected_mss3);
|
nm_ip4_config_set_mss (cfg3, expected_mss3);
|
||||||
nm_ip4_config_set_mtu (cfg3, expected_mtu3, NM_IP_CONFIG_SOURCE_UNKNOWN);
|
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 */
|
/* 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_mss (cfg1), ==, expected_mss2);
|
||||||
g_assert_cmpuint (nm_ip4_config_get_mtu (cfg1), ==, expected_mtu2);
|
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 */
|
/* 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_mss (cfg1), ==, expected_mss3);
|
||||||
g_assert_cmpuint (nm_ip4_config_get_mtu (cfg1), ==, expected_mtu3);
|
g_assert_cmpuint (nm_ip4_config_get_mtu (cfg1), ==, expected_mtu3);
|
||||||
|
|
|
||||||
|
|
@ -932,11 +932,11 @@ apply_parent_device_config (NMVpnConnection *connection)
|
||||||
* vpn-config. Instead we tell NMDefaultRouteManager directly about the
|
* vpn-config. Instead we tell NMDefaultRouteManager directly about the
|
||||||
* default route. */
|
* default route. */
|
||||||
if (vpn4_parent_config) {
|
if (vpn4_parent_config) {
|
||||||
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);
|
nm_ip4_config_set_gateway (vpn4_parent_config, 0);
|
||||||
}
|
}
|
||||||
if (vpn6_parent_config) {
|
if (vpn6_parent_config) {
|
||||||
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);
|
nm_ip6_config_set_gateway (vpn6_parent_config, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue