diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2015-03-26 09:23:12 +0100 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2015-03-30 13:46:14 +0200 |
commit | f1acb078333382a60f2d17b2760285704ad7265e (patch) | |
tree | d0077c5bad22f59f48f0c347caab769411936a5b | |
parent | feb05fa1cbb18df2fbdb60723d1f72e0fb41d9c7 (diff) | |
download | NetworkManager-f1acb078333382a60f2d17b2760285704ad7265e.tar.gz |
core: add DNS options property to NMIP4Config and NMIP6Config
-rw-r--r-- | introspection/nm-ip4-config.xml | 3 | ||||
-rw-r--r-- | introspection/nm-ip6-config.xml | 3 | ||||
-rw-r--r-- | src/nm-ip4-config.c | 143 | ||||
-rw-r--r-- | src/nm-ip4-config.h | 8 | ||||
-rw-r--r-- | src/nm-ip6-config.c | 139 | ||||
-rw-r--r-- | src/nm-ip6-config.h | 8 |
6 files changed, 300 insertions, 4 deletions
diff --git a/introspection/nm-ip4-config.xml b/introspection/nm-ip4-config.xml index 9807653495..a92dd15161 100644 --- a/introspection/nm-ip4-config.xml +++ b/introspection/nm-ip4-config.xml @@ -49,6 +49,9 @@ <property name="Searches" type="as" access="read"> <tp:docstring>A list of dns searches.</tp:docstring> </property> + <property name="Options" type="as" access="read"> + <tp:docstring>A list of dns options.</tp:docstring> + </property> <property name="WinsServers" type="au" access="read"> <tp:docstring>The Windows Internet Name Service servers associated with the connection. Each address is in network byte order.</tp:docstring> </property> diff --git a/introspection/nm-ip6-config.xml b/introspection/nm-ip6-config.xml index 985dd2e331..0de8c86fb7 100644 --- a/introspection/nm-ip6-config.xml +++ b/introspection/nm-ip6-config.xml @@ -43,6 +43,9 @@ <property name="Searches" type="as" access="read"> <tp:docstring>A list of dns searches.</tp:docstring> </property> + <property name="Options" type="as" access="read"> + <tp:docstring>A list of dns options.</tp:docstring> + </property> <signal name="PropertiesChanged"> <arg name="properties" type="a{sv}" tp:type="String_Variant_Map"> diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c index 10e2b62c62..40b4efdb23 100644 --- a/src/nm-ip4-config.c +++ b/src/nm-ip4-config.c @@ -49,6 +49,7 @@ typedef struct { GArray *nameservers; GPtrArray *domains; GPtrArray *searches; + GPtrArray *options; guint32 mss; GArray *nis; char *nis_domain; @@ -73,6 +74,7 @@ enum { PROP_NAMESERVERS, PROP_DOMAINS, PROP_SEARCHES, + PROP_OPTIONS, PROP_WINS_SERVERS, LAST_PROP @@ -304,7 +306,7 @@ nm_ip4_config_commit (const NMIP4Config *config, int ifindex, guint32 default_ro void nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIPConfig *setting, guint32 default_route_metric) { - guint naddresses, nroutes, nnameservers, nsearches; + guint naddresses, nroutes, nnameservers, nsearches, noptions; int i; if (!setting) @@ -318,6 +320,7 @@ nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIPConfig *setting, gu nroutes = nm_setting_ip_config_get_num_routes (setting); nnameservers = nm_setting_ip_config_get_num_dns (setting); nsearches = nm_setting_ip_config_get_num_dns_searches (setting); + noptions = nm_setting_ip_config_get_num_dns_options (setting); /* Gateway */ if (nm_setting_ip_config_get_never_default (setting)) @@ -388,6 +391,9 @@ nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIPConfig *setting, gu for (i = 0; i < nsearches; i++) nm_ip4_config_add_search (config, nm_setting_ip_config_get_dns_search (setting, i)); + for (i = 0; i < noptions; i++) + nm_ip4_config_add_option (config, nm_setting_ip_config_get_dns_option (setting, i)); + g_object_thaw_notify (G_OBJECT (config)); } @@ -396,7 +402,7 @@ nm_ip4_config_create_setting (const NMIP4Config *config) { NMSettingIPConfig *s_ip4; guint32 gateway; - guint naddresses, nroutes, nnameservers, nsearches; + guint naddresses, nroutes, nnameservers, nsearches, noptions; const char *method = NULL; int i; @@ -414,6 +420,7 @@ nm_ip4_config_create_setting (const NMIP4Config *config) nroutes = nm_ip4_config_get_num_routes (config); nnameservers = nm_ip4_config_get_num_nameservers (config); nsearches = nm_ip4_config_get_num_searches (config); + noptions = nm_ip4_config_get_num_options (config); /* Addresses */ for (i = 0; i < naddresses; i++) { @@ -484,6 +491,12 @@ nm_ip4_config_create_setting (const NMIP4Config *config) nm_setting_ip_config_add_dns_search (s_ip4, search); } + for (i = 0; i < noptions; i++) { + const char *option = nm_ip4_config_get_option (config, i); + + nm_setting_ip_config_add_dns_option (s_ip4, option); + } + return NM_SETTING (s_ip4); } @@ -523,6 +536,10 @@ nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src) 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_options (src); i++) + nm_ip4_config_add_option (dst, nm_ip4_config_get_option (src, i)); + /* MSS */ if (!nm_ip4_config_get_mss (dst)) nm_ip4_config_set_mss (dst, nm_ip4_config_get_mss (src)); @@ -626,6 +643,22 @@ _searches_get_index (const NMIP4Config *self, const char *search) } static int +_options_get_index (const NMIP4Config *self, const char *option) +{ + NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (self); + guint i; + + for (i = 0; i < priv->options->len; i++) { + const char *s = g_ptr_array_index (priv->options, i); + + if (g_strcmp0 (option, s) == 0) + return (int) i; + } + return -1; +} + + +static int _nis_servers_get_index (const NMIP4Config *self, guint32 nis_server) { NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (self); @@ -717,6 +750,13 @@ nm_ip4_config_subtract (NMIP4Config *dst, const NMIP4Config *src) nm_ip4_config_del_search (dst, idx); } + /* dns options */ + for (i = 0; i < nm_ip4_config_get_num_options (src); i++) { + idx = _options_get_index (dst, nm_ip4_config_get_option (src, i)); + if (idx >= 0) + nm_ip4_config_del_option (dst, idx); + } + /* MSS */ if (nm_ip4_config_get_mss (src) == nm_ip4_config_get_mss (dst)) nm_ip4_config_set_mss (dst, 0); @@ -783,6 +823,7 @@ nm_ip4_config_intersect (NMIP4Config *dst, const NMIP4Config *src) /* ignore domains */ /* ignore dns searches */ + /* ignore dns options */ /* ignore NIS */ /* ignore WINS */ @@ -949,6 +990,25 @@ nm_ip4_config_replace (NMIP4Config *dst, const NMIP4Config *src, gboolean *relev has_relevant_changes = TRUE; } + /* dns options */ + num = nm_ip4_config_get_num_options (src); + are_equal = num == nm_ip4_config_get_num_options (dst); + if (are_equal) { + for (i = 0; i < num; i++ ) { + if (g_strcmp0 (nm_ip4_config_get_option (src, i), + nm_ip4_config_get_option (dst, i))) { + are_equal = FALSE; + break; + } + } + } + if (!are_equal) { + nm_ip4_config_reset_options (dst); + for (i = 0; i < num; i++) + nm_ip4_config_add_option (dst, nm_ip4_config_get_option (src, i)); + has_relevant_changes = TRUE; + } + /* mss */ if (src_priv->mss != dst_priv->mss) { nm_ip4_config_set_mss (dst, src_priv->mss); @@ -1055,6 +1115,11 @@ nm_ip4_config_dump (const NMIP4Config *config, const char *detail) for (i = 0; i < nm_ip4_config_get_num_searches (config); i++) g_message (" search: %s", nm_ip4_config_get_search (config, i)); + /* dns options */ + for (i = 0; i < nm_ip4_config_get_num_options (config); i++) + g_message (" option: %s", nm_ip4_config_get_option (config, i)); + + g_message (" mss: %"G_GUINT32_FORMAT, nm_ip4_config_get_mss (config)); g_message (" mtu: %"G_GUINT32_FORMAT, nm_ip4_config_get_mtu (config)); @@ -1552,6 +1617,63 @@ nm_ip4_config_get_search (const NMIP4Config *config, guint i) /******************************************************************/ void +nm_ip4_config_reset_options (NMIP4Config *config) +{ + NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config); + + if (priv->options->len != 0) { + g_ptr_array_set_size (priv->options, 0); + _NOTIFY (config, PROP_OPTIONS); + } +} + +void +nm_ip4_config_add_option (NMIP4Config *config, const char *new) +{ + NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config); + int i; + + g_return_if_fail (new != NULL); + g_return_if_fail (new[0] != '\0'); + + for (i = 0; i < priv->options->len; i++) + if (!g_strcmp0 (g_ptr_array_index (priv->options, i), new)) + return; + + g_ptr_array_add (priv->options, g_strdup (new)); + _NOTIFY (config, PROP_OPTIONS); +} + +void +nm_ip4_config_del_option(NMIP4Config *config, guint i) +{ + NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config); + + g_return_if_fail (i < priv->options->len); + + g_ptr_array_remove_index (priv->options, i); + _NOTIFY (config, PROP_OPTIONS); +} + +guint32 +nm_ip4_config_get_num_options (const NMIP4Config *config) +{ + NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config); + + return priv->options->len; +} + +const char * +nm_ip4_config_get_option (const NMIP4Config *config, guint i) +{ + NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config); + + return g_ptr_array_index (priv->options, i); +} + +/******************************************************************/ + +void nm_ip4_config_set_mss (NMIP4Config *config, guint32 mss) { NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config); @@ -1777,6 +1899,12 @@ nm_ip4_config_hash (const NMIP4Config *config, GChecksum *sum, gboolean dns_only s = nm_ip4_config_get_search (config, i); g_checksum_update (sum, (const guint8 *) s, strlen (s)); } + + for (i = 0; i < nm_ip4_config_get_num_options (config); i++) { + s = nm_ip4_config_get_option (config, i); + g_checksum_update (sum, (const guint8 *) s, strlen (s)); + } + } /** @@ -1831,6 +1959,7 @@ nm_ip4_config_init (NMIP4Config *config) priv->nameservers = g_array_new (FALSE, FALSE, sizeof (guint32)); priv->domains = g_ptr_array_new_with_free_func (g_free); priv->searches = g_ptr_array_new_with_free_func (g_free); + priv->options = g_ptr_array_new_with_free_func (g_free); priv->nis = g_array_new (FALSE, TRUE, sizeof (guint32)); priv->wins = g_array_new (FALSE, TRUE, sizeof (guint32)); } @@ -1847,6 +1976,7 @@ finalize (GObject *object) g_array_unref (priv->nameservers); g_ptr_array_unref (priv->domains); g_ptr_array_unref (priv->searches); + g_ptr_array_unref (priv->options); g_array_unref (priv->nis); g_free (priv->nis_domain); g_array_unref (priv->wins); @@ -2014,6 +2144,9 @@ get_property (GObject *object, guint prop_id, case PROP_SEARCHES: g_value_set_boxed (value, priv->searches); break; + case PROP_OPTIONS: + g_value_set_boxed (value, priv->options); + break; case PROP_WINS_SERVERS: g_value_set_boxed (value, priv->wins); break; @@ -2098,6 +2231,12 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class) DBUS_TYPE_G_ARRAY_OF_STRING, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_OPTIONS] = + g_param_spec_boxed (NM_IP4_CONFIG_OPTIONS, "", "", + DBUS_TYPE_G_ARRAY_OF_STRING, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS); + obj_properties[PROP_WINS_SERVERS] = g_param_spec_boxed (NM_IP4_CONFIG_WINS_SERVERS, "", "", DBUS_TYPE_G_UINT_ARRAY, diff --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h index 3e551950d3..c4f203c4e8 100644 --- a/src/nm-ip4-config.h +++ b/src/nm-ip4-config.h @@ -48,6 +48,7 @@ typedef struct { #define NM_IP4_CONFIG_NAMESERVERS "nameservers" #define NM_IP4_CONFIG_DOMAINS "domains" #define NM_IP4_CONFIG_SEARCHES "searches" +#define NM_IP4_CONFIG_OPTIONS "options" #define NM_IP4_CONFIG_WINS_SERVERS "wins-servers" /* deprecated */ @@ -124,6 +125,13 @@ void nm_ip4_config_del_search (NMIP4Config *config, guint i); guint32 nm_ip4_config_get_num_searches (const NMIP4Config *config); const char * nm_ip4_config_get_search (const NMIP4Config *config, guint i); +/* DNS options */ +void nm_ip4_config_reset_options (NMIP4Config *config); +void nm_ip4_config_add_option (NMIP4Config *config, const char *option); +void nm_ip4_config_del_option (NMIP4Config *config, guint i); +guint32 nm_ip4_config_get_num_options (const NMIP4Config *config); +const char * nm_ip4_config_get_option (const NMIP4Config *config, guint i); + /* MSS */ void nm_ip4_config_set_mss (NMIP4Config *config, guint32 mss); guint32 nm_ip4_config_get_mss (const NMIP4Config *config); diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c index 4df7e2996f..f6c56d0d85 100644 --- a/src/nm-ip6-config.c +++ b/src/nm-ip6-config.c @@ -49,6 +49,7 @@ typedef struct { GArray *nameservers; GPtrArray *domains; GPtrArray *searches; + GPtrArray *options; guint32 mss; int ifindex; } NMIP6ConfigPrivate; @@ -65,6 +66,7 @@ enum { PROP_NAMESERVERS, PROP_DOMAINS, PROP_SEARCHES, + PROP_OPTIONS, LAST_PROP }; @@ -418,7 +420,7 @@ nm_ip6_config_commit (const NMIP6Config *config, int ifindex) void nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIPConfig *setting, guint32 default_route_metric) { - guint naddresses, nroutes, nnameservers, nsearches; + guint naddresses, nroutes, nnameservers, nsearches, noptions; const char *gateway_str; int i; @@ -431,6 +433,7 @@ nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIPConfig *setting, gu nroutes = nm_setting_ip_config_get_num_routes (setting); nnameservers = nm_setting_ip_config_get_num_dns (setting); nsearches = nm_setting_ip_config_get_num_dns_searches (setting); + noptions = nm_setting_ip_config_get_num_dns_options (setting); g_object_freeze_notify (G_OBJECT (config)); @@ -498,6 +501,8 @@ nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIPConfig *setting, gu } for (i = 0; i < nsearches; i++) nm_ip6_config_add_search (config, nm_setting_ip_config_get_dns_search (setting, i)); + for (i = 0; i < noptions; i++) + nm_ip6_config_add_option (config, nm_setting_ip_config_get_dns_option (setting, i)); g_object_thaw_notify (G_OBJECT (config)); } @@ -507,7 +512,7 @@ nm_ip6_config_create_setting (const NMIP6Config *config) { NMSettingIPConfig *s_ip6; const struct in6_addr *gateway; - guint naddresses, nroutes, nnameservers, nsearches; + guint naddresses, nroutes, nnameservers, nsearches, noptions; const char *method = NULL; int i; @@ -525,6 +530,7 @@ nm_ip6_config_create_setting (const NMIP6Config *config) nroutes = nm_ip6_config_get_num_routes (config); nnameservers = nm_ip6_config_get_num_nameservers (config); nsearches = nm_ip6_config_get_num_searches (config); + noptions = nm_ip6_config_get_num_options (config); /* Addresses */ for (i = 0; i < naddresses; i++) { @@ -602,6 +608,12 @@ nm_ip6_config_create_setting (const NMIP6Config *config) nm_setting_ip_config_add_dns_search (s_ip6, search); } + for (i = 0; i < noptions; i++) { + const char *option = nm_ip6_config_get_option (config, i); + + nm_setting_ip_config_add_dns_option (s_ip6, option); + } + return NM_SETTING (s_ip6); } @@ -642,6 +654,10 @@ nm_ip6_config_merge (NMIP6Config *dst, const NMIP6Config *src) 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_options (src); i++) + nm_ip6_config_add_option (dst, nm_ip6_config_get_option (src, i)); + if (!nm_ip6_config_get_mss (dst)) nm_ip6_config_set_mss (dst, nm_ip6_config_get_mss (src)); @@ -742,6 +758,21 @@ _searches_get_index (const NMIP6Config *self, const char *search) return -1; } +static int +_options_get_index (const NMIP6Config *self, const char *option) +{ + NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (self); + guint i; + + for (i = 0; i < priv->options->len; i++) { + const char *s = g_ptr_array_index (priv->options, i); + + if (g_strcmp0 (option, s) == 0) + return (int) i; + } + return -1; +} + /*******************************************************************************/ /** @@ -807,6 +838,13 @@ nm_ip6_config_subtract (NMIP6Config *dst, const NMIP6Config *src) nm_ip6_config_del_search (dst, idx); } + /* dns options */ + for (i = 0; i < nm_ip6_config_get_num_options (src); i++) { + idx = _options_get_index (dst, nm_ip6_config_get_option (src, i)); + if (idx >= 0) + nm_ip6_config_del_option (dst, idx); + } + if (nm_ip6_config_get_mss (src) == nm_ip6_config_get_mss (dst)) nm_ip6_config_set_mss (dst, 0); @@ -857,6 +895,7 @@ nm_ip6_config_intersect (NMIP6Config *dst, const NMIP6Config *src) /* ignore domains */ /* ignore dns searches */ + /* ignome dns options */ g_object_thaw_notify (G_OBJECT (dst)); } @@ -1021,6 +1060,25 @@ nm_ip6_config_replace (NMIP6Config *dst, const NMIP6Config *src, gboolean *relev has_relevant_changes = TRUE; } + /* dns options */ + num = nm_ip6_config_get_num_options (src); + are_equal = num == nm_ip6_config_get_num_options (dst); + if (are_equal) { + for (i = 0; i < num; i++ ) { + if (g_strcmp0 (nm_ip6_config_get_option (src, i), + nm_ip6_config_get_option (dst, i))) { + are_equal = FALSE; + break; + } + } + } + if (!are_equal) { + nm_ip6_config_reset_options (dst); + for (i = 0; i < num; i++) + nm_ip6_config_add_option (dst, nm_ip6_config_get_option (src, i)); + has_relevant_changes = TRUE; + } + /* mss */ if (src_priv->mss != dst_priv->mss) { nm_ip6_config_set_mss (dst, src_priv->mss); @@ -1081,6 +1139,10 @@ nm_ip6_config_dump (const NMIP6Config *config, const char *detail) for (i = 0; i < nm_ip6_config_get_num_searches (config); i++) g_message (" search: %s", nm_ip6_config_get_search (config, i)); + /* dns options */ + for (i = 0; i < nm_ip6_config_get_num_options (config); i++) + g_message (" option: %s", nm_ip6_config_get_option (config, i)); + g_message (" mss: %"G_GUINT32_FORMAT, nm_ip6_config_get_mss (config)); g_message (" n-dflt: %d", nm_ip6_config_get_never_default (config)); } @@ -1563,6 +1625,63 @@ nm_ip6_config_get_search (const NMIP6Config *config, guint i) /******************************************************************/ void +nm_ip6_config_reset_options (NMIP6Config *config) +{ + NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config); + + if (priv->options->len != 0) { + g_ptr_array_set_size (priv->options, 0); + _NOTIFY (config, PROP_OPTIONS); + } +} + +void +nm_ip6_config_add_option (NMIP6Config *config, const char *new) +{ + NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config); + int i; + + g_return_if_fail (new != NULL); + g_return_if_fail (new[0] != '\0'); + + for (i = 0; i < priv->options->len; i++) + if (!g_strcmp0 (g_ptr_array_index (priv->options, i), new)) + return; + + g_ptr_array_add (priv->options, g_strdup (new)); + _NOTIFY (config, PROP_OPTIONS); +} + +void +nm_ip6_config_del_option (NMIP6Config *config, guint i) +{ + NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config); + + g_return_if_fail (i < priv->options->len); + + g_ptr_array_remove_index (priv->options, i); + _NOTIFY (config, PROP_OPTIONS); +} + +guint32 +nm_ip6_config_get_num_options (const NMIP6Config *config) +{ + NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config); + + return priv->options->len; +} + +const char * +nm_ip6_config_get_option (const NMIP6Config *config, guint i) +{ + NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config); + + return g_ptr_array_index (priv->options, i); +} + +/******************************************************************/ + +void nm_ip6_config_set_mss (NMIP6Config *config, guint32 mss) { NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config); @@ -1636,6 +1755,12 @@ nm_ip6_config_hash (const NMIP6Config *config, GChecksum *sum, gboolean dns_only s = nm_ip6_config_get_search (config, i); g_checksum_update (sum, (const guint8 *) s, strlen (s)); } + + for (i = 0; i < nm_ip6_config_get_num_options (config); i++) { + s = nm_ip6_config_get_option (config, i); + g_checksum_update (sum, (const guint8 *) s, strlen (s)); + } + } /** @@ -1690,6 +1815,7 @@ nm_ip6_config_init (NMIP6Config *config) priv->nameservers = g_array_new (FALSE, TRUE, sizeof (struct in6_addr)); priv->domains = g_ptr_array_new_with_free_func (g_free); priv->searches = g_ptr_array_new_with_free_func (g_free); + priv->options = g_ptr_array_new_with_free_func (g_free); } static void @@ -1704,6 +1830,7 @@ finalize (GObject *object) g_array_unref (priv->nameservers); g_ptr_array_unref (priv->domains); g_ptr_array_unref (priv->searches); + g_ptr_array_unref (priv->options); G_OBJECT_CLASS (nm_ip6_config_parent_class)->finalize (object); } @@ -1925,6 +2052,9 @@ get_property (GObject *object, guint prop_id, case PROP_SEARCHES: g_value_set_boxed (value, priv->searches); break; + case PROP_OPTIONS: + g_value_set_boxed (value, priv->options); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -2008,6 +2138,11 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class) DBUS_TYPE_G_ARRAY_OF_STRING, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_OPTIONS] = + g_param_spec_boxed (NM_IP6_CONFIG_OPTIONS, "", "", + DBUS_TYPE_G_ARRAY_OF_STRING, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, obj_properties); diff --git a/src/nm-ip6-config.h b/src/nm-ip6-config.h index e0527e5e55..6991f931b7 100644 --- a/src/nm-ip6-config.h +++ b/src/nm-ip6-config.h @@ -49,6 +49,7 @@ typedef struct { #define NM_IP6_CONFIG_NAMESERVERS "nameservers" #define NM_IP6_CONFIG_DOMAINS "domains" #define NM_IP6_CONFIG_SEARCHES "searches" +#define NM_IP6_CONFIG_OPTIONS "options" /* deprecated */ #define NM_IP6_CONFIG_ADDRESSES "addresses" @@ -126,6 +127,13 @@ void nm_ip6_config_del_search (NMIP6Config *config, guint i); guint32 nm_ip6_config_get_num_searches (const NMIP6Config *config); const char * nm_ip6_config_get_search (const NMIP6Config *config, guint i); +/* DNS options */ +void nm_ip6_config_reset_options (NMIP6Config *config); +void nm_ip6_config_add_option (NMIP6Config *config, const char *option); +void nm_ip6_config_del_option (NMIP6Config *config, guint i); +guint32 nm_ip6_config_get_num_options (const NMIP6Config *config); +const char * nm_ip6_config_get_option (const NMIP6Config *config, guint i); + /* MSS */ void nm_ip6_config_set_mss (NMIP6Config *config, guint32 mss); guint32 nm_ip6_config_get_mss (const NMIP6Config *config); |