diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2016-04-23 15:57:14 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2016-05-12 17:13:50 +0200 |
commit | f09f5e1ec84b1e8b0e6231f72655f6446ae4646a (patch) | |
tree | 6103bc1ba2a1ee42aae5b0760da2529142ea2c79 | |
parent | d5855ed8075c89b961516bc23bfe1ecafab49771 (diff) | |
download | NetworkManager-f09f5e1ec84b1e8b0e6231f72655f6446ae4646a.tar.gz |
core: add DNS priority to NMIP4Config
-rw-r--r-- | introspection/nm-ip4-config.xml | 7 | ||||
-rw-r--r-- | src/nm-ip4-config.c | 59 | ||||
-rw-r--r-- | src/nm-ip4-config.h | 5 |
3 files changed, 69 insertions, 2 deletions
diff --git a/introspection/nm-ip4-config.xml b/introspection/nm-ip4-config.xml index c2a0f06828..bbe7bebeae 100644 --- a/introspection/nm-ip4-config.xml +++ b/introspection/nm-ip4-config.xml @@ -77,6 +77,13 @@ <property name="DnsOptions" type="as" access="read"/> <!-- + DnsPriority: + + The relative priority of DNS servers. + --> + <property name="DnsPriority" type="i" access="read"/> + + <!-- WinsServers: The Windows Internet Name Service servers associated with the connection. diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c index 6facff67ff..56c8a4ef3b 100644 --- a/src/nm-ip4-config.c +++ b/src/nm-ip4-config.c @@ -54,6 +54,7 @@ typedef struct { int ifindex; gint64 route_metric; gboolean metered; + gint dns_priority; } NMIP4ConfigPrivate; struct _NMIP4Config { @@ -96,6 +97,7 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMIP4Config, PROP_SEARCHES, PROP_DNS_OPTIONS, PROP_WINS_SERVERS, + PROP_DNS_PRIORITY, ); NMIP4Config * @@ -447,7 +449,7 @@ nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIPConfig *setting, gu { NMIP4ConfigPrivate *priv; guint naddresses, nroutes, nnameservers, nsearches; - int i; + int i, priority; if (!setting) return; @@ -546,6 +548,10 @@ nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIPConfig *setting, gu i++; } + priority = nm_setting_ip_config_get_dns_priority (setting); + if (priority) + nm_ip4_config_set_dns_priority (config, priority); + g_object_thaw_notify (G_OBJECT (config)); } @@ -655,6 +661,11 @@ nm_ip4_config_create_setting (const NMIP4Config *config) nm_setting_ip_config_add_dns_option (s_ip4, option); } + g_object_set (s_ip4, + NM_SETTING_IP_CONFIG_DNS_PRIORITY, + nm_ip4_config_get_dns_priority (config), + NULL); + return NM_SETTING (s_ip4); } @@ -746,6 +757,10 @@ nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src, NMIPConfigMergeFl nm_ip4_config_set_metered (dst, nm_ip4_config_get_metered (dst) || nm_ip4_config_get_metered (src)); + /* DNS priority */ + if (nm_ip4_config_get_dns_priority (src)) + nm_ip4_config_set_dns_priority (dst, nm_ip4_config_get_dns_priority (src)); + g_object_thaw_notify (G_OBJECT (dst)); } @@ -969,6 +984,10 @@ nm_ip4_config_subtract (NMIP4Config *dst, const NMIP4Config *src) nm_ip4_config_del_wins (dst, idx); } + /* DNS priority */ + if (nm_ip4_config_get_dns_priority (src) == nm_ip4_config_get_dns_priority (dst)) + nm_ip4_config_set_dns_priority (dst, 0); + g_object_thaw_notify (G_OBJECT (dst)); } @@ -1210,6 +1229,12 @@ nm_ip4_config_replace (NMIP4Config *dst, const NMIP4Config *src, gboolean *relev has_relevant_changes = TRUE; } + /* DNS priority */ + if (src_priv->dns_priority != dst_priv->dns_priority) { + nm_ip4_config_set_dns_priority (dst, src_priv->dns_priority); + has_relevant_changes = TRUE; + } + /* mss */ if (src_priv->mss != dst_priv->mss) { nm_ip4_config_set_mss (dst, src_priv->mss); @@ -1333,6 +1358,7 @@ nm_ip4_config_dump (const NMIP4Config *config, const char *detail) for (i = 0; i < nm_ip4_config_get_num_dns_options (config); i++) g_message (" dnsopt: %s", nm_ip4_config_get_dns_option (config, i)); + g_message (" dnspri: %d", nm_ip4_config_get_dns_priority (config)); g_message (" mss: %"G_GUINT32_FORMAT, nm_ip4_config_get_mss (config)); g_message (" mtu: %"G_GUINT32_FORMAT, nm_ip4_config_get_mtu (config)); @@ -1923,6 +1949,27 @@ nm_ip4_config_get_dns_option (const NMIP4Config *config, guint i) /******************************************************************/ void +nm_ip4_config_set_dns_priority (NMIP4Config *config, gint priority) +{ + NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config); + + if (priority != priv->dns_priority) { + priv->dns_priority = priority; + _notify (config, PROP_DNS_PRIORITY); + } +} + +gint +nm_ip4_config_get_dns_priority (const NMIP4Config *config) +{ + const NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config); + + return priv->dns_priority; +} + +/******************************************************************/ + +void nm_ip4_config_set_mss (NMIP4Config *config, guint32 mss) { NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config); @@ -2174,6 +2221,7 @@ nm_ip4_config_hash (const NMIP4Config *config, GChecksum *sum, gboolean dns_only g_checksum_update (sum, (const guint8 *) s, strlen (s)); } + hash_u32 (sum, (guint32) nm_ip4_config_get_dns_priority (config)); } /** @@ -2405,6 +2453,9 @@ get_property (GObject *object, guint prop_id, case PROP_DNS_OPTIONS: nm_utils_g_value_set_strv (value, priv->dns_options); break; + case PROP_DNS_PRIORITY: + g_value_set_int (value, priv->dns_priority); + break; case PROP_WINS_SERVERS: g_value_take_variant (value, g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32, @@ -2505,7 +2556,11 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class) G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - + obj_properties[PROP_DNS_PRIORITY] = + g_param_spec_int (NM_IP4_CONFIG_DNS_PRIORITY, "", "", + G_MININT32, G_MAXINT32, 0, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS); obj_properties[PROP_WINS_SERVERS] = g_param_spec_variant (NM_IP4_CONFIG_WINS_SERVERS, "", "", G_VARIANT_TYPE ("au"), diff --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h index 6eb1aed8be..f302630a0c 100644 --- a/src/nm-ip4-config.h +++ b/src/nm-ip4-config.h @@ -44,6 +44,7 @@ typedef struct _NMIP4ConfigClass NMIP4ConfigClass; #define NM_IP4_CONFIG_DOMAINS "domains" #define NM_IP4_CONFIG_SEARCHES "searches" #define NM_IP4_CONFIG_DNS_OPTIONS "dns-options" +#define NM_IP4_CONFIG_DNS_PRIORITY "dns-priority" #define NM_IP4_CONFIG_WINS_SERVERS "wins-servers" /* deprecated */ @@ -126,6 +127,10 @@ void nm_ip4_config_del_dns_option (NMIP4Config *config, guint i); guint32 nm_ip4_config_get_num_dns_options (const NMIP4Config *config); const char * nm_ip4_config_get_dns_option (const NMIP4Config *config, guint i); +/* DNS priority */ +void nm_ip4_config_set_dns_priority (NMIP4Config *config, gint priority); +gint nm_ip4_config_get_dns_priority (const NMIP4Config *config); + /* MSS */ void nm_ip4_config_set_mss (NMIP4Config *config, guint32 mss); guint32 nm_ip4_config_get_mss (const NMIP4Config *config); |