Blame libnm-core/nm-setting-ip4-config.c

Packit Service b23acc
// SPDX-License-Identifier: LGPL-2.1+
Packit Service b23acc
/*
Packit Service b23acc
 * Copyright (C) 2014 Red Hat, Inc.
Packit Service b23acc
 */
Packit Service b23acc
Packit Service b23acc
#include "nm-default.h"
Packit Service b23acc
Packit Service b23acc
#include "nm-setting-ip4-config.h"
Packit Service b23acc
Packit Service b23acc
#include "nm-setting-private.h"
Packit Service b23acc
Packit Service b23acc
/**
Packit Service b23acc
 * SECTION:nm-setting-ip4-config
Packit Service b23acc
 * @short_description: Describes IPv4 addressing, routing, and name service properties
Packit Service b23acc
 *
Packit Service b23acc
 * The #NMSettingIP4Config object is a #NMSetting subclass that describes
Packit Service b23acc
 * properties related to IPv4 addressing, routing, and Domain Name Service.
Packit Service b23acc
 *
Packit Service b23acc
 * #NMSettingIP4Config has few properties or methods of its own; it inherits
Packit Service b23acc
 * almost everything from #NMSettingIPConfig.
Packit Service b23acc
 *
Packit Service b23acc
 * NetworkManager supports 5 values for the #NMSettingIPConfig:method property
Packit Service b23acc
 * for IPv4.  If "auto" is specified then the appropriate automatic method
Packit Service b23acc
 * (DHCP, PPP, etc) is used for the interface and most other properties can be
Packit Service b23acc
 * left unset.  If "link-local" is specified, then a link-local address in the
Packit Service b23acc
 * 169.254/16 range will be assigned to the interface.  If "manual" is
Packit Service b23acc
 * specified, static IP addressing is used and at least one IP address must be
Packit Service b23acc
 * given in the "addresses" property.  If "shared" is specified (indicating that
Packit Service b23acc
 * this connection will provide network access to other computers) then the
Packit Service b23acc
 * interface is assigned an address in the 10.42.x.1/24 range and a DHCP and
Packit Service b23acc
 * forwarding DNS server are started, and the interface is NAT-ed to the current
Packit Service b23acc
 * default network connection.  "disabled" means IPv4 will not be used on this
Packit Service b23acc
 * connection.
Packit Service b23acc
 **/
Packit Service b23acc
Packit Service b23acc
/*****************************************************************************/
Packit Service b23acc
Packit Service b23acc
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
Packit Service b23acc
	PROP_DHCP_CLIENT_ID,
Packit Service b23acc
	PROP_DHCP_FQDN,
Packit Service b23acc
);
Packit Service b23acc
Packit Service b23acc
typedef struct {
Packit Service b23acc
	char *dhcp_client_id;
Packit Service b23acc
	char *dhcp_fqdn;
Packit Service b23acc
} NMSettingIP4ConfigPrivate;
Packit Service b23acc
Packit Service b23acc
G_DEFINE_TYPE (NMSettingIP4Config, nm_setting_ip4_config, NM_TYPE_SETTING_IP_CONFIG)
Packit Service b23acc
Packit Service b23acc
#define NM_SETTING_IP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_IP4_CONFIG, NMSettingIP4ConfigPrivate))
Packit Service b23acc
Packit Service b23acc
/*****************************************************************************/
Packit Service b23acc
Packit Service b23acc
/**
Packit Service b23acc
 * nm_setting_ip4_config_get_dhcp_client_id:
Packit Service b23acc
 * @setting: the #NMSettingIP4Config
Packit Service b23acc
 *
Packit Service b23acc
 * Returns the value contained in the #NMSettingIP4Config:dhcp-client-id
Packit Service b23acc
 * property.
Packit Service b23acc
 *
Packit Service b23acc
 * Returns: the configured Client ID to send to the DHCP server when requesting
Packit Service b23acc
 * addresses via DHCP.
Packit Service b23acc
 **/
Packit Service b23acc
const char *
Packit Service b23acc
nm_setting_ip4_config_get_dhcp_client_id (NMSettingIP4Config *setting)
Packit Service b23acc
{
Packit Service b23acc
	g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), NULL);
Packit Service b23acc
Packit Service b23acc
	return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dhcp_client_id;
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
/**
Packit Service b23acc
 * nm_setting_ip4_config_get_dhcp_fqdn:
Packit Service b23acc
 * @setting: the #NMSettingIP4Config
Packit Service b23acc
 *
Packit Service b23acc
 * Returns the value contained in the #NMSettingIP4Config:dhcp-fqdn
Packit Service b23acc
 * property.
Packit Service b23acc
 *
Packit Service b23acc
 * Returns: the configured FQDN to send to the DHCP server
Packit Service b23acc
 *
Packit Service b23acc
 * Since: 1.2
Packit Service b23acc
 **/
Packit Service b23acc
const char *
Packit Service b23acc
nm_setting_ip4_config_get_dhcp_fqdn (NMSettingIP4Config *setting)
Packit Service b23acc
{
Packit Service b23acc
	g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), NULL);
Packit Service b23acc
Packit Service b23acc
	return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dhcp_fqdn;
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static gboolean
Packit Service b23acc
verify (NMSetting *setting, NMConnection *connection, GError **error)
Packit Service b23acc
{
Packit Service b23acc
	NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
Packit Service b23acc
	NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG (setting);
Packit Service b23acc
	NMSettingVerifyResult ret;
Packit Service b23acc
	const char *method;
Packit Service b23acc
Packit Service b23acc
	ret = NM_SETTING_CLASS (nm_setting_ip4_config_parent_class)->verify (setting, connection, error);
Packit Service b23acc
	if (ret != NM_SETTING_VERIFY_SUCCESS)
Packit Service b23acc
		return ret;
Packit Service b23acc
Packit Service b23acc
	method = nm_setting_ip_config_get_method (s_ip);
Packit Service b23acc
	/* Base class already checked that it exists */
Packit Service b23acc
	g_assert (method);
Packit Service b23acc
Packit Service b23acc
	if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
Packit Service b23acc
		if (nm_setting_ip_config_get_num_addresses (s_ip) == 0) {
Packit Service b23acc
			g_set_error (error,
Packit Service b23acc
			             NM_CONNECTION_ERROR,
Packit Service b23acc
			             NM_CONNECTION_ERROR_MISSING_PROPERTY,
Packit Service b23acc
			             _("this property cannot be empty for '%s=%s'"),
Packit Service b23acc
			             NM_SETTING_IP_CONFIG_METHOD, method);
Packit Service b23acc
			g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_ADDRESSES);
Packit Service b23acc
			return FALSE;
Packit Service b23acc
		}
Packit Service b23acc
	} else if (   !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL)
Packit Service b23acc
	           || !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED)
Packit Service b23acc
	           || !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)) {
Packit Service b23acc
		if (nm_setting_ip_config_get_num_dns (s_ip) > 0) {
Packit Service b23acc
			g_set_error (error,
Packit Service b23acc
			             NM_CONNECTION_ERROR,
Packit Service b23acc
			             NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service b23acc
			             _("this property is not allowed for '%s=%s'"),
Packit Service b23acc
			             NM_SETTING_IP_CONFIG_METHOD, method);
Packit Service b23acc
			g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_DNS);
Packit Service b23acc
			return FALSE;
Packit Service b23acc
		}
Packit Service b23acc
Packit Service b23acc
		if (nm_setting_ip_config_get_num_dns_searches (s_ip) > 0) {
Packit Service b23acc
			g_set_error (error,
Packit Service b23acc
			             NM_CONNECTION_ERROR,
Packit Service b23acc
			             NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service b23acc
			             _("this property is not allowed for '%s=%s'"),
Packit Service b23acc
			             NM_SETTING_IP_CONFIG_METHOD, method);
Packit Service b23acc
			g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_DNS_SEARCH);
Packit Service b23acc
			return FALSE;
Packit Service b23acc
		}
Packit Service b23acc
Packit Service b23acc
		/* Shared allows IP addresses; link-local and disabled do not */
Packit Service b23acc
		if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) != 0) {
Packit Service b23acc
			if (nm_setting_ip_config_get_num_addresses (s_ip) > 0) {
Packit Service b23acc
				g_set_error (error,
Packit Service b23acc
				             NM_CONNECTION_ERROR,
Packit Service b23acc
				             NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service b23acc
				             _("this property is not allowed for '%s=%s'"),
Packit Service b23acc
				             NM_SETTING_IP_CONFIG_METHOD, method);
Packit Service b23acc
				g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_ADDRESSES);
Packit Service b23acc
				return FALSE;
Packit Service b23acc
			}
Packit Service b23acc
		}
Packit Service b23acc
	} else if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
Packit Service b23acc
		/* nothing to do */
Packit Service b23acc
	} else {
Packit Service b23acc
		g_set_error_literal (error,
Packit Service b23acc
		                     NM_CONNECTION_ERROR,
Packit Service b23acc
		                     NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service b23acc
		                     _("property is invalid"));
Packit Service b23acc
		g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_METHOD);
Packit Service b23acc
		return FALSE;
Packit Service b23acc
	}
Packit Service b23acc
Packit Service b23acc
	if (priv->dhcp_client_id && !priv->dhcp_client_id[0]) {
Packit Service b23acc
		g_set_error_literal (error,
Packit Service b23acc
		                     NM_CONNECTION_ERROR,
Packit Service b23acc
		                     NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service b23acc
		                     _("property is empty"));
Packit Service b23acc
		g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID);
Packit Service b23acc
		return FALSE;
Packit Service b23acc
	}
Packit Service b23acc
Packit Service b23acc
	if (priv->dhcp_fqdn && !*priv->dhcp_fqdn) {
Packit Service b23acc
		g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service b23acc
		                     _("property is empty"));
Packit Service b23acc
		g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_DHCP_FQDN);
Packit Service b23acc
		return FALSE;
Packit Service b23acc
	}
Packit Service b23acc
Packit Service b23acc
	if (priv->dhcp_fqdn && !strchr (priv->dhcp_fqdn, '.')) {
Packit Service b23acc
		g_set_error (error,
Packit Service b23acc
		             NM_CONNECTION_ERROR,
Packit Service b23acc
		             NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service b23acc
		             _("'%s' is not a valid FQDN"), priv->dhcp_fqdn);
Packit Service b23acc
		g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_DHCP_FQDN);
Packit Service b23acc
		return FALSE;
Packit Service b23acc
	}
Packit Service b23acc
Packit Service b23acc
	if (priv->dhcp_fqdn && nm_setting_ip_config_get_dhcp_hostname (s_ip)) {
Packit Service b23acc
		g_set_error_literal (error,
Packit Service b23acc
		                     NM_CONNECTION_ERROR,
Packit Service b23acc
		                     NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service b23acc
		                     _("property cannot be set when dhcp-hostname is also set"));
Packit Service b23acc
		g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_DHCP_FQDN);
Packit Service b23acc
		return FALSE;
Packit Service b23acc
	}
Packit Service b23acc
Packit Service b23acc
	if (   NM_FLAGS_ANY (nm_setting_ip_config_get_dhcp_hostname_flags (s_ip),
Packit Service b23acc
	                     NM_DHCP_HOSTNAME_FLAGS_FQDN_MASK)
Packit Service b23acc
	    && !priv->dhcp_fqdn) {
Packit Service b23acc
		/* Currently we send a FQDN option only when ipv4.dhcp-fqdn is set */
Packit Service b23acc
		g_set_error_literal (error,
Packit Service b23acc
		                     NM_CONNECTION_ERROR,
Packit Service b23acc
		                     NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service b23acc
		                     _("FQDN flags requires a FQDN set"));
Packit Service b23acc
		g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME_FLAGS);
Packit Service b23acc
		return FALSE;
Packit Service b23acc
	}
Packit Service b23acc
Packit Service b23acc
	/* Failures from here on are NORMALIZABLE_ERROR... */
Packit Service b23acc
Packit Service b23acc
	if (   nm_streq (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED)
Packit Service b23acc
	    && nm_setting_ip_config_get_num_addresses (s_ip) > 1) {
Packit Service b23acc
		g_set_error (error,
Packit Service b23acc
		             NM_CONNECTION_ERROR,
Packit Service b23acc
		             NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service b23acc
		             _("multiple addresses are not allowed for '%s=%s'"),
Packit Service b23acc
		             NM_SETTING_IP_CONFIG_METHOD,
Packit Service b23acc
		             NM_SETTING_IP4_CONFIG_METHOD_SHARED);
Packit Service b23acc
		g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_ADDRESSES);
Packit Service b23acc
		return NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
Packit Service b23acc
	}
Packit Service b23acc
Packit Service b23acc
	/* Failures from here on are NORMALIZABLE... */
Packit Service b23acc
Packit Service b23acc
	if (   !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)
Packit Service b23acc
	    && !nm_setting_ip_config_get_may_fail (s_ip)) {
Packit Service b23acc
		g_set_error_literal (error,
Packit Service b23acc
		                     NM_CONNECTION_ERROR,
Packit Service b23acc
		                     NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service b23acc
		                     _("property should be TRUE when method is set to disabled"));
Packit Service b23acc
		g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_MAY_FAIL);
Packit Service b23acc
		return NM_SETTING_VERIFY_NORMALIZABLE;
Packit Service b23acc
	}
Packit Service b23acc
Packit Service b23acc
	return TRUE;
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static GVariant *
Packit Service b23acc
ip4_dns_to_dbus (const GValue *prop_value)
Packit Service b23acc
{
Packit Service b23acc
	return nm_utils_ip4_dns_to_variant (g_value_get_boxed (prop_value));
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static void
Packit Service b23acc
ip4_dns_from_dbus (GVariant *dbus_value,
Packit Service b23acc
                   GValue *prop_value)
Packit Service b23acc
{
Packit Service b23acc
	g_value_take_boxed (prop_value, nm_utils_ip4_dns_from_variant (dbus_value));
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static GVariant *
Packit Service b23acc
ip4_addresses_get (const NMSettInfoSetting *sett_info,
Packit Service b23acc
                   guint property_idx,
Packit Service b23acc
                   NMConnection *connection,
Packit Service b23acc
                   NMSetting *setting,
Packit Service b23acc
                   NMConnectionSerializationFlags flags,
Packit Service b23acc
                   const NMConnectionSerializationOptions *options)
Packit Service b23acc
{
Packit Service b23acc
	gs_unref_ptrarray GPtrArray *addrs = NULL;
Packit Service b23acc
	const char *gateway;
Packit Service b23acc
Packit Service b23acc
	g_object_get (setting, NM_SETTING_IP_CONFIG_ADDRESSES, &addrs, NULL);
Packit Service b23acc
	gateway = nm_setting_ip_config_get_gateway (NM_SETTING_IP_CONFIG (setting));
Packit Service b23acc
	return nm_utils_ip4_addresses_to_variant (addrs, gateway);
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static gboolean
Packit Service b23acc
ip4_addresses_set (NMSetting  *setting,
Packit Service b23acc
                   GVariant   *connection_dict,
Packit Service b23acc
                   const char *property,
Packit Service b23acc
                   GVariant   *value,
Packit Service b23acc
                   NMSettingParseFlags parse_flags,
Packit Service b23acc
                   GError    **error)
Packit Service b23acc
{
Packit Service b23acc
	GPtrArray *addrs;
Packit Service b23acc
	GVariant *s_ip4;
Packit Service b23acc
	char **labels, *gateway = NULL;
Packit Service b23acc
	int i;
Packit Service b23acc
Packit Service b23acc
	/* FIXME: properly handle errors */
Packit Service b23acc
Packit Service b23acc
	if (!_nm_setting_use_legacy_property (setting, connection_dict, "addresses", "address-data"))
Packit Service b23acc
		return TRUE;
Packit Service b23acc
Packit Service b23acc
	addrs = nm_utils_ip4_addresses_from_variant (value, &gateway);
Packit Service b23acc
Packit Service b23acc
	s_ip4 = g_variant_lookup_value (connection_dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
Packit Service b23acc
	if (g_variant_lookup (s_ip4, "address-labels", "^as", &labels)) {
Packit Service b23acc
		for (i = 0; i < addrs->len && labels[i]; i++)
Packit Service b23acc
			if (*labels[i])
Packit Service b23acc
				nm_ip_address_set_attribute (addrs->pdata[i], NM_IP_ADDRESS_ATTRIBUTE_LABEL, g_variant_new_string (labels[i]));
Packit Service b23acc
		g_strfreev (labels);
Packit Service b23acc
	}
Packit Service b23acc
	g_variant_unref (s_ip4);
Packit Service b23acc
Packit Service b23acc
	g_object_set (setting,
Packit Service b23acc
	              NM_SETTING_IP_CONFIG_ADDRESSES, addrs,
Packit Service b23acc
	              NM_SETTING_IP_CONFIG_GATEWAY, gateway,
Packit Service b23acc
	              NULL);
Packit Service b23acc
	g_ptr_array_unref (addrs);
Packit Service b23acc
	g_free (gateway);
Packit Service b23acc
	return TRUE;
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static GVariant *
Packit Service b23acc
ip4_address_labels_get (const NMSettInfoSetting *sett_info,
Packit Service b23acc
                        guint property_idx,
Packit Service b23acc
                        NMConnection *connection,
Packit Service b23acc
                        NMSetting *setting,
Packit Service b23acc
                        NMConnectionSerializationFlags flags,
Packit Service b23acc
                        const NMConnectionSerializationOptions *options)
Packit Service b23acc
{
Packit Service b23acc
	NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG (setting);
Packit Service b23acc
	gboolean have_labels = FALSE;
Packit Service b23acc
	GPtrArray *labels;
Packit Service b23acc
	GVariant *ret;
Packit Service b23acc
	int num_addrs, i;
Packit Service b23acc
Packit Service b23acc
	if (flags & NM_CONNECTION_SERIALIZE_ONLY_SECRETS)
Packit Service b23acc
		return NULL;
Packit Service b23acc
Packit Service b23acc
	num_addrs = nm_setting_ip_config_get_num_addresses (s_ip);
Packit Service b23acc
	for (i = 0; i < num_addrs; i++) {
Packit Service b23acc
		NMIPAddress *addr = nm_setting_ip_config_get_address (s_ip, i);
Packit Service b23acc
		GVariant *label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
Packit Service b23acc
Packit Service b23acc
		if (label) {
Packit Service b23acc
			have_labels = TRUE;
Packit Service b23acc
			break;
Packit Service b23acc
		}
Packit Service b23acc
	}
Packit Service b23acc
	if (!have_labels)
Packit Service b23acc
		return NULL;
Packit Service b23acc
Packit Service b23acc
	labels = g_ptr_array_sized_new (num_addrs);
Packit Service b23acc
	for (i = 0; i < num_addrs; i++) {
Packit Service b23acc
		NMIPAddress *addr = nm_setting_ip_config_get_address (s_ip, i);
Packit Service b23acc
		GVariant *label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
Packit Service b23acc
Packit Service b23acc
		g_ptr_array_add (labels, (char *) (label ? g_variant_get_string (label, NULL) : ""));
Packit Service b23acc
	}
Packit Service b23acc
Packit Service b23acc
	ret = g_variant_new_strv ((const char * const *) labels->pdata, labels->len);
Packit Service b23acc
	g_ptr_array_unref (labels);
Packit Service b23acc
Packit Service b23acc
	return ret;
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static GVariant *
Packit Service b23acc
ip4_address_data_get (const NMSettInfoSetting *sett_info,
Packit Service b23acc
                      guint property_idx,
Packit Service b23acc
                      NMConnection *connection,
Packit Service b23acc
                      NMSetting *setting,
Packit Service b23acc
                      NMConnectionSerializationFlags flags,
Packit Service b23acc
                      const NMConnectionSerializationOptions *options)
Packit Service b23acc
{
Packit Service b23acc
	gs_unref_ptrarray GPtrArray *addrs = NULL;
Packit Service b23acc
Packit Service b23acc
	if (flags & NM_CONNECTION_SERIALIZE_ONLY_SECRETS)
Packit Service b23acc
		return NULL;
Packit Service b23acc
Packit Service b23acc
	g_object_get (setting, NM_SETTING_IP_CONFIG_ADDRESSES, &addrs, NULL);
Packit Service b23acc
	return nm_utils_ip_addresses_to_variant (addrs);
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static gboolean
Packit Service b23acc
ip4_address_data_set (NMSetting  *setting,
Packit Service b23acc
                      GVariant   *connection_dict,
Packit Service b23acc
                      const char *property,
Packit Service b23acc
                      GVariant   *value,
Packit Service b23acc
                      NMSettingParseFlags parse_flags,
Packit Service b23acc
                      GError    **error)
Packit Service b23acc
{
Packit Service b23acc
	GPtrArray *addrs;
Packit Service b23acc
Packit Service b23acc
	/* FIXME: properly handle errors */
Packit Service b23acc
Packit Service b23acc
	/* Ignore 'address-data' if we're going to process 'addresses' */
Packit Service b23acc
	if (_nm_setting_use_legacy_property (setting, connection_dict, "addresses", "address-data"))
Packit Service b23acc
		return TRUE;
Packit Service b23acc
Packit Service b23acc
	addrs = nm_utils_ip_addresses_from_variant (value, AF_INET);
Packit Service b23acc
	g_object_set (setting, NM_SETTING_IP_CONFIG_ADDRESSES, addrs, NULL);
Packit Service b23acc
	g_ptr_array_unref (addrs);
Packit Service b23acc
	return TRUE;
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static GVariant *
Packit Service b23acc
ip4_routes_get (const NMSettInfoSetting *sett_info,
Packit Service b23acc
                guint property_idx,
Packit Service b23acc
                NMConnection *connection,
Packit Service b23acc
                NMSetting *setting,
Packit Service b23acc
                NMConnectionSerializationFlags flags,
Packit Service b23acc
                const NMConnectionSerializationOptions *options)
Packit Service b23acc
{
Packit Service b23acc
	gs_unref_ptrarray GPtrArray *routes = NULL;
Packit Service b23acc
Packit Service b23acc
	g_object_get (setting, NM_SETTING_IP_CONFIG_ROUTES, &routes, NULL);
Packit Service b23acc
	return nm_utils_ip4_routes_to_variant (routes);
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static gboolean
Packit Service b23acc
ip4_routes_set (NMSetting  *setting,
Packit Service b23acc
                GVariant   *connection_dict,
Packit Service b23acc
                const char *property,
Packit Service b23acc
                GVariant   *value,
Packit Service b23acc
                NMSettingParseFlags parse_flags,
Packit Service b23acc
                GError    **error)
Packit Service b23acc
{
Packit Service b23acc
	GPtrArray *routes;
Packit Service b23acc
Packit Service b23acc
	/* FIXME: properly handle errors */
Packit Service b23acc
Packit Service b23acc
	if (!_nm_setting_use_legacy_property (setting, connection_dict, "routes", "route-data"))
Packit Service b23acc
		return TRUE;
Packit Service b23acc
Packit Service b23acc
	routes = nm_utils_ip4_routes_from_variant (value);
Packit Service b23acc
	g_object_set (setting, property, routes, NULL);
Packit Service b23acc
	g_ptr_array_unref (routes);
Packit Service b23acc
	return TRUE;
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static GVariant *
Packit Service b23acc
ip4_route_data_get (const NMSettInfoSetting *sett_info,
Packit Service b23acc
                    guint property_idx,
Packit Service b23acc
                    NMConnection *connection,
Packit Service b23acc
                    NMSetting *setting,
Packit Service b23acc
                    NMConnectionSerializationFlags flags,
Packit Service b23acc
                    const NMConnectionSerializationOptions *options)
Packit Service b23acc
{
Packit Service b23acc
	gs_unref_ptrarray GPtrArray *routes = NULL;
Packit Service b23acc
Packit Service b23acc
	if (flags & NM_CONNECTION_SERIALIZE_ONLY_SECRETS)
Packit Service b23acc
		return NULL;
Packit Service b23acc
Packit Service b23acc
	g_object_get (setting, NM_SETTING_IP_CONFIG_ROUTES, &routes, NULL);
Packit Service b23acc
	return nm_utils_ip_routes_to_variant (routes);
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static gboolean
Packit Service b23acc
ip4_route_data_set (NMSetting  *setting,
Packit Service b23acc
                    GVariant   *connection_dict,
Packit Service b23acc
                    const char *property,
Packit Service b23acc
                    GVariant   *value,
Packit Service b23acc
                    NMSettingParseFlags parse_flags,
Packit Service b23acc
                    GError    **error)
Packit Service b23acc
{
Packit Service b23acc
	GPtrArray *routes;
Packit Service b23acc
Packit Service b23acc
	/* FIXME: properly handle errors */
Packit Service b23acc
Packit Service b23acc
	/* Ignore 'route-data' if we're going to process 'routes' */
Packit Service b23acc
	if (_nm_setting_use_legacy_property (setting, connection_dict, "routes", "route-data"))
Packit Service b23acc
		return TRUE;
Packit Service b23acc
Packit Service b23acc
	routes = nm_utils_ip_routes_from_variant (value, AF_INET);
Packit Service b23acc
	g_object_set (setting, NM_SETTING_IP_CONFIG_ROUTES, routes, NULL);
Packit Service b23acc
	g_ptr_array_unref (routes);
Packit Service b23acc
	return TRUE;
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
/*****************************************************************************/
Packit Service b23acc
Packit Service b23acc
static void
Packit Service b23acc
get_property (GObject *object, guint prop_id,
Packit Service b23acc
              GValue *value, GParamSpec *pspec)
Packit Service b23acc
{
Packit Service b23acc
	NMSettingIP4Config *s_ip4 = NM_SETTING_IP4_CONFIG (object);
Packit Service b23acc
Packit Service b23acc
	switch (prop_id) {
Packit Service b23acc
	case PROP_DHCP_CLIENT_ID:
Packit Service b23acc
		g_value_set_string (value, nm_setting_ip4_config_get_dhcp_client_id (s_ip4));
Packit Service b23acc
		break;
Packit Service b23acc
	case PROP_DHCP_FQDN:
Packit Service b23acc
		g_value_set_string (value, nm_setting_ip4_config_get_dhcp_fqdn (s_ip4));
Packit Service b23acc
		break;
Packit Service b23acc
	default:
Packit Service b23acc
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit Service b23acc
		break;
Packit Service b23acc
	}
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static void
Packit Service b23acc
set_property (GObject *object, guint prop_id,
Packit Service b23acc
              const GValue *value, GParamSpec *pspec)
Packit Service b23acc
{
Packit Service b23acc
	NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (object);
Packit Service b23acc
Packit Service b23acc
	switch (prop_id) {
Packit Service b23acc
	case PROP_DHCP_CLIENT_ID:
Packit Service b23acc
		g_free (priv->dhcp_client_id);
Packit Service b23acc
		priv->dhcp_client_id = g_value_dup_string (value);
Packit Service b23acc
		break;
Packit Service b23acc
	case PROP_DHCP_FQDN:
Packit Service b23acc
		g_free (priv->dhcp_fqdn);
Packit Service b23acc
		priv->dhcp_fqdn = g_value_dup_string (value);
Packit Service b23acc
		break;
Packit Service b23acc
	default:
Packit Service b23acc
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit Service b23acc
		break;
Packit Service b23acc
	}
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
/*****************************************************************************/
Packit Service b23acc
Packit Service b23acc
static void
Packit Service b23acc
nm_setting_ip4_config_init (NMSettingIP4Config *setting)
Packit Service b23acc
{
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
/**
Packit Service b23acc
 * nm_setting_ip4_config_new:
Packit Service b23acc
 *
Packit Service b23acc
 * Creates a new #NMSettingIP4Config object with default values.
Packit Service b23acc
 *
Packit Service b23acc
 * Returns: (transfer full): the new empty #NMSettingIP4Config object
Packit Service b23acc
 **/
Packit Service b23acc
NMSetting *
Packit Service b23acc
nm_setting_ip4_config_new (void)
Packit Service b23acc
{
Packit Service b23acc
	return (NMSetting *) g_object_new (NM_TYPE_SETTING_IP4_CONFIG, NULL);
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static void
Packit Service b23acc
finalize (GObject *object)
Packit Service b23acc
{
Packit Service b23acc
	NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (object);
Packit Service b23acc
Packit Service b23acc
	g_free (priv->dhcp_client_id);
Packit Service b23acc
	g_free (priv->dhcp_fqdn);
Packit Service b23acc
Packit Service b23acc
	G_OBJECT_CLASS (nm_setting_ip4_config_parent_class)->finalize (object);
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
static void
Packit Service b23acc
nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *klass)
Packit Service b23acc
{
Packit Service b23acc
	GObjectClass *object_class = G_OBJECT_CLASS (klass);
Packit Service b23acc
	NMSettingClass *setting_class = NM_SETTING_CLASS (klass);
Packit Service b23acc
	GArray *properties_override = _nm_sett_info_property_override_create_array_ip_config ();
Packit Service b23acc
Packit Service b23acc
	g_type_class_add_private (setting_class, sizeof (NMSettingIP4ConfigPrivate));
Packit Service b23acc
Packit Service b23acc
	object_class->get_property = get_property;
Packit Service b23acc
	object_class->set_property = set_property;
Packit Service b23acc
	object_class->finalize     = finalize;
Packit Service b23acc
Packit Service b23acc
	setting_class->verify = verify;
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: method
Packit Service b23acc
	 * variable: BOOTPROTO
Packit Service b23acc
	 * format:   string
Packit Service b23acc
	 * values:   none, dhcp (bootp), static, ibft, autoip, shared
Packit Service b23acc
	 * default:  none
Packit Service b23acc
	 * description: Method used for IPv4 protocol configuration.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---keyfile---
Packit Service b23acc
	 * property: dns
Packit Service b23acc
	 * format: list of DNS IP addresses
Packit Service b23acc
	 * description: List of DNS servers.
Packit Service b23acc
	 * example: dns=1.2.3.4;8.8.8.8;8.8.4.4;
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 * ---ifcfg-rh---
Packit Service b23acc
	 * property: dns
Packit Service b23acc
	 * variable: DNS1, DNS2, ...
Packit Service b23acc
	 * format:   string
Packit Service b23acc
	 * description: List of DNS servers. Even if NetworkManager supports many DNS
Packit Service b23acc
	 *   servers, initscripts and resolver only care about the first three, usually.
Packit Service b23acc
	 * example: DNS1=1.2.3.4 DNS2=10.0.0.254 DNS3=8.8.8.8
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: dns-search
Packit Service b23acc
	 * variable: DOMAIN
Packit Service b23acc
	 * format:   string (space-separated domains)
Packit Service b23acc
	 * description: List of DNS search domains.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---keyfile---
Packit Service b23acc
	 * property: addresses
Packit Service b23acc
	 * variable: address1, address2, ...
Packit Service b23acc
	 * format: address/plen
Packit Service b23acc
	 * description: List of static IP addresses.
Packit Service b23acc
	 * example: address1=192.168.100.100/24 address2=10.1.1.5/24
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 * ---ifcfg-rh---
Packit Service b23acc
	 * property: addresses
Packit Service b23acc
	 * variable: IPADDR, PREFIX, IPADDR1, PREFIX1, ...
Packit Service b23acc
	 * description: List of static IP addresses.
Packit Service b23acc
	 * example: IPADDR=10.5.5.23 PREFIX=24 IPADDR1=1.1.1.2 PREFIX1=16
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---keyfile---
Packit Service b23acc
	 * property: gateway
Packit Service b23acc
	 * variable: gateway
Packit Service b23acc
	 * format: string
Packit Service b23acc
	 * description: Gateway IP addresses as a string.
Packit Service b23acc
	 * example: gateway=192.168.100.1
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 * ---ifcfg-rh---
Packit Service b23acc
	 * property: gateway
Packit Service b23acc
	 * variable: GATEWAY
Packit Service b23acc
	 * description: Gateway IP address.
Packit Service b23acc
	 * example: GATEWAY=10.5.5.1
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---keyfile---
Packit Service b23acc
	 * property: routes
Packit Service b23acc
	 * variable: route1, route2, ...
Packit Service b23acc
	 * format: route/plen[,gateway,metric]
Packit Service b23acc
	 * description: List of IP routes.
Packit Service b23acc
	 * example: route1=8.8.8.0/24,10.1.1.1,77
Packit Service b23acc
	 *   route2=7.7.0.0/16
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 * ---ifcfg-rh---
Packit Service b23acc
	 * property: routes
Packit Service b23acc
	 * variable: ADDRESS1, NETMASK1, GATEWAY1, METRIC1, OPTIONS1, ...
Packit Service b23acc
	 * description: List of static routes. They are not stored in ifcfg-* file,
Packit Service b23acc
	 *   but in route-* file instead.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: ignore-auto-routes
Packit Service b23acc
	 * variable: PEERROUTES(+)
Packit Service b23acc
	 * default: yes
Packit Service b23acc
	 * description: PEERROUTES has the opposite meaning as 'ignore-auto-routes' property.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: ignore-auto-dns
Packit Service b23acc
	 * variable: PEERDNS
Packit Service b23acc
	 * default: yes
Packit Service b23acc
	 * description: PEERDNS has the opposite meaning as 'ignore-auto-dns' property.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: dhcp-send-hostname
Packit Service b23acc
	 * variable: DHCP_SEND_HOSTNAME(+)
Packit Service b23acc
	 * default: yes
Packit Service b23acc
	 * description: Whether DHCP_HOSTNAME should be sent to the DHCP server.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: dhcp-hostname
Packit Service b23acc
	 * variable: DHCP_HOSTNAME
Packit Service b23acc
	 * description: Hostname to send to the DHCP server. When both DHCP_HOSTNAME and
Packit Service b23acc
	 *    DHCP_FQDN are specified only the latter is used.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: never-default
Packit Service b23acc
	 * variable: DEFROUTE (GATEWAYDEV in /etc/sysconfig/network)
Packit Service b23acc
	 * default: yes
Packit Service b23acc
	 * description: DEFROUTE=no tells NetworkManager that this connection
Packit Service b23acc
	 *   should not be assigned the default route. DEFROUTE has the opposite
Packit Service b23acc
	 *   meaning as 'never-default' property.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: may-fail
Packit Service b23acc
	 * variable: IPV4_FAILURE_FATAL(+)
Packit Service b23acc
	 * default: no
Packit Service b23acc
	 * description: IPV4_FAILURE_FATAL has the opposite meaning as 'may-fail' property.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: route-metric
Packit Service b23acc
	 * variable: IPV4_ROUTE_METRIC(+)
Packit Service b23acc
	 * default: -1
Packit Service b23acc
	 * description: IPV4_ROUTE_METRIC is the default IPv4 metric for routes on this connection.
Packit Service b23acc
	 *   If set to -1, a default metric based on the device type is used.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: route-table
Packit Service b23acc
	 * variable: IPV4_ROUTE_TABLE(+)
Packit Service b23acc
	 * default: 0
Packit Service b23acc
	 * description: IPV4_ROUTE_TABLE enables policy-routing and sets the default routing table.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: dns-options
Packit Service b23acc
	 * variable: RES_OPTIONS(+)
Packit Service b23acc
	 * description: List of DNS options to be added to /etc/resolv.conf
Packit Service b23acc
	 * example: RES_OPTIONS=ndots:2 timeout:3
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: dns-priority
Packit Service b23acc
	 * variable: IPV4_DNS_PRIORITY(+)
Packit Service b23acc
	 * description: The priority for DNS servers of this connection. Lower values have higher priority.
Packit Service b23acc
	 *    If zero, the default value will be used (50 for VPNs, 100 for other connections).
Packit Service b23acc
	 *    A negative value prevents DNS from other connections with greater values to be used.
Packit Service b23acc
	 * default: 0
Packit Service b23acc
	 * example: IPV4_DNS_PRIORITY=20
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/**
Packit Service b23acc
	 * NMSettingIP4Config:dhcp-client-id:
Packit Service b23acc
	 *
Packit Service b23acc
	 * A string sent to the DHCP server to identify the local machine which the
Packit Service b23acc
	 * DHCP server may use to customize the DHCP lease and options.
Packit Service b23acc
	 * When the property is a hex string ('aa:bb:cc') it is interpreted as a
Packit Service b23acc
	 * binary client ID, in which case the first byte is assumed to be the
Packit Service b23acc
	 * 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be
Packit Service b23acc
	 * an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet
Packit Service b23acc
	 * ARP type and the rest is a MAC address).
Packit Service b23acc
	 * If the property is not a hex string it is considered as a
Packit Service b23acc
	 * non-hardware-address client ID and the 'type' field is set to 0.
Packit Service b23acc
	 *
Packit Service b23acc
	 * The special values "mac" and "perm-mac" are supported, which use the
Packit Service b23acc
	 * current or permanent MAC address of the device to generate a client identifier
Packit Service b23acc
	 * with type ethernet (01). Currently, these options only work for ethernet
Packit Service b23acc
	 * type of links.
Packit Service b23acc
	 *
Packit Service b23acc
	 * The special value "duid" generates a RFC4361-compliant client identifier based
Packit Service b23acc
	 * on a hash of the interface name as IAID and /etc/machine-id.
Packit Service b23acc
	 *
Packit Service b23acc
	 * The special value "stable" is supported to generate a type 0 client identifier based
Packit Service b23acc
	 * on the stable-id (see connection.stable-id) and a per-host key. If you set the
Packit Service b23acc
	 * stable-id, you may want to include the "${DEVICE}" or "${MAC}" specifier to get a
Packit Service b23acc
	 * per-device key.
Packit Service b23acc
	 *
Packit Service b23acc
	 * If unset, a globally configured default is used. If still unset, the default
Packit Service b23acc
	 * depends on the DHCP plugin.
Packit Service b23acc
	 **/
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: dhcp-client-id
Packit Service b23acc
	 * variable: DHCP_CLIENT_ID(+)
Packit Service b23acc
	 * description: A string sent to the DHCP server to identify the local machine.
Packit Service b23acc
	 *    A binary value can be specified using hex notation ('aa:bb:cc').
Packit Service b23acc
	 * example: DHCP_CLIENT_ID=ax-srv-1; DHCP_CLIENT_ID=01:44:44:44:44:44:44
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
	obj_properties[PROP_DHCP_CLIENT_ID] =
Packit Service b23acc
	    g_param_spec_string (NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, "", "",
Packit Service b23acc
	                         NULL,
Packit Service b23acc
	                         G_PARAM_READWRITE |
Packit Service b23acc
	                         G_PARAM_STATIC_STRINGS);
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: dad-timeout
Packit Service b23acc
	 * variable: ACD_TIMEOUT(+), ARPING_WAIT
Packit Service b23acc
	 * default: missing variable means global default (config override or zero)
Packit Service b23acc
	 * description: Timeout (in milliseconds for ACD_TIMEOUT or in seconds
Packit Service b23acc
	 *   for ARPING_WAIT) for address conflict detection before configuring
Packit Service b23acc
	 *   IPv4 addresses. 0 turns off the ACD completely, -1 means default value.
Packit Service b23acc
	 * example: ACD_TIMEOUT=2000 or ARPING_WAIT=2
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: dhcp-timeout
Packit Service b23acc
	 * variable: IPV4_DHCP_TIMEOUT(+)
Packit Service b23acc
	 * description: A timeout after which the DHCP transaction fails in case of no response.
Packit Service b23acc
	 * example: IPV4_DHCP_TIMEOUT=10
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: dhcp-hostname-flags
Packit Service b23acc
	 * variable: DHCP_HOSTNAME_FLAGS
Packit Service b23acc
	 * description: flags for the DHCP hostname and FQDN properties
Packit Service b23acc
	 * example: DHCP_HOSTNAME_FLAGS=5
Packit Service b23acc
	 */
Packit Service b23acc
Packit Service b23acc
	/**
Packit Service b23acc
	 * NMSettingIP4Config:dhcp-fqdn:
Packit Service b23acc
	 *
Packit Service b23acc
	 * If the #NMSettingIPConfig:dhcp-send-hostname property is %TRUE, then the
Packit Service b23acc
	 * specified FQDN will be sent to the DHCP server when acquiring a lease. This
Packit Service b23acc
	 * property and #NMSettingIPConfig:dhcp-hostname are mutually exclusive and
Packit Service b23acc
	 * cannot be set at the same time.
Packit Service b23acc
	 *
Packit Service b23acc
	 * Since: 1.2
Packit Service b23acc
	 */
Packit Service b23acc
	/* ---ifcfg-rh---
Packit Service b23acc
	 * property: dhcp-fqdn
Packit Service b23acc
	 * variable: DHCP_FQDN
Packit Service b23acc
	 * description: FQDN to send to the DHCP server. When both DHCP_HOSTNAME and
Packit Service b23acc
	 *    DHCP_FQDN are specified only the latter is used.
Packit Service b23acc
	 * example: DHCP_FQDN=foo.bar.com
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
	obj_properties[PROP_DHCP_FQDN] =
Packit Service b23acc
	    g_param_spec_string (NM_SETTING_IP4_CONFIG_DHCP_FQDN, "", "",
Packit Service b23acc
	                         NULL,
Packit Service b23acc
	                         G_PARAM_READWRITE |
Packit Service b23acc
	                         G_PARAM_STATIC_STRINGS);
Packit Service b23acc
Packit Service b23acc
	/* IP4-specific property overrides */
Packit Service b23acc
Packit Service b23acc
	/* ---dbus---
Packit Service b23acc
	 * property: dns
Packit Service b23acc
	 * format: array of uint32
Packit Service b23acc
	 * description: Array of IP addresses of DNS servers (as network-byte-order
Packit Service b23acc
	 *   integers)
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
	_nm_properties_override_gobj (properties_override,
Packit Service b23acc
	                              g_object_class_find_property (G_OBJECT_CLASS (setting_class),
Packit Service b23acc
	                                                            NM_SETTING_IP_CONFIG_DNS),
Packit Service b23acc
	                              NM_SETT_INFO_PROPERT_TYPE (
Packit Service b23acc
	                                  .dbus_type           = NM_G_VARIANT_TYPE ("au"),
Packit Service b23acc
	                                  .gprop_to_dbus_fcn   = ip4_dns_to_dbus,
Packit Service b23acc
	                                  .gprop_from_dbus_fcn = ip4_dns_from_dbus,
Packit Service b23acc
	                              ));
Packit Service b23acc
Packit Service b23acc
	/* ---dbus---
Packit Service b23acc
	 * property: addresses
Packit Service b23acc
	 * format: array of array of uint32
Packit Service b23acc
	 * description: Deprecated in favor of the 'address-data' and 'gateway'
Packit Service b23acc
	 *   properties, but this can be used for backward-compatibility with older
Packit Service b23acc
	 *   daemons. Note that if you send this property the daemon will ignore
Packit Service b23acc
	 *   'address-data' and 'gateway'.
Packit Service b23acc
	 *
Packit Service b23acc
	 *   Array of IPv4 address structures.  Each IPv4 address structure is
Packit Service b23acc
	 *   composed of 3 32-bit values; the first being the IPv4 address (network
Packit Service b23acc
	 *   byte order), the second the prefix (1 - 32), and last the IPv4 gateway
Packit Service b23acc
	 *   (network byte order). The gateway may be left as 0 if no gateway exists
Packit Service b23acc
	 *   for that subnet.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
	_nm_properties_override_gobj (properties_override,
Packit Service b23acc
	                              g_object_class_find_property (G_OBJECT_CLASS (setting_class),
Packit Service b23acc
	                                                            NM_SETTING_IP_CONFIG_ADDRESSES),
Packit Service b23acc
	                              NM_SETT_INFO_PROPERT_TYPE (
Packit Service b23acc
	                                  .dbus_type     = NM_G_VARIANT_TYPE ("aau"),
Packit Service b23acc
	                                  .to_dbus_fcn   = ip4_addresses_get,
Packit Service b23acc
	                                  .from_dbus_fcn = ip4_addresses_set,
Packit Service b23acc
	                              ));
Packit Service b23acc
	_nm_properties_override_dbus (properties_override,
Packit Service b23acc
	                              "address-labels",
Packit Service b23acc
	                              NM_SETT_INFO_PROPERT_TYPE (
Packit Service b23acc
	                                  .dbus_type   = G_VARIANT_TYPE_STRING_ARRAY,
Packit Service b23acc
	                                  .to_dbus_fcn = ip4_address_labels_get,
Packit Service b23acc
	                              ));
Packit Service b23acc
Packit Service b23acc
	/* ---dbus---
Packit Service b23acc
	 * property: address-data
Packit Service b23acc
	 * format: array of vardict
Packit Service b23acc
	 * description: Array of IPv4 addresses. Each address dictionary contains at
Packit Service b23acc
	 *   least 'address' and 'prefix' entries, containing the IP address as a
Packit Service b23acc
	 *   string, and the prefix length as a uint32. Additional attributes may
Packit Service b23acc
	 *   also exist on some addresses.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
	_nm_properties_override_dbus (properties_override,
Packit Service b23acc
	                              "address-data",
Packit Service b23acc
	                              NM_SETT_INFO_PROPERT_TYPE (
Packit Service b23acc
	                                  .dbus_type     = NM_G_VARIANT_TYPE ("aa{sv}"),
Packit Service b23acc
	                                  .to_dbus_fcn   = ip4_address_data_get,
Packit Service b23acc
	                                  .from_dbus_fcn = ip4_address_data_set,
Packit Service b23acc
	                              ));
Packit Service b23acc
Packit Service b23acc
	/* ---dbus---
Packit Service b23acc
	 * property: routes
Packit Service b23acc
	 * format: array of array of uint32
Packit Service b23acc
	 * description: Deprecated in favor of the 'route-data' property, but this
Packit Service b23acc
	 *   can be used for backward-compatibility with older daemons. Note that if
Packit Service b23acc
	 *   you send this property the daemon will ignore 'route-data'.
Packit Service b23acc
	 *
Packit Service b23acc
	 *   Array of IPv4 route structures.  Each IPv4 route structure is composed
Packit Service b23acc
	 *   of 4 32-bit values; the first being the destination IPv4 network or
Packit Service b23acc
	 *   address (network byte order), the second the destination network or
Packit Service b23acc
	 *   address prefix (1 - 32), the third being the next-hop (network byte
Packit Service b23acc
	 *   order) if any, and the fourth being the route metric. If the metric is
Packit Service b23acc
	 *   0, NM will choose an appropriate default metric for the device. (There
Packit Service b23acc
	 *   is no way to explicitly specify an actual metric of 0 with this
Packit Service b23acc
	 *   property.)
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
	_nm_properties_override_gobj (properties_override,
Packit Service b23acc
	                              g_object_class_find_property (G_OBJECT_CLASS (setting_class),
Packit Service b23acc
	                                                            NM_SETTING_IP_CONFIG_ROUTES),
Packit Service b23acc
	                              NM_SETT_INFO_PROPERT_TYPE (
Packit Service b23acc
	                                  .dbus_type     = NM_G_VARIANT_TYPE ("aau"),
Packit Service b23acc
	                                  .to_dbus_fcn   = ip4_routes_get,
Packit Service b23acc
	                                  .from_dbus_fcn = ip4_routes_set,
Packit Service b23acc
	                              ));
Packit Service b23acc
Packit Service b23acc
	/* ---dbus---
Packit Service b23acc
	 * property: route-data
Packit Service b23acc
	 * format: array of vardict
Packit Service b23acc
	 * description: Array of IPv4 routes. Each route dictionary contains at
Packit Service b23acc
	 *   least 'dest' and 'prefix' entries, containing the destination IP
Packit Service b23acc
	 *   address as a string, and the prefix length as a uint32. Most routes
Packit Service b23acc
	 *   will also have a 'gateway' entry, containing the gateway IP address as
Packit Service b23acc
	 *   a string. If the route has a 'metric' entry (containing a uint32), that
Packit Service b23acc
	 *   will be used as the metric for the route (otherwise NM will pick a
Packit Service b23acc
	 *   default value appropriate to the device). Additional attributes may
Packit Service b23acc
	 *   also exist on some routes.
Packit Service b23acc
	 * ---end---
Packit Service b23acc
	 */
Packit Service b23acc
	_nm_properties_override_dbus (properties_override,
Packit Service b23acc
	                              "route-data",
Packit Service b23acc
	                              NM_SETT_INFO_PROPERT_TYPE (
Packit Service b23acc
	                                  .dbus_type     = NM_G_VARIANT_TYPE ("aa{sv}"),
Packit Service b23acc
	                                  .to_dbus_fcn   = ip4_route_data_get,
Packit Service b23acc
	                                  .from_dbus_fcn = ip4_route_data_set,
Packit Service b23acc
	                              ));
Packit Service b23acc
Packit Service b23acc
	g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
Packit Service b23acc
Packit Service b23acc
	_nm_setting_class_commit_full (setting_class, NM_META_SETTING_TYPE_IP4_CONFIG,
Packit Service b23acc
	                               NULL, properties_override);
Packit Service b23acc
}