Blame libnm-core/nm-setting-ip-tunnel.c

Packit Service a1bd4f
/* SPDX-License-Identifier: LGPL-2.1+ */
Packit 5756e2
/*
Packit 5756e2
 * Copyright (C) 2015 Red Hat, Inc.
Packit 5756e2
 */
Packit 5756e2
Packit 5756e2
#include "nm-default.h"
Packit 5756e2
Packit 5756e2
#include "nm-setting-ip-tunnel.h"
Packit 5756e2
Packit 5756e2
#include "nm-setting-private.h"
Packit 5756e2
#include "nm-utils.h"
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * SECTION:nm-setting-ip-tunnel
Packit 5756e2
 * @short_description: Describes connection properties for IP tunnel devices
Packit 5756e2
 **/
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit Service a1bd4f
NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_PARENT,
Packit Service a1bd4f
                                  PROP_MODE,
Packit Service a1bd4f
                                  PROP_LOCAL,
Packit Service a1bd4f
                                  PROP_REMOTE,
Packit Service a1bd4f
                                  PROP_TTL,
Packit Service a1bd4f
                                  PROP_TOS,
Packit Service a1bd4f
                                  PROP_PATH_MTU_DISCOVERY,
Packit Service a1bd4f
                                  PROP_INPUT_KEY,
Packit Service a1bd4f
                                  PROP_OUTPUT_KEY,
Packit Service a1bd4f
                                  PROP_ENCAPSULATION_LIMIT,
Packit Service a1bd4f
                                  PROP_FLOW_LABEL,
Packit Service a1bd4f
                                  PROP_MTU,
Packit Service a1bd4f
                                  PROP_FLAGS, );
Packit 5756e2
Packit 5756e2
typedef struct {
Packit Service a1bd4f
    char *         parent;
Packit Service a1bd4f
    char *         local;
Packit Service a1bd4f
    char *         remote;
Packit Service a1bd4f
    char *         input_key;
Packit Service a1bd4f
    char *         output_key;
Packit Service a1bd4f
    guint          ttl;
Packit Service a1bd4f
    guint          tos;
Packit Service a1bd4f
    guint          encapsulation_limit;
Packit Service a1bd4f
    guint          flow_label;
Packit Service a1bd4f
    NMIPTunnelMode mode;
Packit Service a1bd4f
    guint32        mtu;
Packit Service a1bd4f
    guint32        flags;
Packit Service a1bd4f
    bool           path_mtu_discovery : 1;
Packit 5756e2
} NMSettingIPTunnelPrivate;
Packit 5756e2
Packit Service a1bd4f
G_DEFINE_TYPE(NMSettingIPTunnel, nm_setting_ip_tunnel, NM_TYPE_SETTING)
Packit 5756e2
Packit Service a1bd4f
#define NM_SETTING_IP_TUNNEL_GET_PRIVATE(o) \
Packit Service a1bd4f
    (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_IP_TUNNEL, NMSettingIPTunnelPrivate))
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_get_parent:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:parent property of the setting
Packit 5756e2
 *
Packit 5756e2
 * Returns: the parent device
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
const char *
Packit Service a1bd4f
nm_setting_ip_tunnel_get_parent(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), NULL);
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->parent;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_get_mode:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:mode property of the setting.
Packit 5756e2
 *
Packit 5756e2
 * Returns: the tunnel mode
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
NMIPTunnelMode
Packit Service a1bd4f
nm_setting_ip_tunnel_get_mode(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), 0);
Packit 5756e2
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->mode;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_get_local:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:local property of the setting.
Packit 5756e2
 *
Packit 5756e2
 * Returns: the local endpoint
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
const char *
Packit Service a1bd4f
nm_setting_ip_tunnel_get_local(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), NULL);
Packit 5756e2
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->local;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_get_remote:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:remote property of the setting.
Packit 5756e2
 *
Packit 5756e2
 * Returns: the remote endpoint
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
const char *
Packit Service a1bd4f
nm_setting_ip_tunnel_get_remote(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), NULL);
Packit 5756e2
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->remote;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_get_ttl:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:ttl property of the setting.
Packit 5756e2
 *
Packit 5756e2
 * Returns: the Time-to-live value
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
Packit 5756e2
guint
Packit Service a1bd4f
nm_setting_ip_tunnel_get_ttl(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), 0);
Packit 5756e2
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->ttl;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_get_tos:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:tos property of the setting.
Packit 5756e2
 *
Packit 5756e2
 * Returns: the TOS value
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
guint
Packit Service a1bd4f
nm_setting_ip_tunnel_get_tos(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), 0);
Packit 5756e2
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->tos;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_get_path_mtu_discovery:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:path-mtu-discovery property of the setting.
Packit 5756e2
 *
Packit 5756e2
 * Returns: whether path MTU discovery is enabled
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
gboolean
Packit Service a1bd4f
nm_setting_ip_tunnel_get_path_mtu_discovery(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), TRUE);
Packit 5756e2
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->path_mtu_discovery;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_get_input_key:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:input-key property of the setting.
Packit 5756e2
 *
Packit 5756e2
 * Returns: the input key
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
const char *
Packit Service a1bd4f
nm_setting_ip_tunnel_get_input_key(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), NULL);
Packit 5756e2
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->input_key;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_get_output_key:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:output-key property of the setting.
Packit 5756e2
 *
Packit 5756e2
 * Returns: the output key
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
const char *
Packit Service a1bd4f
nm_setting_ip_tunnel_get_output_key(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), NULL);
Packit 5756e2
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->output_key;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_get_encapsulation_limit:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:encapsulation-limit property of the setting.
Packit 5756e2
 *
Packit 5756e2
 * Returns: the encapsulation limit value
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
guint
Packit Service a1bd4f
nm_setting_ip_tunnel_get_encapsulation_limit(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), 0);
Packit 5756e2
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->encapsulation_limit;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_get_flow_label:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:flow-label property of the setting.
Packit 5756e2
 *
Packit 5756e2
 * Returns: the flow label value
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
guint
Packit Service a1bd4f
nm_setting_ip_tunnel_get_flow_label(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), 0);
Packit 5756e2
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->flow_label;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_get_mtu:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:mtu property of the setting.
Packit 5756e2
 *
Packit 5756e2
 * Returns: the MTU
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
guint
Packit Service a1bd4f
nm_setting_ip_tunnel_get_mtu(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), 0);
Packit 5756e2
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->mtu;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/*
Packit 5756e2
 * nm_setting_ip_tunnel_get_flags:
Packit 5756e2
 * @setting: the #NMSettingIPTunnel
Packit 5756e2
 *
Packit 5756e2
 * Returns the #NMSettingIPTunnel:flags property of the setting.
Packit 5756e2
 *
Packit 5756e2
 * Returns: the tunnel flags
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.12
Packit 5756e2
 **/
Packit 5756e2
NMIPTunnelFlags
Packit Service a1bd4f
nm_setting_ip_tunnel_get_flags(NMSettingIPTunnel *setting)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(NM_IS_SETTING_IP_TUNNEL(setting), NM_IP_TUNNEL_FLAG_NONE);
Packit 5756e2
Packit Service a1bd4f
    return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->flags;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit 5756e2
gboolean
Packit Service a1bd4f
_nm_ip_tunnel_mode_is_layer2(NMIPTunnelMode mode)
Packit 5756e2
{
Packit Service a1bd4f
    return NM_IN_SET(mode, NM_IP_TUNNEL_MODE_GRETAP, NM_IP_TUNNEL_MODE_IP6GRETAP);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static gboolean
Packit Service a1bd4f
verify(NMSetting *setting, NMConnection *connection, GError **error)
Packit 5756e2
{
Packit Service a1bd4f
    NMSettingIPTunnelPrivate *priv   = NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting);
Packit Service a1bd4f
    int                       family = AF_UNSPEC;
Packit Service a1bd4f
    guint32                   flags;
Packit Service a1bd4f
Packit Service a1bd4f
    switch (priv->mode) {
Packit Service a1bd4f
    case NM_IP_TUNNEL_MODE_IPIP:
Packit Service a1bd4f
    case NM_IP_TUNNEL_MODE_SIT:
Packit Service a1bd4f
    case NM_IP_TUNNEL_MODE_ISATAP:
Packit Service a1bd4f
    case NM_IP_TUNNEL_MODE_GRE:
Packit Service a1bd4f
    case NM_IP_TUNNEL_MODE_VTI:
Packit Service a1bd4f
    case NM_IP_TUNNEL_MODE_GRETAP:
Packit Service a1bd4f
        family = AF_INET;
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case NM_IP_TUNNEL_MODE_IP6IP6:
Packit Service a1bd4f
    case NM_IP_TUNNEL_MODE_IPIP6:
Packit Service a1bd4f
    case NM_IP_TUNNEL_MODE_IP6GRE:
Packit Service a1bd4f
    case NM_IP_TUNNEL_MODE_VTI6:
Packit Service a1bd4f
    case NM_IP_TUNNEL_MODE_IP6GRETAP:
Packit Service a1bd4f
        family = AF_INET6;
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case NM_IP_TUNNEL_MODE_UNKNOWN:
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    if (family == AF_UNSPEC) {
Packit Service a1bd4f
        g_set_error(error,
Packit Service a1bd4f
                    NM_CONNECTION_ERROR,
Packit Service a1bd4f
                    NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service a1bd4f
                    _("'%d' is not a valid tunnel mode"),
Packit Service a1bd4f
                    (int) priv->mode);
Packit Service a1bd4f
        g_prefix_error(error,
Packit Service a1bd4f
                       "%s.%s: ",
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_SETTING_NAME,
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_MODE);
Packit Service a1bd4f
        return FALSE;
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    if (priv->parent && !nm_utils_ifname_valid_kernel(priv->parent, NULL)
Packit Service a1bd4f
        && !nm_utils_is_uuid(priv->parent)) {
Packit Service a1bd4f
        g_set_error(error,
Packit Service a1bd4f
                    NM_CONNECTION_ERROR,
Packit Service a1bd4f
                    NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service a1bd4f
                    _("'%s' is neither an UUID nor an interface name"),
Packit Service a1bd4f
                    priv->parent);
Packit Service a1bd4f
        g_prefix_error(error,
Packit Service a1bd4f
                       "%s.%s: ",
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_SETTING_NAME,
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_PARENT);
Packit Service a1bd4f
        return FALSE;
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    if (priv->local && !nm_utils_ipaddr_is_valid(family, priv->local)) {
Packit Service a1bd4f
        g_set_error(error,
Packit Service a1bd4f
                    NM_CONNECTION_ERROR,
Packit Service a1bd4f
                    NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service a1bd4f
                    _("'%s' is not a valid IPv%c address"),
Packit Service a1bd4f
                    priv->local,
Packit Service a1bd4f
                    family == AF_INET ? '4' : '6');
Packit Service a1bd4f
        g_prefix_error(error,
Packit Service a1bd4f
                       "%s.%s: ",
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_SETTING_NAME,
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_LOCAL);
Packit Service a1bd4f
        return FALSE;
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    if (!priv->remote) {
Packit Service a1bd4f
        g_set_error_literal(error,
Packit Service a1bd4f
                            NM_CONNECTION_ERROR,
Packit Service a1bd4f
                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service a1bd4f
                            _("property is missing"));
Packit Service a1bd4f
        g_prefix_error(error,
Packit Service a1bd4f
                       "%s.%s: ",
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_SETTING_NAME,
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_REMOTE);
Packit Service a1bd4f
        return FALSE;
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    if (!nm_utils_ipaddr_is_valid(family, priv->remote)) {
Packit Service a1bd4f
        g_set_error(error,
Packit Service a1bd4f
                    NM_CONNECTION_ERROR,
Packit Service a1bd4f
                    NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service a1bd4f
                    _("'%s' is not a valid IPv%c address"),
Packit Service a1bd4f
                    priv->remote,
Packit Service a1bd4f
                    family == AF_INET ? '4' : '6');
Packit Service a1bd4f
        g_prefix_error(error,
Packit Service a1bd4f
                       "%s.%s: ",
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_SETTING_NAME,
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_REMOTE);
Packit Service a1bd4f
        return FALSE;
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    if ((priv->input_key && priv->input_key[0]) || (priv->output_key && priv->output_key[0])) {
Packit Service a1bd4f
        if (!NM_IN_SET(priv->mode,
Packit Service a1bd4f
                       NM_IP_TUNNEL_MODE_GRE,
Packit Service a1bd4f
                       NM_IP_TUNNEL_MODE_GRETAP,
Packit Service a1bd4f
                       NM_IP_TUNNEL_MODE_IP6GRE,
Packit Service a1bd4f
                       NM_IP_TUNNEL_MODE_IP6GRETAP)) {
Packit Service a1bd4f
            g_set_error_literal(error,
Packit Service a1bd4f
                                NM_CONNECTION_ERROR,
Packit Service a1bd4f
                                NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service a1bd4f
                                _("tunnel keys can only be specified for GRE tunnels"));
Packit Service a1bd4f
            return FALSE;
Packit Service a1bd4f
        }
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    if (priv->input_key && priv->input_key[0]) {
Packit Service a1bd4f
        gint64 val;
Packit Service a1bd4f
Packit Service a1bd4f
        val = _nm_utils_ascii_str_to_int64(priv->input_key, 10, 0, G_MAXUINT32, -1);
Packit Service a1bd4f
        if (val == -1) {
Packit Service a1bd4f
            g_set_error(error,
Packit Service a1bd4f
                        NM_CONNECTION_ERROR,
Packit Service a1bd4f
                        NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service a1bd4f
                        _("'%s' is not a valid tunnel key"),
Packit Service a1bd4f
                        priv->input_key);
Packit Service a1bd4f
            g_prefix_error(error,
Packit Service a1bd4f
                           "%s.%s: ",
Packit Service a1bd4f
                           NM_SETTING_IP_TUNNEL_SETTING_NAME,
Packit Service a1bd4f
                           NM_SETTING_IP_TUNNEL_INPUT_KEY);
Packit Service a1bd4f
            return FALSE;
Packit Service a1bd4f
        }
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    if (priv->output_key && priv->output_key[0]) {
Packit Service a1bd4f
        gint64 val;
Packit Service a1bd4f
Packit Service a1bd4f
        val = _nm_utils_ascii_str_to_int64(priv->output_key, 10, 0, G_MAXUINT32, -1);
Packit Service a1bd4f
        if (val == -1) {
Packit Service a1bd4f
            g_set_error(error,
Packit Service a1bd4f
                        NM_CONNECTION_ERROR,
Packit Service a1bd4f
                        NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service a1bd4f
                        _("'%s' is not a valid tunnel key"),
Packit Service a1bd4f
                        priv->output_key);
Packit Service a1bd4f
            g_prefix_error(error,
Packit Service a1bd4f
                           "%s.%s: ",
Packit Service a1bd4f
                           NM_SETTING_IP_TUNNEL_SETTING_NAME,
Packit Service a1bd4f
                           NM_SETTING_IP_TUNNEL_OUTPUT_KEY);
Packit Service a1bd4f
            return FALSE;
Packit Service a1bd4f
        }
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    if (!priv->path_mtu_discovery && priv->ttl != 0) {
Packit Service a1bd4f
        g_set_error_literal(error,
Packit Service a1bd4f
                            NM_CONNECTION_ERROR,
Packit Service a1bd4f
                            NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service a1bd4f
                            _("a fixed TTL is allowed only when path MTU discovery is enabled"));
Packit Service a1bd4f
        g_prefix_error(error,
Packit Service a1bd4f
                       "%s.%s: ",
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_SETTING_NAME,
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_TTL);
Packit Service a1bd4f
        return FALSE;
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    flags = priv->flags;
Packit Service a1bd4f
    if (NM_IN_SET(priv->mode, NM_IP_TUNNEL_MODE_IPIP6, NM_IP_TUNNEL_MODE_IP6IP6))
Packit Service a1bd4f
        flags &= (guint32)(~_NM_IP_TUNNEL_FLAG_ALL_IP6TNL);
Packit Service a1bd4f
    if (flags) {
Packit Service a1bd4f
        g_set_error(error,
Packit Service a1bd4f
                    NM_CONNECTION_ERROR,
Packit Service a1bd4f
                    NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service a1bd4f
                    _("some flags are invalid for the select mode: %s"),
Packit Service a1bd4f
                    nm_utils_enum_to_str(nm_ip_tunnel_flags_get_type(), flags));
Packit Service a1bd4f
        g_prefix_error(error,
Packit Service a1bd4f
                       "%s.%s: ",
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_SETTING_NAME,
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_FLAGS);
Packit Service a1bd4f
        return FALSE;
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    if (nm_connection_get_setting_wired(connection) && !_nm_ip_tunnel_mode_is_layer2(priv->mode)) {
Packit Service a1bd4f
        g_set_error(error,
Packit Service a1bd4f
                    NM_CONNECTION_ERROR,
Packit Service a1bd4f
                    NM_CONNECTION_ERROR_INVALID_PROPERTY,
Packit Service a1bd4f
                    _("wired setting not allowed for mode %s"),
Packit Service a1bd4f
                    nm_utils_enum_to_str(nm_ip_tunnel_mode_get_type(), priv->mode));
Packit Service a1bd4f
        g_prefix_error(error,
Packit Service a1bd4f
                       "%s.%s: ",
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_SETTING_NAME,
Packit Service a1bd4f
                       NM_SETTING_IP_TUNNEL_MODE);
Packit Service a1bd4f
        return NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    return TRUE;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
Packit 5756e2
{
Packit Service a1bd4f
    NMSettingIPTunnel *       setting = NM_SETTING_IP_TUNNEL(object);
Packit Service a1bd4f
    NMSettingIPTunnelPrivate *priv    = NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting);
Packit Service a1bd4f
Packit Service a1bd4f
    switch (prop_id) {
Packit Service a1bd4f
    case PROP_PARENT:
Packit Service a1bd4f
        g_value_set_string(value, priv->parent);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_MODE:
Packit Service a1bd4f
        g_value_set_uint(value, priv->mode);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_LOCAL:
Packit Service a1bd4f
        g_value_set_string(value, priv->local);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_REMOTE:
Packit Service a1bd4f
        g_value_set_string(value, priv->remote);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_TTL:
Packit Service a1bd4f
        g_value_set_uint(value, priv->ttl);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_TOS:
Packit Service a1bd4f
        g_value_set_uint(value, priv->tos);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_PATH_MTU_DISCOVERY:
Packit Service a1bd4f
        g_value_set_boolean(value, priv->path_mtu_discovery);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_INPUT_KEY:
Packit Service a1bd4f
        g_value_set_string(value, priv->input_key);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_OUTPUT_KEY:
Packit Service a1bd4f
        g_value_set_string(value, priv->output_key);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_ENCAPSULATION_LIMIT:
Packit Service a1bd4f
        g_value_set_uint(value, priv->encapsulation_limit);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_FLOW_LABEL:
Packit Service a1bd4f
        g_value_set_uint(value, priv->flow_label);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_MTU:
Packit Service a1bd4f
        g_value_set_uint(value, priv->mtu);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_FLAGS:
Packit Service a1bd4f
        g_value_set_uint(value, priv->flags);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    default:
Packit Service a1bd4f
        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    }
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
Packit 5756e2
{
Packit Service a1bd4f
    NMSettingIPTunnel *       setting = NM_SETTING_IP_TUNNEL(object);
Packit Service a1bd4f
    NMSettingIPTunnelPrivate *priv    = NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting);
Packit Service a1bd4f
Packit Service a1bd4f
    switch (prop_id) {
Packit Service a1bd4f
    case PROP_PARENT:
Packit Service a1bd4f
        g_free(priv->parent);
Packit Service a1bd4f
        priv->parent = g_value_dup_string(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_MODE:
Packit Service a1bd4f
        priv->mode = g_value_get_uint(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_LOCAL:
Packit Service a1bd4f
        g_free(priv->local);
Packit Service a1bd4f
        priv->local = g_value_dup_string(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_REMOTE:
Packit Service a1bd4f
        g_free(priv->remote);
Packit Service a1bd4f
        priv->remote = g_value_dup_string(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_TTL:
Packit Service a1bd4f
        priv->ttl = g_value_get_uint(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_TOS:
Packit Service a1bd4f
        priv->tos = g_value_get_uint(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_PATH_MTU_DISCOVERY:
Packit Service a1bd4f
        priv->path_mtu_discovery = g_value_get_boolean(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_INPUT_KEY:
Packit Service a1bd4f
        g_free(priv->input_key);
Packit Service a1bd4f
        priv->input_key = g_value_dup_string(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_OUTPUT_KEY:
Packit Service a1bd4f
        g_free(priv->output_key);
Packit Service a1bd4f
        priv->output_key = g_value_dup_string(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_ENCAPSULATION_LIMIT:
Packit Service a1bd4f
        priv->encapsulation_limit = g_value_get_uint(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_FLOW_LABEL:
Packit Service a1bd4f
        priv->flow_label = g_value_get_uint(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_MTU:
Packit Service a1bd4f
        priv->mtu = g_value_get_uint(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case PROP_FLAGS:
Packit Service a1bd4f
        priv->flags = g_value_get_uint(value);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    default:
Packit Service a1bd4f
        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    }
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
nm_setting_ip_tunnel_init(NMSettingIPTunnel *self)
Packit 5756e2
{
Packit Service a1bd4f
    NMSettingIPTunnelPrivate *priv = NM_SETTING_IP_TUNNEL_GET_PRIVATE(self);
Packit 5756e2
Packit Service a1bd4f
    priv->path_mtu_discovery = TRUE;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_setting_ip_tunnel_new:
Packit 5756e2
 *
Packit 5756e2
 * Creates a new #NMSettingIPTunnel object with default values.
Packit 5756e2
 *
Packit 5756e2
 * Returns: (transfer full): the new empty #NMSettingIPTunnel object
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.2
Packit 5756e2
 **/
Packit 5756e2
NMSetting *
Packit Service a1bd4f
nm_setting_ip_tunnel_new(void)
Packit 5756e2
{
Packit Service a1bd4f
    return g_object_new(NM_TYPE_SETTING_IP_TUNNEL, NULL);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
finalize(GObject *object)
Packit 5756e2
{
Packit Service a1bd4f
    NMSettingIPTunnel *       setting = NM_SETTING_IP_TUNNEL(object);
Packit Service a1bd4f
    NMSettingIPTunnelPrivate *priv    = NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting);
Packit 5756e2
Packit Service a1bd4f
    g_free(priv->parent);
Packit Service a1bd4f
    g_free(priv->local);
Packit Service a1bd4f
    g_free(priv->remote);
Packit Service a1bd4f
    g_free(priv->input_key);
Packit Service a1bd4f
    g_free(priv->output_key);
Packit 5756e2
Packit Service a1bd4f
    G_OBJECT_CLASS(nm_setting_ip_tunnel_parent_class)->finalize(object);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
nm_setting_ip_tunnel_class_init(NMSettingIPTunnelClass *klass)
Packit 5756e2
{
Packit Service a1bd4f
    GObjectClass *  object_class  = G_OBJECT_CLASS(klass);
Packit Service a1bd4f
    NMSettingClass *setting_class = NM_SETTING_CLASS(klass);
Packit Service a1bd4f
Packit Service a1bd4f
    g_type_class_add_private(klass, sizeof(NMSettingIPTunnelPrivate));
Packit Service a1bd4f
Packit Service a1bd4f
    object_class->get_property = get_property;
Packit Service a1bd4f
    object_class->set_property = set_property;
Packit Service a1bd4f
    object_class->finalize     = finalize;
Packit Service a1bd4f
Packit Service a1bd4f
    setting_class->verify = verify;
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:parent:
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * If given, specifies the parent interface name or parent connection UUID
Packit Service a1bd4f
     * the new device will be bound to so that tunneled packets will only be
Packit Service a1bd4f
     * routed via that interface.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.2
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_PARENT] = g_param_spec_string(
Packit Service a1bd4f
        NM_SETTING_IP_TUNNEL_PARENT,
Packit Service a1bd4f
        "",
Packit Service a1bd4f
        "",
Packit Service a1bd4f
        NULL,
Packit Service a1bd4f
        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:mode:
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * The tunneling mode, for example %NM_IP_TUNNEL_MODE_IPIP or
Packit Service a1bd4f
     * %NM_IP_TUNNEL_MODE_GRE.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.2
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_MODE] =
Packit Service a1bd4f
        g_param_spec_uint(NM_SETTING_IP_TUNNEL_MODE,
Packit Service a1bd4f
                          "",
Packit Service a1bd4f
                          "",
Packit Service a1bd4f
                          0,
Packit Service a1bd4f
                          G_MAXUINT,
Packit Service a1bd4f
                          0,
Packit Service a1bd4f
                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:local:
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * The local endpoint of the tunnel; the value can be empty, otherwise it
Packit Service a1bd4f
     * must contain an IPv4 or IPv6 address.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.2
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_LOCAL] = g_param_spec_string(NM_SETTING_IP_TUNNEL_LOCAL,
Packit Service a1bd4f
                                                     "",
Packit Service a1bd4f
                                                     "",
Packit Service a1bd4f
                                                     NULL,
Packit Service a1bd4f
                                                     G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE
Packit Service a1bd4f
                                                         | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:remote:
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * The remote endpoint of the tunnel; the value must contain an IPv4 or IPv6
Packit Service a1bd4f
     * address.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.2
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_REMOTE] = g_param_spec_string(
Packit Service a1bd4f
        NM_SETTING_IP_TUNNEL_REMOTE,
Packit Service a1bd4f
        "",
Packit Service a1bd4f
        "",
Packit Service a1bd4f
        NULL,
Packit Service a1bd4f
        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:ttl
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * The TTL to assign to tunneled packets. 0 is a special value meaning that
Packit Service a1bd4f
     * packets inherit the TTL value.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.2
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_TTL] =
Packit Service a1bd4f
        g_param_spec_uint(NM_SETTING_IP_TUNNEL_TTL,
Packit Service a1bd4f
                          "",
Packit Service a1bd4f
                          "",
Packit Service a1bd4f
                          0,
Packit Service a1bd4f
                          255,
Packit Service a1bd4f
                          0,
Packit Service a1bd4f
                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:tos
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * The type of service (IPv4) or traffic class (IPv6) field to be set on
Packit Service a1bd4f
     * tunneled packets.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.2
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_TOS] =
Packit Service a1bd4f
        g_param_spec_uint(NM_SETTING_IP_TUNNEL_TOS,
Packit Service a1bd4f
                          "",
Packit Service a1bd4f
                          "",
Packit Service a1bd4f
                          0,
Packit Service a1bd4f
                          255,
Packit Service a1bd4f
                          0,
Packit Service a1bd4f
                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:path-mtu-discovery
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Whether to enable Path MTU Discovery on this tunnel.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.2
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_PATH_MTU_DISCOVERY] = g_param_spec_boolean(
Packit Service a1bd4f
        NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY,
Packit Service a1bd4f
        "",
Packit Service a1bd4f
        "",
Packit Service a1bd4f
        TRUE,
Packit Service a1bd4f
        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:input-key:
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * The key used for tunnel input packets; the property is valid only for
Packit Service a1bd4f
     * certain tunnel modes (GRE, IP6GRE). If empty, no key is used.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.2
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_INPUT_KEY] = g_param_spec_string(
Packit Service a1bd4f
        NM_SETTING_IP_TUNNEL_INPUT_KEY,
Packit Service a1bd4f
        "",
Packit Service a1bd4f
        "",
Packit Service a1bd4f
        NULL,
Packit Service a1bd4f
        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:output-key:
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * The key used for tunnel output packets; the property is valid only for
Packit Service a1bd4f
     * certain tunnel modes (GRE, IP6GRE). If empty, no key is used.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.2
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_OUTPUT_KEY] = g_param_spec_string(
Packit Service a1bd4f
        NM_SETTING_IP_TUNNEL_OUTPUT_KEY,
Packit Service a1bd4f
        "",
Packit Service a1bd4f
        "",
Packit Service a1bd4f
        NULL,
Packit Service a1bd4f
        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:encapsulation-limit:
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * How many additional levels of encapsulation are permitted to be prepended
Packit Service a1bd4f
     * to packets. This property applies only to IPv6 tunnels.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.2
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_ENCAPSULATION_LIMIT] =
Packit Service a1bd4f
        g_param_spec_uint(NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT,
Packit Service a1bd4f
                          "",
Packit Service a1bd4f
                          "",
Packit Service a1bd4f
                          0,
Packit Service a1bd4f
                          255,
Packit Service a1bd4f
                          0,
Packit Service a1bd4f
                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:flow-label:
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * The flow label to assign to tunnel packets. This property applies only to
Packit Service a1bd4f
     * IPv6 tunnels.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.2
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_FLOW_LABEL] =
Packit Service a1bd4f
        g_param_spec_uint(NM_SETTING_IP_TUNNEL_FLOW_LABEL,
Packit Service a1bd4f
                          "",
Packit Service a1bd4f
                          "",
Packit Service a1bd4f
                          0,
Packit Service a1bd4f
                          (1 << 20) - 1,
Packit Service a1bd4f
                          0,
Packit Service a1bd4f
                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:mtu:
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * If non-zero, only transmit packets of the specified size or smaller,
Packit Service a1bd4f
     * breaking larger packets up into multiple fragments.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.2
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_MTU] = g_param_spec_uint(NM_SETTING_IP_TUNNEL_MTU,
Packit Service a1bd4f
                                                 "",
Packit Service a1bd4f
                                                 "",
Packit Service a1bd4f
                                                 0,
Packit Service a1bd4f
                                                 G_MAXUINT32,
Packit Service a1bd4f
                                                 0,
Packit Service a1bd4f
                                                 G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE
Packit Service a1bd4f
                                                     | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    /**
Packit Service a1bd4f
     * NMSettingIPTunnel:flags:
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Tunnel flags. Currently, the following values are supported:
Packit Service a1bd4f
     * %NM_IP_TUNNEL_FLAG_IP6_IGN_ENCAP_LIMIT, %NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_TCLASS,
Packit Service a1bd4f
     * %NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FLOWLABEL, %NM_IP_TUNNEL_FLAG_IP6_MIP6_DEV,
Packit Service a1bd4f
     * %NM_IP_TUNNEL_FLAG_IP6_RCV_DSCP_COPY, %NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FWMARK.
Packit Service a1bd4f
     * They are valid only for IPv6 tunnels.
Packit Service a1bd4f
     *
Packit Service a1bd4f
     * Since: 1.12
Packit Service a1bd4f
     **/
Packit Service a1bd4f
    obj_properties[PROP_FLAGS] = g_param_spec_uint(NM_SETTING_IP_TUNNEL_FLAGS,
Packit Service a1bd4f
                                                   "",
Packit Service a1bd4f
                                                   "",
Packit Service a1bd4f
                                                   0,
Packit Service a1bd4f
                                                   G_MAXUINT32,
Packit Service a1bd4f
                                                   0,
Packit Service a1bd4f
                                                   G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE
Packit Service a1bd4f
                                                       | G_PARAM_STATIC_STRINGS);
Packit Service a1bd4f
Packit Service a1bd4f
    g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties);
Packit Service a1bd4f
Packit Service a1bd4f
    _nm_setting_class_commit(setting_class, NM_META_SETTING_TYPE_IP_TUNNEL);
Packit 5756e2
}