summaryrefslogtreecommitdiff
path: root/libnm-util/nm-setting-ip6-config.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnm-util/nm-setting-ip6-config.c')
-rw-r--r--libnm-util/nm-setting-ip6-config.c1776
1 files changed, 0 insertions, 1776 deletions
diff --git a/libnm-util/nm-setting-ip6-config.c b/libnm-util/nm-setting-ip6-config.c
deleted file mode 100644
index 6beeb7da21..0000000000
--- a/libnm-util/nm-setting-ip6-config.c
+++ /dev/null
@@ -1,1776 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-
-/*
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- * Copyright 2007 - 2014 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include <string.h>
-#include <dbus/dbus-glib.h>
-
-#include "nm-setting-ip6-config.h"
-#include "nm-param-spec-specialized.h"
-#include "nm-utils.h"
-#include "nm-dbus-glib-types.h"
-#include "nm-setting-private.h"
-
-/**
- * SECTION:nm-setting-ip6-config
- * @short_description: Describes IPv6 addressing, routing, and name service properties
- * @include: nm-setting-ip6-config.h
- *
- * The #NMSettingIP6Config object is a #NMSetting subclass that describes
- * properties related to IPv6 addressing, routing, and Domain Name Service
- **/
-
-/**
- * nm_setting_ip6_config_error_quark:
- *
- * Registers an error quark for #NMSettingIP6Config if necessary.
- *
- * Returns: the error quark used for #NMSettingIP6Config errors.
- **/
-GQuark
-nm_setting_ip6_config_error_quark (void)
-{
- static GQuark quark;
-
- if (G_UNLIKELY (!quark))
- quark = g_quark_from_static_string ("nm-setting-ip6-config-error-quark");
- return quark;
-}
-
-G_DEFINE_BOXED_TYPE (NMIP6Address, nm_ip6_address, nm_ip6_address_dup, nm_ip6_address_unref)
-G_DEFINE_BOXED_TYPE (NMIP6Route, nm_ip6_route, nm_ip6_route_dup, nm_ip6_route_unref)
-
-G_DEFINE_TYPE_WITH_CODE (NMSettingIP6Config, nm_setting_ip6_config, NM_TYPE_SETTING,
- _nm_register_setting (NM_SETTING_IP6_CONFIG_SETTING_NAME,
- g_define_type_id,
- 4,
- NM_SETTING_IP6_CONFIG_ERROR))
-NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_IP6_CONFIG)
-
-#define NM_SETTING_IP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_IP6_CONFIG, NMSettingIP6ConfigPrivate))
-
-typedef struct {
- char *method;
- char *dhcp_hostname;
- GSList *dns; /* array of struct in6_addr */
- GSList *dns_search; /* list of strings */
- GSList *addresses; /* array of NMIP6Address */
- GSList *routes; /* array of NMIP6Route */
- gint64 route_metric;
- gboolean ignore_auto_routes;
- gboolean ignore_auto_dns;
- gboolean never_default;
- gboolean may_fail;
- NMSettingIP6ConfigPrivacy ip6_privacy;
-} NMSettingIP6ConfigPrivate;
-
-enum {
- PROP_0,
- PROP_METHOD,
- PROP_DHCP_HOSTNAME,
- PROP_DNS,
- PROP_DNS_SEARCH,
- PROP_ADDRESSES,
- PROP_ROUTES,
- PROP_ROUTE_METRIC,
- PROP_IGNORE_AUTO_ROUTES,
- PROP_IGNORE_AUTO_DNS,
- PROP_NEVER_DEFAULT,
- PROP_MAY_FAIL,
- PROP_IP6_PRIVACY,
-
- LAST_PROP
-};
-
-/**
- * nm_setting_ip6_config_new:
- *
- * Creates a new #NMSettingIP6Config object with default values.
- *
- * Returns: (transfer full): the new empty #NMSettingIP6Config object
- **/
-NMSetting *
-nm_setting_ip6_config_new (void)
-{
- return (NMSetting *) g_object_new (NM_TYPE_SETTING_IP6_CONFIG, NULL);
-}
-
-/**
- * nm_setting_ip6_config_get_method:
- * @setting: the #NMSettingIP6Config
- *
- * Returns: the #NMSettingIP6Config:method property of the setting
- **/
-const char *
-nm_setting_ip6_config_get_method (NMSettingIP6Config *setting)
-{
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), NULL);
-
- return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->method;
-}
-
-/**
- * nm_setting_ip6_config_get_dhcp_hostname:
- * @setting: the #NMSettingIP6Config
- *
- * Returns the value contained in the #NMSettingIP6Config:dhcp-hostname
- * property.
- *
- * Returns: the configured hostname to send to the DHCP server
- *
- * Since: 0.9.8
- **/
-const char *
-nm_setting_ip6_config_get_dhcp_hostname (NMSettingIP6Config *setting)
-{
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), NULL);
-
- return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dhcp_hostname;
-}
-
-/**
- * nm_setting_ip6_config_get_num_dns:
- * @setting: the #NMSettingIP6Config
- *
- * Returns: the number of configured DNS servers
- **/
-guint32
-nm_setting_ip6_config_get_num_dns (NMSettingIP6Config *setting)
-{
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), 0);
-
- return g_slist_length (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns);
-}
-
-/**
- * nm_setting_ip6_config_get_dns:
- * @setting: the #NMSettingIP6Config
- * @i: index number of the DNS server to return
- *
- * Returns: (transfer none): the IPv6 address of the DNS server at index @i
- **/
-const struct in6_addr *
-nm_setting_ip6_config_get_dns (NMSettingIP6Config *setting, guint32 i)
-{
- NMSettingIP6ConfigPrivate *priv;
-
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), NULL);
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- g_return_val_if_fail (i <= g_slist_length (priv->dns), NULL);
-
- return (const struct in6_addr *) g_slist_nth_data (priv->dns, i);
-}
-
-/**
- * nm_setting_ip6_config_add_dns:
- * @setting: the #NMSettingIP6Config
- * @dns: the IPv6 address of the DNS server to add
- *
- * Adds a new DNS server to the setting.
- *
- * Returns: %TRUE if the DNS server was added; %FALSE if the server was already
- * known
- **/
-gboolean
-nm_setting_ip6_config_add_dns (NMSettingIP6Config *setting, const struct in6_addr *addr)
-{
- NMSettingIP6ConfigPrivate *priv;
- struct in6_addr *copy;
- GSList *iter;
-
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- for (iter = priv->dns; iter; iter = g_slist_next (iter)) {
- if (!memcmp (addr, (struct in6_addr *) iter->data, sizeof (struct in6_addr)))
- return FALSE;
- }
-
- copy = g_malloc0 (sizeof (struct in6_addr));
- memcpy (copy, addr, sizeof (struct in6_addr));
- priv->dns = g_slist_append (priv->dns, copy);
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS);
-
- return TRUE;
-}
-
-/**
- * nm_setting_ip6_config_remove_dns:
- * @setting: the #NMSettingIP6Config
- * @i: index number of the DNS server to remove
- *
- * Removes the DNS server at index @i.
- **/
-void
-nm_setting_ip6_config_remove_dns (NMSettingIP6Config *setting, guint32 i)
-{
- NMSettingIP6ConfigPrivate *priv;
- GSList *elt;
-
- g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- elt = g_slist_nth (priv->dns, i);
- g_return_if_fail (elt != NULL);
-
- g_free (elt->data);
- priv->dns = g_slist_delete_link (priv->dns, elt);
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS);
-}
-
-/**
- * nm_setting_ip6_config_remove_dns_by_value:
- * @setting: the #NMSettingIP6Config
- * @dns: the IPv6 address of the DNS server to remove
- *
- * Removes the DNS server at index @i.
- *
- * Returns: %TRUE if the DNS server was found and removed; %FALSE if it was not.
- *
- * Since: 0.9.10
- **/
-gboolean
-nm_setting_ip6_config_remove_dns_by_value (NMSettingIP6Config *setting,
- const struct in6_addr *addr)
-{
- NMSettingIP6ConfigPrivate *priv;
- GSList *iter;
-
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- for (iter = priv->dns; iter; iter = g_slist_next (iter)) {
- if (!memcmp (addr, (struct in6_addr *) iter->data, sizeof (struct in6_addr))) {
- priv->dns = g_slist_delete_link (priv->dns, iter);
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-/**
- * nm_setting_ip6_config_clear_dns:
- * @setting: the #NMSettingIP6Config
- *
- * Removes all configured DNS servers.
- **/
-void
-nm_setting_ip6_config_clear_dns (NMSettingIP6Config *setting)
-{
- g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
-
- g_slist_free_full (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns, g_free);
- NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns = NULL;
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS);
-}
-
-/**
- * nm_setting_ip6_config_get_num_dns_searches:
- * @setting: the #NMSettingIP6Config
- *
- * Returns: the number of configured DNS search domains
- **/
-guint32
-nm_setting_ip6_config_get_num_dns_searches (NMSettingIP6Config *setting)
-{
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), 0);
-
- return g_slist_length (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns_search);
-}
-
-/**
- * nm_setting_ip6_config_get_dns_search:
- * @setting: the #NMSettingIP6Config
- * @i: index number of the DNS search domain to return
- *
- * Returns: the DNS search domain at index @i
- **/
-const char *
-nm_setting_ip6_config_get_dns_search (NMSettingIP6Config *setting, guint32 i)
-{
- NMSettingIP6ConfigPrivate *priv;
-
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), NULL);
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- g_return_val_if_fail (i <= g_slist_length (priv->dns_search), NULL);
-
- return (const char *) g_slist_nth_data (priv->dns_search, i);
-}
-
-/**
- * nm_setting_ip6_config_add_dns_search:
- * @setting: the #NMSettingIP6Config
- * @dns_search: the search domain to add
- *
- * Adds a new DNS search domain to the setting.
- *
- * Returns: %TRUE if the DNS search domain was added; %FALSE if the search
- * domain was already known
- **/
-gboolean
-nm_setting_ip6_config_add_dns_search (NMSettingIP6Config *setting,
- const char *dns_search)
-{
- NMSettingIP6ConfigPrivate *priv;
- GSList *iter;
-
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
- g_return_val_if_fail (dns_search != NULL, FALSE);
- g_return_val_if_fail (dns_search[0] != '\0', FALSE);
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- for (iter = priv->dns_search; iter; iter = g_slist_next (iter)) {
- if (!strcmp (dns_search, (char *) iter->data))
- return FALSE;
- }
-
- priv->dns_search = g_slist_append (priv->dns_search, g_strdup (dns_search));
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS_SEARCH);
- return TRUE;
-}
-
-/**
- * nm_setting_ip6_config_remove_dns_search:
- * @setting: the #NMSettingIP6Config
- * @i: index number of the DNS search domain
- *
- * Removes the DNS search domain at index @i.
- **/
-void
-nm_setting_ip6_config_remove_dns_search (NMSettingIP6Config *setting, guint32 i)
-{
- NMSettingIP6ConfigPrivate *priv;
- GSList *elt;
-
- g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- elt = g_slist_nth (priv->dns_search, i);
- g_return_if_fail (elt != NULL);
-
- g_free (elt->data);
- priv->dns_search = g_slist_delete_link (priv->dns_search, elt);
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS_SEARCH);
-}
-
-/**
- * nm_setting_ip6_config_remove_dns_search_by_value:
- * @setting: the #NMSettingIP6Config
- * @dns_search: the search domain to remove
- *
- * Removes the DNS search domain @dns_search.
- *
- * Returns: %TRUE if the DNS search domain was found and removed; %FALSE if it was not.
- *
- * Since 0.9.10
- **/
-gboolean
-nm_setting_ip6_config_remove_dns_search_by_value (NMSettingIP6Config *setting,
- const char *dns_search)
-{
- NMSettingIP6ConfigPrivate *priv;
- GSList *iter;
-
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
- g_return_val_if_fail (dns_search != NULL, FALSE);
- g_return_val_if_fail (dns_search[0] != '\0', FALSE);
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- for (iter = priv->dns_search; iter; iter = g_slist_next (iter)) {
- if (!strcmp (dns_search, (char *) iter->data)) {
- priv->dns_search = g_slist_delete_link (priv->dns_search, iter);
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS_SEARCH);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-/**
- * nm_setting_ip6_config_clear_dns_searches:
- * @setting: the #NMSettingIP6Config
- *
- * Removes all configured DNS search domains.
- **/
-void
-nm_setting_ip6_config_clear_dns_searches (NMSettingIP6Config *setting)
-{
- g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
-
- g_slist_free_full (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns_search, g_free);
- NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->dns_search = NULL;
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_DNS_SEARCH);
-}
-
-/**
- * nm_setting_ip6_config_get_num_addresses:
- * @setting: the #NMSettingIP6Config
- *
- * Returns: the number of configured addresses
- **/
-guint32
-nm_setting_ip6_config_get_num_addresses (NMSettingIP6Config *setting)
-{
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), 0);
-
- return g_slist_length (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->addresses);
-}
-
-/**
- * nm_setting_ip6_config_get_address:
- * @setting: the #NMSettingIP6Config
- * @i: index number of the address to return
- *
- * Returns: the address at index @i
- **/
-NMIP6Address *
-nm_setting_ip6_config_get_address (NMSettingIP6Config *setting, guint32 i)
-{
- NMSettingIP6ConfigPrivate *priv;
-
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), NULL);
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- g_return_val_if_fail (i <= g_slist_length (priv->addresses), NULL);
-
- return (NMIP6Address *) g_slist_nth_data (priv->addresses, i);
-}
-
-/**
- * nm_setting_ip6_config_add_address:
- * @setting: the #NMSettingIP6Config
- * @address: the new address to add
- *
- * Adds a new IPv6 address and associated information to the setting. The
- * given address is duplicated internally and is not changed by this function.
- *
- * Returns: %TRUE if the address was added; %FALSE if the address was already
- * known.
- **/
-gboolean
-nm_setting_ip6_config_add_address (NMSettingIP6Config *setting,
- NMIP6Address *address)
-{
- NMSettingIP6ConfigPrivate *priv;
- NMIP6Address *copy;
- GSList *iter;
-
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
- g_return_val_if_fail (address != NULL, FALSE);
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- for (iter = priv->addresses; iter; iter = g_slist_next (iter)) {
- if (nm_ip6_address_compare ((NMIP6Address *) iter->data, address))
- return FALSE;
- }
-
- copy = nm_ip6_address_dup (address);
- priv->addresses = g_slist_append (priv->addresses, copy);
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ADDRESSES);
- return TRUE;
-}
-
-/**
- * nm_setting_ip6_config_remove_address:
- * @setting: the #NMSettingIP6Config
- * @i: index number of the address to remove
- *
- * Removes the address at index @i.
- **/
-void
-nm_setting_ip6_config_remove_address (NMSettingIP6Config *setting, guint32 i)
-{
- NMSettingIP6ConfigPrivate *priv;
- GSList *elt;
-
- g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- elt = g_slist_nth (priv->addresses, i);
- g_return_if_fail (elt != NULL);
-
- nm_ip6_address_unref ((NMIP6Address *) elt->data);
- priv->addresses = g_slist_delete_link (priv->addresses, elt);
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ADDRESSES);
-}
-
-/**
- * nm_setting_ip6_config_remove_address_by_value:
- * @setting: the #NMSettingIP6Config
- * @address: the address to remove
- *
- * Removes the address @address.
- *
- * Returns: %TRUE if the address was found and removed; %FALSE if it was not.
- *
- * Since: 0.9.10
- **/
-gboolean
-nm_setting_ip6_config_remove_address_by_value (NMSettingIP6Config *setting,
- NMIP6Address *address)
-{
- NMSettingIP6ConfigPrivate *priv;
- GSList *iter;
-
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
- g_return_val_if_fail (address != NULL, FALSE);
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- for (iter = priv->addresses; iter; iter = g_slist_next (iter)) {
- if (nm_ip6_address_compare ((NMIP6Address *) iter->data, address)) {
- priv->addresses = g_slist_delete_link (priv->addresses, iter);
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ADDRESSES);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-/**
- * nm_setting_ip6_config_clear_addresses:
- * @setting: the #NMSettingIP6Config
- *
- * Removes all configured addresses.
- **/
-void
-nm_setting_ip6_config_clear_addresses (NMSettingIP6Config *setting)
-{
- NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
-
- g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
-
- g_slist_free_full (priv->addresses, (GDestroyNotify) nm_ip6_address_unref);
- priv->addresses = NULL;
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ADDRESSES);
-}
-
-/**
- * nm_setting_ip6_config_get_num_routes:
- * @setting: the #NMSettingIP6Config
- *
- * Returns: the number of configured routes
- **/
-guint32
-nm_setting_ip6_config_get_num_routes (NMSettingIP6Config *setting)
-{
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), 0);
-
- return g_slist_length (NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->routes);
-}
-
-/**
- * nm_setting_ip6_config_get_route:
- * @setting: the #NMSettingIP6Config
- * @i: index number of the route to return
- *
- * Returns: the route at index @i
- **/
-NMIP6Route *
-nm_setting_ip6_config_get_route (NMSettingIP6Config *setting, guint32 i)
-{
- NMSettingIP6ConfigPrivate *priv;
-
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), NULL);
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- g_return_val_if_fail (i <= g_slist_length (priv->routes), NULL);
-
- return (NMIP6Route *) g_slist_nth_data (priv->routes, i);
-}
-
-/**
- * nm_setting_ip6_config_add_route:
- * @setting: the #NMSettingIP6Config
- * @route: the route to add
- *
- * Adds a new IPv6 route and associated information to the setting. The
- * given route is duplicated internally and is not changed by this function.
- *
- * Returns: %TRUE if the route was added; %FALSE if the route was already known.
- **/
-gboolean
-nm_setting_ip6_config_add_route (NMSettingIP6Config *setting,
- NMIP6Route *route)
-{
- NMSettingIP6ConfigPrivate *priv;
- NMIP6Route *copy;
- GSList *iter;
-
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
- g_return_val_if_fail (route != NULL, FALSE);
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- for (iter = priv->routes; iter; iter = g_slist_next (iter)) {
- if (nm_ip6_route_compare ((NMIP6Route *) iter->data, route))
- return FALSE;
- }
-
- copy = nm_ip6_route_dup (route);
- priv->routes = g_slist_append (priv->routes, copy);
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ROUTES);
- return TRUE;
-}
-
-/**
- * nm_setting_ip6_config_remove_route:
- * @setting: the #NMSettingIP6Config
- * @i: index number of the route
- *
- * Removes the route at index @i.
- **/
-void
-nm_setting_ip6_config_remove_route (NMSettingIP6Config *setting, guint32 i)
-{
- NMSettingIP6ConfigPrivate *priv;
- GSList *elt;
-
- g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- elt = g_slist_nth (priv->routes, i);
- g_return_if_fail (elt != NULL);
-
- nm_ip6_route_unref ((NMIP6Route *) elt->data);
- priv->routes = g_slist_delete_link (priv->routes, elt);
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ROUTES);
-}
-
-/**
- * nm_setting_ip6_config_remove_route_by_value:
- * @setting: the #NMSettingIP6Config
- * @route: the route to remove
- *
- * Removes the route @route.
- *
- * Returns: %TRUE if the route was found and removed; %FALSE if it was not.
- *
- * Since: 0.9.10
- **/
-gboolean
-nm_setting_ip6_config_remove_route_by_value (NMSettingIP6Config *setting,
- NMIP6Route *route)
-{
- NMSettingIP6ConfigPrivate *priv;
- GSList *iter;
-
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
- g_return_val_if_fail (route != NULL, FALSE);
-
- priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- for (iter = priv->routes; iter; iter = g_slist_next (iter)) {
- if (nm_ip6_route_compare ((NMIP6Route *) iter->data, route)) {
- nm_ip6_route_unref ((NMIP6Route *) iter->data);
- priv->routes = g_slist_delete_link (priv->routes, iter);
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ROUTES);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-/**
- * nm_setting_ip6_config_clear_routes:
- * @setting: the #NMSettingIP6Config
- *
- * Removes all configured routes.
- **/
-void
-nm_setting_ip6_config_clear_routes (NMSettingIP6Config *setting)
-{
- NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
-
- g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
-
- g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip6_route_unref);
- priv->routes = NULL;
- g_object_notify (G_OBJECT (setting), NM_SETTING_IP6_CONFIG_ROUTES);
-}
-
-/**
- * nm_setting_ip6_config_get_route_metric:
- * @setting: the #NMSettingIP6Config
- *
- * Returns the value contained in the #NMSettingIP6Config:route-metric
- * property.
- *
- * Returns: the route metric that is used for IPv6 routes that don't explicitly
- * specify a metric. See #NMSettingIP6Config:route-metric for more details.
- *
- * Since: 1.0
- **/
-gint64
-nm_setting_ip6_config_get_route_metric (NMSettingIP6Config *setting)
-{
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), -1);
-
- return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->route_metric;
-}
-
-/**
- * nm_setting_ip6_config_get_ignore_auto_routes:
- * @setting: the #NMSettingIP6Config
- *
- * Returns the value contained in the #NMSettingIP6Config:ignore-auto-routes
- * property.
- *
- * Returns: %TRUE if automatically configured (ie via DHCP) routes should be
- * ignored.
- **/
-gboolean
-nm_setting_ip6_config_get_ignore_auto_routes (NMSettingIP6Config *setting)
-{
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
-
- return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->ignore_auto_routes;
-}
-
-/**
- * nm_setting_ip6_config_get_ignore_auto_dns:
- * @setting: the #NMSettingIP6Config
- *
- * Returns the value contained in the #NMSettingIP6Config:ignore-auto-dns
- * property.
- *
- * Returns: %TRUE if automatically configured (ie via DHCP or router
- * advertisements) DNS information should be ignored.
- **/
-gboolean
-nm_setting_ip6_config_get_ignore_auto_dns (NMSettingIP6Config *setting)
-{
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
-
- return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->ignore_auto_dns;
-}
-
-/**
- * nm_setting_ip6_config_get_never_default:
- * @setting: the #NMSettingIP6Config
- *
- * Returns the value contained in the #NMSettingIP6Config:never-default
- * property.
- *
- * Returns: %TRUE if this connection should never be the default connection
- * for IPv6 addressing
- **/
-gboolean
-nm_setting_ip6_config_get_never_default (NMSettingIP6Config *setting)
-{
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
-
- return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->never_default;
-}
-
-/**
- * nm_setting_ip6_config_get_may_fail:
- * @setting: the #NMSettingIP6Config
- *
- * Returns the value contained in the #NMSettingIP6Config:may-fail
- * property.
- *
- * Returns: %TRUE if this connection doesn't require IPv6 addressing to complete
- * for the connection to succeed.
- **/
-gboolean
-nm_setting_ip6_config_get_may_fail (NMSettingIP6Config *setting)
-{
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), FALSE);
-
- return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->may_fail;
-}
-
-/**
- * nm_setting_ip6_config_get_ip6_privacy:
- * @setting: the #NMSettingIP6Config
- *
- * Returns the value contained in the #NMSettingIP6Config:ip6-privacy
- * property.
- *
- * Returns: IPv6 Privacy Extensions configuration value (#NMSettingIP6ConfigPrivacy).
- **/
-NMSettingIP6ConfigPrivacy
-nm_setting_ip6_config_get_ip6_privacy (NMSettingIP6Config *setting)
-{
- g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
-
- return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->ip6_privacy;
-}
-
-static gboolean
-verify (NMSetting *setting, GSList *all_settings, GError **error)
-{
- NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting);
- GSList *iter;
- int i;
-
- if (!priv->method) {
- g_set_error_literal (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY,
- _("property is missing"));
- g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_METHOD);
- return FALSE;
- }
-
- if (!strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
- if (!priv->addresses) {
- g_set_error (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_MISSING_PROPERTY,
- _("this property cannot be empty for '%s=%s'"),
- NM_SETTING_IP6_CONFIG_METHOD, priv->method);
- g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_ADDRESSES);
- return FALSE;
- }
- } else if ( !strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)
- || !strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL)
- || !strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_SHARED)) {
- if (g_slist_length (priv->dns)) {
- g_set_error (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD,
- _("this property is not allowed for '%s=%s'"),
- NM_SETTING_IP6_CONFIG_METHOD, priv->method);
- g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_DNS);
- return FALSE;
- }
-
- if (g_slist_length (priv->dns_search)) {
- g_set_error (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD,
- _("this property is not allowed for '%s=%s'"),
- NM_SETTING_IP6_CONFIG_METHOD, priv->method);
- g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_DNS_SEARCH);
- return FALSE;
- }
-
- /* Shared allows IP addresses; link-local and disabled do not */
- if (strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_SHARED) != 0) {
- if (g_slist_length (priv->addresses)) {
- g_set_error (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD,
- _("this property is not allowed for '%s=%s'"),
- NM_SETTING_IP6_CONFIG_METHOD, priv->method);
- g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_ADDRESSES);
- return FALSE;
- }
- }
- } else if ( !strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)
- || !strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
- /* nothing to do */
- } else {
- g_set_error_literal (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
- _("property is invalid"));
- g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_METHOD);
- return FALSE;
- }
-
- if (priv->dhcp_hostname && !strlen (priv->dhcp_hostname)) {
- g_set_error_literal (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
- _("property is missing"));
- g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME);
- return FALSE;
- }
-
- /* Validate addresses */
- for (iter = priv->addresses, i = 0; iter; iter = g_slist_next (iter), i++) {
- NMIP6Address *addr = (NMIP6Address *) iter->data;
- guint32 prefix = nm_ip6_address_get_prefix (addr);
-
- if (IN6_IS_ADDR_UNSPECIFIED (nm_ip6_address_get_address (addr))) {
- g_set_error (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
- _("%d. IPv6 address is invalid"),
- i+1);
- g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_ADDRESSES);
- return FALSE;
- }
-
- if (!prefix || prefix > 128) {
- g_set_error (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
- _("%d. IPv6 address has invalid prefix"),
- i+1);
- g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_ADDRESSES);
- return FALSE;
- }
- }
-
- /* Validate routes */
- for (iter = priv->routes, i = 0; iter; iter = g_slist_next (iter), i++) {
- NMIP6Route *route = (NMIP6Route *) iter->data;
- guint32 prefix = nm_ip6_route_get_prefix (route);
-
- if (!prefix || prefix > 128) {
- g_set_error (error,
- NM_SETTING_IP6_CONFIG_ERROR,
- NM_SETTING_IP6_CONFIG_ERROR_INVALID_PROPERTY,
- _("%d. route has invalid prefix"),
- i+1);
- g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_ROUTES);
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-static void
-nm_setting_ip6_config_init (NMSettingIP6Config *setting)
-{
-}
-
-static void
-finalize (GObject *object)
-{
- NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (object);
-
- g_free (priv->method);
- g_free (priv->dhcp_hostname);
-
- g_slist_free_full (priv->dns, g_free);
- g_slist_free_full (priv->dns_search, g_free);
- g_slist_free_full (priv->addresses, g_free);
- g_slist_free_full (priv->routes, g_free);
-
- G_OBJECT_CLASS (nm_setting_ip6_config_parent_class)->finalize (object);
-}
-
-static void
-set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
-{
- NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (object);
-
- switch (prop_id) {
- case PROP_METHOD:
- g_free (priv->method);
- priv->method = g_value_dup_string (value);
- break;
- case PROP_DNS:
- g_slist_free_full (priv->dns, g_free);
- priv->dns = nm_utils_ip6_dns_from_gvalue (value);
- break;
- case PROP_DNS_SEARCH:
- g_slist_free_full (priv->dns_search, g_free);
- priv->dns_search = g_value_dup_boxed (value);
- break;
- case PROP_ADDRESSES:
- g_slist_free_full (priv->addresses, g_free);
- priv->addresses = nm_utils_ip6_addresses_from_gvalue (value);
- break;
- case PROP_ROUTES:
- g_slist_free_full (priv->routes, g_free);
- priv->routes = nm_utils_ip6_routes_from_gvalue (value);
- break;
- case PROP_ROUTE_METRIC:
- priv->route_metric = g_value_get_int64 (value);
- break;
- case PROP_IGNORE_AUTO_ROUTES:
- priv->ignore_auto_routes = g_value_get_boolean (value);
- break;
- case PROP_IGNORE_AUTO_DNS:
- priv->ignore_auto_dns = g_value_get_boolean (value);
- break;
- case PROP_DHCP_HOSTNAME:
- g_free (priv->dhcp_hostname);
- priv->dhcp_hostname = g_value_dup_string (value);
- break;
- case PROP_NEVER_DEFAULT:
- priv->never_default = g_value_get_boolean (value);
- break;
- case PROP_MAY_FAIL:
- priv->may_fail = g_value_get_boolean (value);
- break;
- case PROP_IP6_PRIVACY:
- priv->ip6_privacy = g_value_get_int (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
-{
- NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (object);
-
- switch (prop_id) {
- case PROP_METHOD:
- g_value_set_string (value, priv->method);
- break;
- case PROP_DNS:
- nm_utils_ip6_dns_to_gvalue (priv->dns, value);
- break;
- case PROP_DNS_SEARCH:
- g_value_set_boxed (value, priv->dns_search);
- break;
- case PROP_ADDRESSES:
- nm_utils_ip6_addresses_to_gvalue (priv->addresses, value);
- break;
- case PROP_ROUTES:
- nm_utils_ip6_routes_to_gvalue (priv->routes, value);
- break;
- case PROP_ROUTE_METRIC:
- g_value_set_int64 (value, priv->route_metric);
- break;
- case PROP_IGNORE_AUTO_ROUTES:
- g_value_set_boolean (value, priv->ignore_auto_routes);
- break;
- case PROP_IGNORE_AUTO_DNS:
- g_value_set_boolean (value, priv->ignore_auto_dns);
- break;
- case PROP_DHCP_HOSTNAME:
- g_value_set_string (value, priv->dhcp_hostname);
- break;
- case PROP_NEVER_DEFAULT:
- g_value_set_boolean (value, priv->never_default);
- break;
- case PROP_MAY_FAIL:
- g_value_set_boolean (value, priv->may_fail);
- break;
- case PROP_IP6_PRIVACY:
- g_value_set_int (value, priv->ip6_privacy);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (setting_class);
- NMSettingClass *parent_class = NM_SETTING_CLASS (setting_class);
-
- g_type_class_add_private (setting_class, sizeof (NMSettingIP6ConfigPrivate));
-
- /* virtual methods */
- object_class->set_property = set_property;
- object_class->get_property = get_property;
- object_class->finalize = finalize;
- parent_class->verify = verify;
-
- /* Properties */
- /**
- * NMSettingIP6Config:method:
- *
- * IPv6 configuration method. If "auto" is specified then the appropriate
- * automatic method (PPP, router advertisement, etc) is used for the device
- * and most other properties can be left unset. To force the use of DHCP
- * only, specify "dhcp"; this method is only valid for Ethernet- based
- * hardware. If "link-local" is specified, then an IPv6 link-local address
- * will be assigned to the interface. If "manual" is specified, static IP
- * addressing is used and at least one IP address must be given in the
- * "addresses" property. If "ignore" is specified, IPv6 configuration is
- * not done. This property must be set. Note: the "shared" method is not
- * yet supported.
- **/
- g_object_class_install_property
- (object_class, PROP_METHOD,
- g_param_spec_string (NM_SETTING_IP6_CONFIG_METHOD, "", "",
- NULL,
- G_PARAM_READWRITE |
- NM_SETTING_PARAM_INFERRABLE |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * NMSettingIP6Config:dhcp-hostname:
- *
- * The specified name will be sent to the DHCP server when acquiring a
- * lease.
- *
- * Since: 0.9.8
- **/
- g_object_class_install_property
- (object_class, PROP_DHCP_HOSTNAME,
- g_param_spec_string (NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME, "", "",
- NULL,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * NMSettingIP6Config:dns:
- *
- * Array of DNS servers, where each member of the array is a byte array
- * containing the IPv6 address of the DNS server (in network byte order).
- * For the "auto" method, these DNS servers are appended to those (if any)
- * returned by automatic configuration. DNS servers cannot be used with the
- * "shared" or "link-local" methods as there is no usptream network. In all
- * other methods, these DNS servers are used as the only DNS servers for
- * this connection.
- **/
- g_object_class_install_property
- (object_class, PROP_DNS,
- _nm_param_spec_specialized (NM_SETTING_IP6_CONFIG_DNS, "", "",
- DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * NMSettingIP6Config:dns-search:
- *
- * List of DNS search domains. For the "auto" method, these search domains
- * are appended to those returned by automatic configuration. Search domains
- * cannot be used with the "shared" or "link-local" methods as there is no
- * upstream network. In all other methods, these search domains are used as
- * the only search domains for this connection.
- **/
- g_object_class_install_property
- (object_class, PROP_DNS_SEARCH,
- _nm_param_spec_specialized (NM_SETTING_IP6_CONFIG_DNS_SEARCH, "", "",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * NMSettingIP6Config:addresses:
- *
- * Array of IPv6 address structures. Each IPv6 address structure is
- * composed of 3 members, the first being a byte array containing the IPv6
- * address (network byte order), the second a 32-bit integer containing the
- * IPv6 address prefix, and the third a byte array containing the IPv6
- * address (network byte order) of the gateway associated with this address,
- * if any. If no gateway is given, the third element should be given as all
- * zeros. For the "auto" method, given IP addresses are appended to those
- * returned by automatic configuration. Addresses cannot be used with the
- * "shared" or "link-local" methods as the interface is automatically
- * assigned an address with these methods.
- **/
- g_object_class_install_property
- (object_class, PROP_ADDRESSES,
- _nm_param_spec_specialized (NM_SETTING_IP6_CONFIG_ADDRESSES, "", "",
- DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
- G_PARAM_READWRITE |
- NM_SETTING_PARAM_INFERRABLE |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * NMSettingIP6Config:routes:
- *
- * Array of IPv6 route structures. Each IPv6 route structure is composed of
- * 4 members; the first being the destination IPv6 network or address
- * (network byte order) as a byte array, the second the destination network
- * or address IPv6 prefix, the third being the next-hop IPv6 address
- * (network byte order) if any, and the fourth being the route metric. For
- * the "auto" method, given IP routes are appended to those returned by
- * automatic configuration. Routes cannot be used with the "shared" or
- * "link-local" methods because there is no upstream network.
- **/
- g_object_class_install_property
- (object_class, PROP_ROUTES,
- _nm_param_spec_specialized (NM_SETTING_IP6_CONFIG_ROUTES, "", "",
- DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE,
- G_PARAM_READWRITE |
- NM_SETTING_PARAM_INFERRABLE |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * NMSettingIP6Config:route-metric:
- *
- * The default metric for routes that don't explicitly specify a metric.
- * The default value -1 means that the metric is chosen automatically
- * based on the device type.
- * The metric applies to dynamic routes, manual (static) routes that
- * don't have an explicit metric setting, address prefix routes, and
- * the default route.
- * As the linux kernel replaces zero (0) by 1024 (user-default), setting
- * this property to 0 means effectively setting it to 1024.
- *
- * Since: 1.0
- **/
- g_object_class_install_property
- (object_class, PROP_ROUTE_METRIC,
- g_param_spec_int64 (NM_SETTING_IP6_CONFIG_ROUTE_METRIC, "", "",
- -1, G_MAXUINT32, -1,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * NMSettingIP6Config:ignore-auto-routes:
- *
- * When the method is set to "auto" or "dhcp" and this property is set to
- * %TRUE, automatically configured routes are ignored and only routes
- * specified in the #NMSettingIP6Config:routes property, if any, are used.
- **/
- g_object_class_install_property
- (object_class, PROP_IGNORE_AUTO_ROUTES,
- g_param_spec_boolean (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES, "", "",
- FALSE,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * NMSettingIP6Config:ignore-auto-dns:
- *
- * When the method is set to "auto" or "dhcp" and this property is set to
- * %TRUE, automatically configured nameservers and search domains are
- * ignored and only nameservers and search domains specified in the
- * #NMSettingIP6Config:dns and #NMSettingIP6Config:dns-search properties, if
- * any, are used.
- **/
- g_object_class_install_property
- (object_class, PROP_IGNORE_AUTO_DNS,
- g_param_spec_boolean (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS, "", "",
- FALSE,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * NMSettingIP6Config:never-default:
- *
- * If %TRUE, this connection will never be the default IPv6 connection,
- * meaning it will never be assigned the default IPv6 route by
- * NetworkManager.
- **/
- g_object_class_install_property
- (object_class, PROP_NEVER_DEFAULT,
- g_param_spec_boolean (NM_SETTING_IP6_CONFIG_NEVER_DEFAULT, "", "",
- FALSE,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * NMSettingIP6Config:may-fail:
- *
- * If %TRUE, allow overall network configuration to proceed even if IPv6
- * configuration times out. Note that at least one IP configuration must
- * succeed or overall network configuration will still fail. For example,
- * in IPv4-only networks, setting this property to %TRUE allows the overall
- * network configuration to succeed if IPv6 configuration fails but IPv4
- * configuration completes successfully.
- **/
- g_object_class_install_property
- (object_class, PROP_MAY_FAIL,
- g_param_spec_boolean (NM_SETTING_IP6_CONFIG_MAY_FAIL, "", "",
- TRUE,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * NMSettingIP6Config:ip6-privacy:
- *
- * Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If
- * enabled, it makes the kernel generate a temporary IPv6 address in
- * addition to the public one generated from MAC address via modified
- * EUI-64. This enhances privacy, but could cause problems in some
- * applications, on the other hand. The permitted values are: 0: disabled,
- * 1: enabled (prefer public address), 2: enabled (prefer temporary
- * addresses).
- **/
- g_object_class_install_property
- (object_class, PROP_IP6_PRIVACY,
- g_param_spec_int (NM_SETTING_IP6_CONFIG_IP6_PRIVACY, "", "",
- NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN,
- NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR,
- NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_STRINGS));
-}
-
-/*****************************************************************************/
-
-struct NMIP6Address {
- guint32 refcount;
- struct in6_addr address;
- guint32 prefix;
- struct in6_addr gateway;
-};
-
-/**
- * nm_ip6_address_new:
- *
- * Creates and returns a new #NMIP6Address object.
- *
- * Returns: (transfer full): the new empty #NMIP6Address object
- **/
-NMIP6Address *
-nm_ip6_address_new (void)
-{
- NMIP6Address *address;
-
- address = g_malloc0 (sizeof (NMIP6Address));
- address->refcount = 1;
- return address;
-}
-
-/**
- * nm_ip6_address_dup:
- * @source: the #NMIP6Address object to copy
- *
- * Copies a given #NMIP6Address object and returns the copy.
- *
- * Returns: (transfer full): the copy of the given #NMIP6Address copy
- **/
-NMIP6Address *
-nm_ip6_address_dup (NMIP6Address *source)
-{
- NMIP6Address *address;
-
- g_return_val_if_fail (source != NULL, NULL);
- g_return_val_if_fail (source->refcount > 0, NULL);
-
- address = nm_ip6_address_new ();
- address->prefix = source->prefix;
- memcpy (&address->address, &source->address, sizeof (struct in6_addr));
- memcpy (&address->gateway, &source->gateway, sizeof (struct in6_addr));
-
- return address;
-}
-
-/**
- * nm_ip6_address_ref:
- * @address: the #NMIP6Address
- *
- * Increases the reference count of the object.
- **/
-void
-nm_ip6_address_ref (NMIP6Address *address)
-{
- g_return_if_fail (address != NULL);
- g_return_if_fail (address->refcount > 0);
-
- address->refcount++;
-}
-
-/**
- * nm_ip6_address_unref:
- * @address: the #NMIP6Address
- *
- * Decreases the reference count of the object. If the reference count
- * reaches zero, the object will be destroyed.
- **/
-void
-nm_ip6_address_unref (NMIP6Address *address)
-{
- g_return_if_fail (address != NULL);
- g_return_if_fail (address->refcount > 0);
-
- address->refcount--;
- if (address->refcount == 0) {
- memset (address, 0, sizeof (NMIP6Address));
- g_free (address);
- }
-}
-
-/**
- * nm_ip6_address_compare:
- * @address: the #NMIP6Address
- * @other: the #NMIP6Address to compare @address to.
- *
- * Determines if two #NMIP6Address objects contain the same values.
- *
- * Returns: %TRUE if the objects contain the same values, %FALSE if they do not.
- **/
-gboolean
-nm_ip6_address_compare (NMIP6Address *address, NMIP6Address *other)
-{
- g_return_val_if_fail (address != NULL, FALSE);
- g_return_val_if_fail (address->refcount > 0, FALSE);
-
- g_return_val_if_fail (other != NULL, FALSE);
- g_return_val_if_fail (other->refcount > 0, FALSE);
-
- if ( memcmp (&address->address, &other->address, sizeof (struct in6_addr))
- || address->prefix != other->prefix
- || memcmp (&address->gateway, &other->gateway, sizeof (struct in6_addr)))
- return FALSE;
- return TRUE;
-}
-
-/**
- * nm_ip6_address_get_address:
- * @address: the #NMIP6Address
- *
- * Gets the IPv6 address property of this address object.
- *
- * Returns: (array fixed-size=16) (element-type guint8) (transfer none):
- * the IPv6 address
- **/
-const struct in6_addr *
-nm_ip6_address_get_address (NMIP6Address *address)
-{
- g_return_val_if_fail (address != NULL, NULL);
- g_return_val_if_fail (address->refcount > 0, NULL);
-
- return &address->address;
-}
-
-/**
- * nm_ip6_address_set_address:
- * @address: the #NMIP6Address
- * @addr: the IPv6 address
- *
- * Sets the IPv6 address property of this object.
- **/
-void
-nm_ip6_address_set_address (NMIP6Address *address, const struct in6_addr *addr)
-{
- g_return_if_fail (address != NULL);
- g_return_if_fail (address->refcount > 0);
- g_return_if_fail (addr != NULL);
-
- memcpy (&address->address, addr, sizeof (struct in6_addr));
-}
-
-/**
- * nm_ip6_address_get_prefix:
- * @address: the #NMIP6Address
- *
- * Gets the IPv6 address prefix property of this address object.
- *
- * Returns: the IPv6 address prefix
- **/
-guint32
-nm_ip6_address_get_prefix (NMIP6Address *address)
-{
- g_return_val_if_fail (address != NULL, 0);
- g_return_val_if_fail (address->refcount > 0, 0);
-
- return address->prefix;
-}
-
-/**
- * nm_ip6_address_set_prefix:
- * @address: the #NMIP6Address
- * @prefix: the address prefix, a number between 0 and 128 inclusive
- *
- * Sets the IPv6 address prefix.
- **/
-void
-nm_ip6_address_set_prefix (NMIP6Address *address, guint32 prefix)
-{
- g_return_if_fail (address != NULL);
- g_return_if_fail (address->refcount > 0);
- g_return_if_fail (prefix <= 128);
- g_return_if_fail (prefix > 0);
-
- address->prefix = prefix;
-}
-
-/**
- * nm_ip6_address_get_gateway:
- * @address: the #NMIP6Address
- *
- * Gets the IPv6 default gateway property of this address object.
- *
- * Returns: (array fixed-size=16) (element-type guint8) (transfer none):
- * the IPv6 gateway address
- **/
-const struct in6_addr *
-nm_ip6_address_get_gateway (NMIP6Address *address)
-{
- g_return_val_if_fail (address != NULL, NULL);
- g_return_val_if_fail (address->refcount > 0, NULL);
-
- return &address->gateway;
-}
-
-/**
- * nm_ip6_address_set_gateway:
- * @address: the #NMIP6Address
- * @gateway: the IPv6 default gateway
- *
- * Sets the IPv6 default gateway property of this address object.
- **/
-void
-nm_ip6_address_set_gateway (NMIP6Address *address, const struct in6_addr *gateway)
-{
- g_return_if_fail (address != NULL);
- g_return_if_fail (address->refcount > 0);
- g_return_if_fail (gateway != NULL);
-
- memcpy (&address->gateway, gateway, sizeof (struct in6_addr));
-}
-
-/*****************************************************************************/
-
-struct NMIP6Route {
- guint32 refcount;
-
- struct in6_addr dest;
- guint32 prefix;
- struct in6_addr next_hop;
- guint32 metric; /* lower metric == more preferred */
-};
-
-/**
- * nm_ip6_route_new:
- *
- * Creates and returns a new #NMIP6Route object.
- *
- * Returns: (transfer full): the new empty #NMIP6Route object
- **/
-NMIP6Route *
-nm_ip6_route_new (void)
-{
- NMIP6Route *route;
-
- route = g_malloc0 (sizeof (NMIP6Route));
- route->refcount = 1;
- return route;
-}
-
-/**
- * nm_ip6_route_dup:
- * @source: the #NMIP6Route object to copy
- *
- * Copies a given #NMIP6Route object and returns the copy.
- *
- * Returns: (transfer full): the copy of the given #NMIP6Route copy
- **/
-NMIP6Route *
-nm_ip6_route_dup (NMIP6Route *source)
-{
- NMIP6Route *route;
-
- g_return_val_if_fail (source != NULL, NULL);
- g_return_val_if_fail (source->refcount > 0, NULL);
-
- route = nm_ip6_route_new ();
- route->prefix = source->prefix;
- route->metric = source->metric;
- memcpy (&route->dest, &source->dest, sizeof (struct in6_addr));
- memcpy (&route->next_hop, &source->next_hop, sizeof (struct in6_addr));
-
- return route;
-}
-
-/**
- * nm_ip6_route_ref:
- * @route: the #NMIP6Route
- *
- * Increases the reference count of the object.
- **/
-void
-nm_ip6_route_ref (NMIP6Route *route)
-{
- g_return_if_fail (route != NULL);
- g_return_if_fail (route->refcount > 0);
-
- route->refcount++;
-}
-
-/**
- * nm_ip6_route_unref:
- * @route: the #NMIP6Route
- *
- * Decreases the reference count of the object. If the reference count
- * reaches zero, the object will be destroyed.
- **/
-void
-nm_ip6_route_unref (NMIP6Route *route)
-{
- g_return_if_fail (route != NULL);
- g_return_if_fail (route->refcount > 0);
-
- route->refcount--;
- if (route->refcount == 0) {
- memset (route, 0, sizeof (NMIP6Route));
- g_free (route);
- }
-}
-
-/**
- * nm_ip6_route_compare:
- * @route: the #NMIP6Route
- * @other: the #NMIP6Route to compare @route to.
- *
- * Determines if two #NMIP6Route objects contain the same values.
- *
- * Returns: %TRUE if the objects contain the same values, %FALSE if they do not.
- **/
-gboolean
-nm_ip6_route_compare (NMIP6Route *route, NMIP6Route *other)
-{
- g_return_val_if_fail (route != NULL, FALSE);
- g_return_val_if_fail (route->refcount > 0, FALSE);
-
- g_return_val_if_fail (other != NULL, FALSE);
- g_return_val_if_fail (other->refcount > 0, FALSE);
-
- if ( memcmp (&route->dest, &other->dest, sizeof (struct in6_addr))
- || route->prefix != other->prefix
- || memcmp (&route->next_hop, &other->next_hop, sizeof (struct in6_addr))
- || route->metric != other->metric)
- return FALSE;
- return TRUE;
-}
-
-/**
- * nm_ip6_route_get_dest:
- * @route: the #NMIP6Route
- *
- * Gets the IPv6 destination address property of this route object.
- *
- * Returns: (array fixed-size=16) (element-type guint8) (transfer none):
- * the IPv6 address of destination
- **/
-const struct in6_addr *
-nm_ip6_route_get_dest (NMIP6Route *route)
-{
- g_return_val_if_fail (route != NULL, NULL);
- g_return_val_if_fail (route->refcount > 0, NULL);
-
- return &route->dest;
-}
-
-/**
- * nm_ip6_route_set_dest:
- * @route: the #NMIP6Route
- * @dest: the destination address
- *
- * Sets the IPv6 destination address property of this route object.
- **/
-void
-nm_ip6_route_set_dest (NMIP6Route *route, const struct in6_addr *dest)
-{
- g_return_if_fail (route != NULL);
- g_return_if_fail (route->refcount > 0);
- g_return_if_fail (dest != NULL);
-
- memcpy (&route->dest, dest, sizeof (struct in6_addr));
-}
-
-/**
- * nm_ip6_route_get_prefix:
- * @route: the #NMIP6Route
- *
- * Gets the IPv6 prefix (ie "32" or "64" etc) of this route.
- *
- * Returns: the IPv6 prefix
- **/
-guint32
-nm_ip6_route_get_prefix (NMIP6Route *route)
-{
- g_return_val_if_fail (route != NULL, 0);
- g_return_val_if_fail (route->refcount > 0, 0);
-
- return route->prefix;
-}
-
-/**
- * nm_ip6_route_set_prefix:
- * @route: the #NMIP6Route
- * @prefix: the prefix, a number between 1 and 128 inclusive
- *
- * Sets the IPv6 prefix of this route.
- **/
-void
-nm_ip6_route_set_prefix (NMIP6Route *route, guint32 prefix)
-{
- g_return_if_fail (route != NULL);
- g_return_if_fail (route->refcount > 0);
- g_return_if_fail (prefix <= 128);
- g_return_if_fail (prefix > 0);
-
- route->prefix = prefix;
-}
-
-/**
- * nm_ip6_route_get_next_hop:
- * @route: the #NMIP6Route
- *
- * Gets the IPv6 address of the next hop of this route.
- *
- * Returns: (array fixed-size=16) (element-type guint8) (transfer none):
- * the IPv6 address of next hop
- **/
-const struct in6_addr *
-nm_ip6_route_get_next_hop (NMIP6Route *route)
-{
- g_return_val_if_fail (route != NULL, NULL);
- g_return_val_if_fail (route->refcount > 0, NULL);
-
- return &route->next_hop;
-}
-
-/**
- * nm_ip6_route_set_next_hop:
- * @route: the #NMIP6Route
- * @next_hop: the IPv6 address of the next hop
- *
- * Sets the IPv6 address of the next hop of this route.
- **/
-void
-nm_ip6_route_set_next_hop (NMIP6Route *route, const struct in6_addr *next_hop)
-{
- g_return_if_fail (route != NULL);
- g_return_if_fail (route->refcount > 0);
- g_return_if_fail (next_hop != NULL);
-
- memcpy (&route->next_hop, next_hop, sizeof (struct in6_addr));
-}
-
-/**
- * nm_ip6_route_get_metric:
- * @route: the #NMIP6Route
- *
- * Gets the route metric property of this route object; lower values indicate
- * "better" or more preferred routes.
- *
- * Returns: the route metric
- **/
-guint32
-nm_ip6_route_get_metric (NMIP6Route *route)
-{
- g_return_val_if_fail (route != NULL, 0);
- g_return_val_if_fail (route->refcount > 0, 0);
-
- return route->metric;
-}
-
-/**
- * nm_ip6_route_set_metric:
- * @route: the #NMIP6Route
- * @metric: the route metric
- *
- * Sets the route metric property of this route object; lower values indicate
- * "better" or more preferred routes.
- **/
-void
-nm_ip6_route_set_metric (NMIP6Route *route, guint32 metric)
-{
- g_return_if_fail (route != NULL);
- g_return_if_fail (route->refcount > 0);
-
- route->metric = metric;
-}