geneve: add connection profile settings

Added support for the following properties in connection profile:
id (VNI), remote IPv4/IPv6, ttl, tos, df, destination port.

See IP-LINK(8) manual page with command `man 8 ip-link` for more details
on the properties. See also previous commit for nm supported attributes.

id and remote are mandatory attributes:
```
$ nmcli connection add type geneve save no
Error: 'id' argument is required.
$ nmcli connection add type geneve id 42 save no
Error: 'remote' argument is required.
```
This commit is contained in:
Rahul Rajesh 2026-01-29 17:49:02 -05:00
parent 29c8bbe21a
commit 2aaf88375e
23 changed files with 623 additions and 10 deletions

View file

@ -317,6 +317,7 @@ print ("NetworkManager version " + client.get_version())]]></programlisting></in
<xi:include href="xml/nm-setting-dummy.xml"/>
<xi:include href="xml/nm-setting-ethtool.xml"/>
<xi:include href="xml/nm-setting-generic.xml"/>
<xi:include href="xml/nm-setting-geneve.xml"/>
<xi:include href="xml/nm-setting-gsm.xml"/>
<xi:include href="xml/nm-setting-hostname.xml"/>
<xi:include href="xml/nm-setting-hsr.xml"/>

View file

@ -90,6 +90,7 @@ src/libnm-core-impl/nm-setting-connection.c
src/libnm-core-impl/nm-setting-dcb.c
src/libnm-core-impl/nm-setting-ethtool.c
src/libnm-core-impl/nm-setting-generic.c
src/libnm-core-impl/nm-setting-geneve.c
src/libnm-core-impl/nm-setting-gsm.c
src/libnm-core-impl/nm-setting-hsr.c
src/libnm-core-impl/nm-setting-infiniband.c

View file

@ -2106,8 +2106,18 @@ global:
libnm_1_58_0 {
global:
nm_connection_get_setting_geneve;
nm_ip_config_get_clat_address;
nm_ip_config_get_clat_pref64;
nm_setting_geneve_df_get_type;
nm_setting_geneve_get_destination_port;
nm_setting_geneve_get_df;
nm_setting_geneve_get_id;
nm_setting_geneve_get_remote;
nm_setting_geneve_get_tos;
nm_setting_geneve_get_ttl;
nm_setting_geneve_get_type;
nm_setting_geneve_new;
nm_setting_ip4_config_clat_get_type;
nm_setting_ip4_config_get_clat;
nm_utils_wifi_6ghz_freqs;

View file

@ -37,6 +37,7 @@
#include "nm-setting-dummy.h"
#include "nm-setting-ethtool.h"
#include "nm-setting-generic.h"
#include "nm-setting-geneve.h"
#include "nm-setting-gsm.h"
#include "nm-setting-hostname.h"
#include "nm-setting-hsr.h"

View file

@ -80,6 +80,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingDcb, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingDummy, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingEthtool, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingGeneric, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingGeneve, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingGsm, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingHostname, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingHsr, g_object_unref)

View file

@ -1378,6 +1378,34 @@
gprop-type="gchararray"
/>
</setting>
<setting name="geneve"
gtype="NMSettingGeneve"
>
<property name="destination-port"
dbus-type="u"
gprop-type="guint"
/>
<property name="df"
dbus-type="i"
gprop-type="gint"
/>
<property name="id"
dbus-type="u"
gprop-type="guint"
/>
<property name="remote"
dbus-type="s"
gprop-type="gchararray"
/>
<property name="tos"
dbus-type="u"
gprop-type="guint"
/>
<property name="ttl"
dbus-type="i"
gprop-type="gint"
/>
</setting>
<setting name="gsm"
gtype="NMSettingGsm"
>

View file

@ -17,6 +17,7 @@ libnm_core_settings_sources = files(
'nm-setting-dummy.c',
'nm-setting-ethtool.c',
'nm-setting-generic.c',
'nm-setting-geneve.c',
'nm-setting-gsm.c',
'nm-setting-hostname.c',
'nm-setting-hsr.c',

View file

@ -3526,6 +3526,22 @@ nm_connection_get_setting_generic(NMConnection *connection)
return _nm_connection_get_setting_by_metatype(connection, NM_META_SETTING_TYPE_GENERIC);
}
/**
* nm_connection_get_setting_geneve:
* @connection: the #NMConnection
*
* A shortcut to return any #NMSettingGeneve the connection might contain.
*
* Returns: (transfer none): an #NMSettingGeneve if the connection contains one, otherwise NULL
*
* Since: 1.58
**/
NMSettingGeneve *
nm_connection_get_setting_geneve(NMConnection *connection)
{
return _nm_connection_get_setting_by_metatype(connection, NM_META_SETTING_TYPE_GENEVE);
}
/**
* nm_connection_get_setting_gsm:
* @connection: the #NMConnection

View file

@ -27,6 +27,7 @@
#include "nm-setting-dummy.h"
#include "nm-setting-ethtool.h"
#include "nm-setting-generic.h"
#include "nm-setting-geneve.h"
#include "nm-setting-gsm.h"
#include "nm-setting-hostname.h"
#include "nm-setting-hsr.h"
@ -324,6 +325,13 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = {
.setting_name = NM_SETTING_GENERIC_SETTING_NAME,
.get_setting_gtype = nm_setting_generic_get_type,
},
[NM_META_SETTING_TYPE_GENEVE] =
{
.meta_type = NM_META_SETTING_TYPE_GENEVE,
.setting_priority = NM_SETTING_PRIORITY_HW_BASE,
.setting_name = NM_SETTING_GENEVE_SETTING_NAME,
.get_setting_gtype = nm_setting_geneve_get_type,
},
[NM_META_SETTING_TYPE_GSM] =
{
.meta_type = NM_META_SETTING_TYPE_GSM,
@ -655,6 +663,7 @@ const NMMetaSettingType nm_meta_setting_types_by_priority[] = {
NM_META_SETTING_TYPE_CDMA,
NM_META_SETTING_TYPE_DUMMY,
NM_META_SETTING_TYPE_GENERIC,
NM_META_SETTING_TYPE_GENEVE,
NM_META_SETTING_TYPE_GSM,
NM_META_SETTING_TYPE_HSR,
NM_META_SETTING_TYPE_INFINIBAND,

View file

@ -0,0 +1,354 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2026 Red Hat, Inc.
*/
#include "libnm-core-impl/nm-default-libnm-core.h"
#include "nm-setting-geneve.h"
#include <stdlib.h>
#include "nm-utils.h"
#include "nm-setting-private.h"
/**
* SECTION:nm-setting-geneve
* @short_description: Describes connection properties for GENEVE interfaces
*
* The #NMSettingGeneve object is a #NMSetting subclass that describes properties
* necessary for connection to GENEVE interfaces.
**/
#define DST_PORT_DEFAULT 6081
NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_ID,
PROP_REMOTE,
PROP_DESTINATION_PORT,
PROP_TOS,
PROP_TTL,
PROP_DF, );
typedef struct {
char *remote;
guint32 id;
guint32 destination_port;
guint32 tos;
gint32 ttl;
int df;
} NMSettingGenevePrivate;
/**
* NMSettingGeneve:
*
* GENEVE Settings
*/
struct _NMSettingGeneve {
NMSetting parent;
NMSettingGenevePrivate _priv;
};
struct _NMSettingGeneveClass {
NMSettingClass parent;
};
G_DEFINE_TYPE(NMSettingGeneve, nm_setting_geneve, NM_TYPE_SETTING)
#define NM_SETTING_GENEVE_GET_PRIVATE(o) \
_NM_GET_PRIVATE(o, NMSettingGeneve, NM_IS_SETTING_GENEVE, NMSetting)
/*****************************************************************************/
/**
* nm_setting_geneve_get_id:
* @setting: the #NMSettingGeneve
*
* Returns: the #NMSettingGeneve:id property of the setting
*
* Since: 1.58
**/
guint
nm_setting_geneve_get_id(NMSettingGeneve *setting)
{
g_return_val_if_fail(NM_IS_SETTING_GENEVE(setting), 0);
return NM_SETTING_GENEVE_GET_PRIVATE(setting)->id;
}
/**
* nm_setting_geneve_get_remote:
* @setting: the #NMSettingGeneve
*
* Returns: the #NMSettingGeneve:remote property of the setting
*
* Since: 1.58
**/
const char *
nm_setting_geneve_get_remote(NMSettingGeneve *setting)
{
g_return_val_if_fail(NM_IS_SETTING_GENEVE(setting), NULL);
return NM_SETTING_GENEVE_GET_PRIVATE(setting)->remote;
}
/**
* nm_setting_geneve_get_destination_port:
* @setting: the #NMSettingGeneve
*
* Returns: the #NMSettingGeneve:destination-port property of the setting
*
* Since: 1.58
**/
guint
nm_setting_geneve_get_destination_port(NMSettingGeneve *setting)
{
g_return_val_if_fail(NM_IS_SETTING_GENEVE(setting), DST_PORT_DEFAULT);
return NM_SETTING_GENEVE_GET_PRIVATE(setting)->destination_port;
}
/**
* nm_setting_geneve_get_tos:
* @setting: the #NMSettingGeneve
*
* Returns: the #NMSettingGeneve:tos property of the setting
*
* Since: 1.58
**/
guint
nm_setting_geneve_get_tos(NMSettingGeneve *setting)
{
g_return_val_if_fail(NM_IS_SETTING_GENEVE(setting), 0);
return NM_SETTING_GENEVE_GET_PRIVATE(setting)->tos;
}
/**
* nm_setting_geneve_get_ttl:
* @setting: the #NMSettingGeneve
*
* Returns: the #NMSettingGeneve:ttl property of the setting
*
* Since: 1.58
**/
guint
nm_setting_geneve_get_ttl(NMSettingGeneve *setting)
{
g_return_val_if_fail(NM_IS_SETTING_GENEVE(setting), 0);
return NM_SETTING_GENEVE_GET_PRIVATE(setting)->ttl;
}
/**
* nm_setting_geneve_get_df:
* @setting: the #NMSettingGeneve
*
* Returns: the #NMSettingGeneve:df property of the setting
*
* Since: 1.58
**/
NMSettingGeneveDf
nm_setting_geneve_get_df(NMSettingGeneve *setting)
{
g_return_val_if_fail(NM_IS_SETTING_GENEVE(setting), NM_SETTING_GENEVE_DF_UNSET);
return NM_SETTING_GENEVE_GET_PRIVATE(setting)->df;
}
/*****************************************************************************/
static gboolean
verify(NMSetting *setting, NMConnection *connection, GError **error)
{
NMSettingGenevePrivate *priv = NM_SETTING_GENEVE_GET_PRIVATE(setting);
if (priv->id == 0) {
g_set_error(error,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_MISSING_PROPERTY,
_("property is required"));
g_prefix_error(error, "%s.%s: ", NM_SETTING_GENEVE_SETTING_NAME, NM_SETTING_GENEVE_ID);
return FALSE;
}
if (!priv->remote) {
g_set_error(error,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_MISSING_PROPERTY,
_("property is required"));
g_prefix_error(error, "%s.%s: ", NM_SETTING_GENEVE_SETTING_NAME, NM_SETTING_GENEVE_REMOTE);
return FALSE;
}
if (!nm_inet_parse_bin(AF_UNSPEC, priv->remote, NULL, NULL)) {
g_set_error(error,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_INVALID_PROPERTY,
_("'%s' is not a valid IP address"),
priv->remote);
g_prefix_error(error, "%s.%s: ", NM_SETTING_GENEVE_SETTING_NAME, NM_SETTING_GENEVE_REMOTE);
return FALSE;
}
return TRUE;
}
/*****************************************************************************/
static void
nm_setting_geneve_init(NMSettingGeneve *self)
{}
/**
* nm_setting_geneve_new:
*
* Creates a new #NMSettingGeneve object with default values.
*
* Returns: (transfer full): the new empty #NMSettingGeneve object
*
* Since: 1.58
**/
NMSetting *
nm_setting_geneve_new(void)
{
return g_object_new(NM_TYPE_SETTING_GENEVE, NULL);
}
static void
nm_setting_geneve_class_init(NMSettingGeneveClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS(klass);
NMSettingClass *setting_class = NM_SETTING_CLASS(klass);
GArray *properties_override = _nm_sett_info_property_override_create_array();
object_class->get_property = _nm_setting_property_get_property_direct;
object_class->set_property = _nm_setting_property_set_property_direct;
setting_class->verify = verify;
/**
* NMSettingGeneve:id:
*
* Specifies the GENEVE Network Identifier (or GENEVE Segment Identifier) to
* use.
*
* Since: 1.58
**/
_nm_setting_property_define_direct_uint32(properties_override,
obj_properties,
NM_SETTING_GENEVE_ID,
PROP_ID,
0,
(1 << 24) - 1,
0,
NM_SETTING_PARAM_INFERRABLE,
NMSettingGenevePrivate,
id);
/**
* NMSettingGeneve:remote:
*
* Specifies the unicast destination IP address to use in outgoing packets
* when communicating with the remote GENEVE tunnel endpoint.
*
* Since: 1.58
**/
_nm_setting_property_define_direct_string(properties_override,
obj_properties,
NM_SETTING_GENEVE_REMOTE,
PROP_REMOTE,
NM_SETTING_PARAM_REQUIRED,
NMSettingGenevePrivate,
remote,
.direct_set_string_ip_address_addr_family =
AF_UNSPEC + 1,
.direct_string_allow_empty = TRUE);
/**
* NMSettingGeneve:destination-port:
*
* Specifies the UDP destination port to communicate to the remote GENEVE
* tunnel endpoint.
*
* Since: 1.58
**/
_nm_setting_property_define_direct_uint32(properties_override,
obj_properties,
NM_SETTING_GENEVE_DESTINATION_PORT,
PROP_DESTINATION_PORT,
0,
G_MAXUINT16,
DST_PORT_DEFAULT,
NM_SETTING_PARAM_INFERRABLE,
NMSettingGenevePrivate,
destination_port);
/**
* NMSettingGeneve:tos:
*
* Specifies the TOS value to use in outgoing packets.
* The special value "inherit" (1) means inherit from outer packet.
*
* Since: 1.58
**/
_nm_setting_property_define_direct_uint32(properties_override,
obj_properties,
NM_SETTING_GENEVE_TOS,
PROP_TOS,
0,
255,
0,
NM_SETTING_PARAM_INFERRABLE,
NMSettingGenevePrivate,
tos);
/**
* NMSettingGeneve:ttl:
*
* Specifies the time-to-live value to use in outgoing packets.
* The special value "inherit" (-1) means inherit from outer packet, 0 means auto, 1-255 are fixed values.
*
* Since: 1.58
**/
_nm_setting_property_define_direct_int32(properties_override,
obj_properties,
NM_SETTING_GENEVE_TTL,
PROP_TTL,
-1,
255,
0,
NM_SETTING_PARAM_INFERRABLE,
NMSettingGenevePrivate,
ttl);
/**
* NMSettingGeneve:df:
*
* Specifies how the Don't Fragment (DF) flag should be handled in the outer IP
* header of GENEVE tunnel packets.
*
* %NM_SETTING_GENEVE_DF_UNSET (0): Don't set the DF flag, packets may be fragmented.
* %NM_SETTING_GENEVE_DF_SET (1): Always set the DF flag, packets will not be fragmented.
* %NM_SETTING_GENEVE_DF_INHERIT (2): Inherit the DF flag from the inner IP header.
*
* Since: 1.58
**/
_nm_setting_property_define_direct_enum(properties_override,
obj_properties,
NM_SETTING_GENEVE_DF,
PROP_DF,
NM_TYPE_SETTING_GENEVE_DF,
NM_SETTING_GENEVE_DF_UNSET,
NM_SETTING_PARAM_INFERRABLE,
NULL,
NMSettingGenevePrivate,
df);
g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties);
_nm_setting_class_commit(setting_class,
NM_META_SETTING_TYPE_GENEVE,
NULL,
properties_override,
G_STRUCT_OFFSET(NMSettingGeneve, _priv));
}

View file

@ -37,6 +37,7 @@
#include "nm-setting-dcb.h"
#include "nm-setting-dummy.h"
#include "nm-setting-generic.h"
#include "nm-setting-geneve.h"
#include "nm-setting-gsm.h"
#include "nm-setting-hsr.h"
#include "nm-setting-hostname.h"

View file

@ -121,6 +121,7 @@ typedef enum _nm_packed {
NM_META_SETTING_TYPE_DUMMY,
NM_META_SETTING_TYPE_ETHTOOL,
NM_META_SETTING_TYPE_GENERIC,
NM_META_SETTING_TYPE_GENEVE,
NM_META_SETTING_TYPE_GSM,
NM_META_SETTING_TYPE_HOSTNAME,
NM_META_SETTING_TYPE_HSR,

View file

@ -22,6 +22,7 @@ libnm_core_headers = files(
'nm-setting-dummy.h',
'nm-setting-ethtool.h',
'nm-setting-generic.h',
'nm-setting-geneve.h',
'nm-setting-gsm.h',
'nm-setting-hsr.h',
'nm-setting-hostname.h',

View file

@ -206,8 +206,10 @@ NMSettingCdma *nm_connection_get_setting_cdma(NMConnection *connection);
NMSettingConnection *nm_connection_get_setting_connection(NMConnection *connection);
NMSettingDcb *nm_connection_get_setting_dcb(NMConnection *connection);
NM_AVAILABLE_IN_1_8
NMSettingDummy *nm_connection_get_setting_dummy(NMConnection *connection);
NMSettingGeneric *nm_connection_get_setting_generic(NMConnection *connection);
NMSettingDummy *nm_connection_get_setting_dummy(NMConnection *connection);
NMSettingGeneric *nm_connection_get_setting_generic(NMConnection *connection);
NM_AVAILABLE_IN_1_58
NMSettingGeneve *nm_connection_get_setting_geneve(NMConnection *connection);
NMSettingGsm *nm_connection_get_setting_gsm(NMConnection *connection);
NMSettingInfiniband *nm_connection_get_setting_infiniband(NMConnection *connection);
NM_AVAILABLE_IN_1_2

View file

@ -27,6 +27,7 @@ typedef struct _NMSettingConnection NMSettingConnection;
typedef struct _NMSettingDcb NMSettingDcb;
typedef struct _NMSettingDummy NMSettingDummy;
typedef struct _NMSettingEthtool NMSettingEthtool;
typedef struct _NMSettingGeneve NMSettingGeneve;
typedef struct _NMSettingGeneric NMSettingGeneric;
typedef struct _NMSettingGsm NMSettingGsm;
typedef struct _NMSettingHostname NMSettingHostname;

View file

@ -0,0 +1,74 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2026 Red Hat, Inc.
*/
#ifndef __NM_SETTING_GENEVE_H__
#define __NM_SETTING_GENEVE_H__
#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
#error "Only <NetworkManager.h> can be included directly."
#endif
#include "nm-setting.h"
G_BEGIN_DECLS
#define NM_TYPE_SETTING_GENEVE (nm_setting_geneve_get_type())
#define NM_SETTING_GENEVE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_GENEVE, NMSettingGeneve))
#define NM_SETTING_GENEVE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_GENEVE, NMSettingGeneveClass))
#define NM_IS_SETTING_GENEVE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_GENEVE))
#define NM_IS_SETTING_GENEVE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_GENEVE))
#define NM_SETTING_GENEVE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_GENEVE, NMSettingGeneveClass))
#define NM_SETTING_GENEVE_SETTING_NAME "geneve"
#define NM_SETTING_GENEVE_ID "id"
#define NM_SETTING_GENEVE_REMOTE "remote"
#define NM_SETTING_GENEVE_DESTINATION_PORT "destination-port"
#define NM_SETTING_GENEVE_TOS "tos"
#define NM_SETTING_GENEVE_TTL "ttl"
#define NM_SETTING_GENEVE_DF "df"
/**
* NMSettingGeneveDf:
* @NM_SETTING_GENEVE_DF_UNSET: Don't set the DF flag, packets may be fragmented.
* @NM_SETTING_GENEVE_DF_SET: Always set the DF flag, packets will not be fragmented.
* @NM_SETTING_GENEVE_DF_INHERIT: Inherit the DF flag from the inner IP header.
*
* #NMSettingGeneveDf values indicate how the Don't Fragment (DF) flag should be handled
* in the outer IP header of GENEVE tunnel packets.
*
* Since: 1.58
*/
typedef enum {
NM_SETTING_GENEVE_DF_UNSET = 0,
NM_SETTING_GENEVE_DF_SET = 1,
NM_SETTING_GENEVE_DF_INHERIT = 2,
} NMSettingGeneveDf;
typedef struct _NMSettingGeneveClass NMSettingGeneveClass;
NM_AVAILABLE_IN_1_58
GType nm_setting_geneve_get_type(void);
NM_AVAILABLE_IN_1_58
NMSetting *nm_setting_geneve_new(void);
NM_AVAILABLE_IN_1_58
guint nm_setting_geneve_get_id(NMSettingGeneve *setting);
NM_AVAILABLE_IN_1_58
const char *nm_setting_geneve_get_remote(NMSettingGeneve *setting);
NM_AVAILABLE_IN_1_58
guint nm_setting_geneve_get_destination_port(NMSettingGeneve *setting);
NM_AVAILABLE_IN_1_58
guint nm_setting_geneve_get_tos(NMSettingGeneve *setting);
NM_AVAILABLE_IN_1_58
guint nm_setting_geneve_get_ttl(NMSettingGeneve *setting);
NM_AVAILABLE_IN_1_58
NMSettingGeneveDf nm_setting_geneve_get_df(NMSettingGeneve *setting);
G_END_DECLS
#endif /* __NM_SETTING_GENEVE_H__ */

View file

@ -27,6 +27,7 @@
#include "nm-setting-dummy.h"
#include "nm-setting-ethtool.h"
#include "nm-setting-generic.h"
#include "nm-setting-geneve.h"
#include "nm-setting-gsm.h"
#include "nm-setting-hostname.h"
#include "nm-setting-hsr.h"
@ -324,6 +325,13 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = {
.setting_name = NM_SETTING_GENERIC_SETTING_NAME,
.get_setting_gtype = nm_setting_generic_get_type,
},
[NM_META_SETTING_TYPE_GENEVE] =
{
.meta_type = NM_META_SETTING_TYPE_GENEVE,
.setting_priority = NM_SETTING_PRIORITY_HW_BASE,
.setting_name = NM_SETTING_GENEVE_SETTING_NAME,
.get_setting_gtype = nm_setting_geneve_get_type,
},
[NM_META_SETTING_TYPE_GSM] =
{
.meta_type = NM_META_SETTING_TYPE_GSM,
@ -655,6 +663,7 @@ const NMMetaSettingType nm_meta_setting_types_by_priority[] = {
NM_META_SETTING_TYPE_CDMA,
NM_META_SETTING_TYPE_DUMMY,
NM_META_SETTING_TYPE_GENERIC,
NM_META_SETTING_TYPE_GENEVE,
NM_META_SETTING_TYPE_GSM,
NM_META_SETTING_TYPE_HSR,
NM_META_SETTING_TYPE_INFINIBAND,

View file

@ -121,6 +121,7 @@ typedef enum _nm_packed {
NM_META_SETTING_TYPE_DUMMY,
NM_META_SETTING_TYPE_ETHTOOL,
NM_META_SETTING_TYPE_GENERIC,
NM_META_SETTING_TYPE_GENEVE,
NM_META_SETTING_TYPE_GSM,
NM_META_SETTING_TYPE_HOSTNAME,
NM_META_SETTING_TYPE_HSR,

View file

@ -6112,6 +6112,57 @@ static const NMMetaPropertyInfo *const property_infos_GENERIC[] = {
NULL
};
#undef _CURRENT_NM_META_SETTING_TYPE
#define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_GENEVE
static const NMMetaPropertyInfo *const property_infos_GENEVE[] = {
PROPERTY_INFO_WITH_DESC (NM_SETTING_GENEVE_ID,
.is_cli_option = TRUE,
.property_alias = "id",
.inf_flags = NM_META_PROPERTY_INF_FLAG_REQD,
.prompt = N_("GENEVE ID"),
.property_type = &_pt_gobject_int,
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_GENEVE_REMOTE,
.is_cli_option = TRUE,
.property_alias = "remote",
.inf_flags = NM_META_PROPERTY_INF_FLAG_REQD,
.prompt = N_("Remote"),
.property_type = &_pt_gobject_string,
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_GENEVE_DESTINATION_PORT,
.is_cli_option = TRUE,
.property_alias = "destination-port",
.prompt = N_("Destination port"),
.property_type = &_pt_gobject_int,
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_GENEVE_TOS,
.property_type = &_pt_gobject_int,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS (
{
.value.u64 = 1,
.nick = "inherit",
},
),
),
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_GENEVE_TTL,
.property_type = &_pt_gobject_int,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS (
{
.value.i64 = -1,
.nick = "inherit",
},
),
),
),
PROPERTY_INFO_WITH_DESC (NM_SETTING_GENEVE_DF,
.property_type = &_pt_gobject_enum,
),
NULL
};
#undef _CURRENT_NM_META_SETTING_TYPE
#define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_GSM
static const NMMetaPropertyInfo *const property_infos_GSM[] = {
@ -9018,6 +9069,7 @@ _setting_init_fcn_wireless (ARGS_SETTING_INIT_FCN)
#define SETTING_PRETTY_NAME_DUMMY N_("Dummy settings")
#define SETTING_PRETTY_NAME_ETHTOOL N_("Ethtool settings")
#define SETTING_PRETTY_NAME_GENERIC N_("Generic settings")
#define SETTING_PRETTY_NAME_GENEVE N_("Geneve settings")
#define SETTING_PRETTY_NAME_GSM N_("GSM mobile broadband connection")
#define SETTING_PRETTY_NAME_HOSTNAME N_("Hostname settings")
#define SETTING_PRETTY_NAME_HSR N_("HSR settings")
@ -9156,6 +9208,14 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = {
NM_META_SETTING_VALID_PART_ITEM (GENERIC, TRUE),
),
),
SETTING_INFO (GENEVE,
.valid_parts = NM_META_SETTING_VALID_PARTS (
NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE),
NM_META_SETTING_VALID_PART_ITEM (GENEVE, TRUE),
NM_META_SETTING_VALID_PART_ITEM (WIRED, FALSE),
NM_META_SETTING_VALID_PART_ITEM (ETHTOOL, FALSE),
),
),
SETTING_INFO (GSM,
.valid_parts = NM_META_SETTING_VALID_PARTS (
NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE),

View file

@ -499,6 +499,12 @@
#define DESCRIBE_DOC_NM_SETTING_WPAN_SHORT_ADDRESS N_("Short IEEE 802.15.4 address to be used within a restricted environment.")
#define DESCRIBE_DOC_NM_SETTING_BOND_PORT_PRIO N_("The port priority for bond active port re-selection during failover. A higher number means a higher priority in selection. The primary port has the highest priority. This option is only compatible with active-backup, balance-tlb and balance-alb modes.")
#define DESCRIBE_DOC_NM_SETTING_BOND_PORT_QUEUE_ID N_("The queue ID of this bond port. The maximum value of queue ID is the number of TX queues currently active in device.")
#define DESCRIBE_DOC_NM_SETTING_GENEVE_DESTINATION_PORT N_("Specifies the UDP destination port to communicate to the remote GENEVE tunnel endpoint.")
#define DESCRIBE_DOC_NM_SETTING_GENEVE_DF N_("Specifies how the Don't Fragment (DF) flag should be handled in the outer IP header of GENEVE tunnel packets. \"unset\" (0) (0): Don't set the DF flag, packets may be fragmented. \"set\" (1) (1): Always set the DF flag, packets will not be fragmented. \"inherit\" (2) (2): Inherit the DF flag from the inner IP header.")
#define DESCRIBE_DOC_NM_SETTING_GENEVE_ID N_("Specifies the GENEVE Network Identifier (or GENEVE Segment Identifier) to use.")
#define DESCRIBE_DOC_NM_SETTING_GENEVE_REMOTE N_("Specifies the unicast destination IP address to use in outgoing packets when communicating with the remote GENEVE tunnel endpoint.")
#define DESCRIBE_DOC_NM_SETTING_GENEVE_TOS N_("Specifies the TOS value to use in outgoing packets. The special value \"inherit\" (1) means inherit from outer packet.")
#define DESCRIBE_DOC_NM_SETTING_GENEVE_TTL N_("Specifies the time-to-live value to use in outgoing packets. The special value \"inherit\" (-1) means inherit from outer packet, 0 means auto, 1-255 are fixed values.")
#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_FROM_DHCP N_("Whether the system hostname can be determined from DHCP on this connection. When set to \"default\" (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be \"true\" (1).")
#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP N_("Whether the system hostname can be determined from reverse DNS lookup of addresses on this device. When set to \"default\" (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be \"true\" (1).")
#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT N_("If set to \"true\" (1), NetworkManager attempts to get the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has the default route for the given address family (IPv4/IPv6). If set to \"false\" (0), the hostname can be set from this device even if it doesn't have the default route. When set to \"default\" (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be \"false\" (0).")

View file

@ -4,6 +4,7 @@
*/
#include "libnm-client-aux-extern/nm-default-client.h"
#include "nmcli.h"
#include "connections.h"
@ -1070,13 +1071,13 @@ const NmcMetaGenericInfo
"," NM_SETTING_DCB_SETTING_NAME "," NM_SETTING_TUN_SETTING_NAME \
"," NM_SETTING_IP_TUNNEL_SETTING_NAME "," NM_SETTING_MACSEC_SETTING_NAME \
"," NM_SETTING_MACVLAN_SETTING_NAME "," NM_SETTING_VXLAN_SETTING_NAME \
"," NM_SETTING_VRF_SETTING_NAME "," NM_SETTING_WPAN_SETTING_NAME \
"," NM_SETTING_6LOWPAN_SETTING_NAME "," NM_SETTING_WIREGUARD_SETTING_NAME \
"," NM_SETTING_LINK_SETTING_NAME "," NM_SETTING_PROXY_SETTING_NAME \
"," NM_SETTING_TC_CONFIG_SETTING_NAME "," NM_SETTING_SRIOV_SETTING_NAME \
"," NM_SETTING_ETHTOOL_SETTING_NAME "," NM_SETTING_OVS_DPDK_SETTING_NAME \
"," NM_SETTING_HOSTNAME_SETTING_NAME "," NM_SETTING_HSR_SETTING_NAME \
"," NM_SETTING_IPVLAN_SETTING_NAME
"," NM_SETTING_GENEVE_SETTING_NAME "," NM_SETTING_VRF_SETTING_NAME \
"," NM_SETTING_WPAN_SETTING_NAME "," NM_SETTING_6LOWPAN_SETTING_NAME \
"," NM_SETTING_WIREGUARD_SETTING_NAME "," NM_SETTING_LINK_SETTING_NAME \
"," NM_SETTING_PROXY_SETTING_NAME "," NM_SETTING_TC_CONFIG_SETTING_NAME \
"," NM_SETTING_SRIOV_SETTING_NAME "," NM_SETTING_ETHTOOL_SETTING_NAME \
"," NM_SETTING_OVS_DPDK_SETTING_NAME "," NM_SETTING_HOSTNAME_SETTING_NAME \
"," NM_SETTING_HSR_SETTING_NAME "," NM_SETTING_IPVLAN_SETTING_NAME
/* NM_SETTING_DUMMY_SETTING_NAME NM_SETTING_WIMAX_SETTING_NAME */
const NmcMetaGenericInfo *const nmc_fields_con_active_details_groups[] = {
@ -1306,6 +1307,9 @@ usage_connection_add(void)
" [source-port-min <0-65535>]\n"
" [source-port-max <0-65535>]\n"
" [destination-port <0-65535>]\n\n"
" geneve: id <GENEVE ID>\n"
" remote <IP address>\n"
" [destination-port <0-65535>]\n\n"
" wpan: [short-addr <0x0000-0xffff>]\n"
" [pan-id <0x0000-0xffff>]\n"
" [page <default|0-31>]\n"

View file

@ -629,7 +629,7 @@
alias="type"
nmcli-description="Base type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, &quot;802-3-ethernet&quot; or &quot;802-11-wireless&quot; or &quot;bluetooth&quot;, etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, &quot;vpn&quot; or &quot;bridge&quot;, etc)."
format="string"
values="6lowpan, 802-11-olpc-mesh, 802-11-wireless, 802-3-ethernet, adsl, bluetooth, bond, bridge, cdma, dummy, generic, gsm, hsr, infiniband, ip-tunnel, ipvlan, loopback, macsec, macvlan, ovs-bridge, ovs-interface, ovs-port, pppoe, team, tun, veth, vlan, vpn, vrf, vxlan, wifi-p2p, wimax, wireguard, wpan" />
values="6lowpan, 802-11-olpc-mesh, 802-11-wireless, 802-3-ethernet, adsl, bluetooth, bond, bridge, cdma, dummy, generic, geneve, gsm, hsr, infiniband, ip-tunnel, ipvlan, loopback, macsec, macvlan, ovs-bridge, ovs-interface, ovs-port, pppoe, team, tun, veth, vlan, vpn, vrf, vxlan, wifi-p2p, wimax, wireguard, wpan" />
<property name="interface-name"
alias="ifname"
nmcli-description="The name of the network interface this connection is bound to. If not set, then the connection can be attached to any interface of the appropriate type (subject to restrictions imposed by other settings). For software devices this specifies the name of the created device. For connection types where interface names cannot easily be made persistent (e.g. mobile broadband or USB Ethernet), this property should not be used. Setting this property restricts the interfaces a connection can be used with, and if interface names change or are reordered the connection may be applied to the wrong interface."
@ -1110,6 +1110,36 @@
nmcli-description="Name of the device handler that will be invoked to add and delete the device for this connection. The name can only contain ASCII alphanumeric characters and &apos;-&apos;, &apos;_&apos;, &apos;.&apos;. It cannot start with &apos;.&apos;. See the NetworkManager-dispatcher(8) man page for more details about how to write the device handler. By setting this property the generic connection becomes &quot;virtual&quot;, meaning that it can be activated without an existing device; the device will be created at the time the connection is started by invoking the device-handler."
format="string" />
</setting>
<setting name="geneve" >
<property name="id"
alias="id"
nmcli-description="Specifies the GENEVE Network Identifier (or GENEVE Segment Identifier) to use."
format="integer"
values="0 - 16777215" />
<property name="remote"
alias="remote"
nmcli-description="Specifies the unicast destination IP address to use in outgoing packets when communicating with the remote GENEVE tunnel endpoint."
format="string" />
<property name="destination-port"
alias="destination-port"
nmcli-description="Specifies the UDP destination port to communicate to the remote GENEVE tunnel endpoint."
format="integer"
values="0 - 65535" />
<property name="tos"
nmcli-description="Specifies the TOS value to use in outgoing packets. The special value &quot;inherit&quot; (1) means inherit from outer packet."
format="integer"
values="0 - 255"
special-values="inherit (1)" />
<property name="ttl"
nmcli-description="Specifies the time-to-live value to use in outgoing packets. The special value &quot;inherit&quot; (-1) means inherit from outer packet, 0 means auto, 1-255 are fixed values."
format="integer"
values="-1 - 255"
special-values="inherit (-1)" />
<property name="df"
nmcli-description="Specifies how the Don&apos;t Fragment (DF) flag should be handled in the outer IP header of GENEVE tunnel packets. &quot;unset&quot; (0) (0): Don&apos;t set the DF flag, packets may be fragmented. &quot;set&quot; (1) (1): Always set the DF flag, packets will not be fragmented. &quot;inherit&quot; (2) (2): Inherit the DF flag from the inner IP header."
format="choice (NMSettingGeneveDf)"
values="unset (0), set (1), inherit (2)" />
</setting>
<setting name="gsm" >
<property name="auto-config"
nmcli-description="When TRUE, the settings such as APN, username, or password will default to values that match the network the modem will register to in the Mobile Broadband Provider database."

View file

@ -29,6 +29,7 @@ SETTING_DNS_OPTION_* parent="NM.SettingDnsOption" name="SETTIN
SETTING_DUMMY_* parent="NM.SettingDummy" name="SETTING_DUMMY_(.+)"
SETTING_ETHTOOL_* parent="NM.SettingEthtool" name="SETTING_ETHTOOL_(.+)"
SETTING_GENERIC_* parent="NM.SettingGeneric" name="SETTING_GENERIC_(.+)"
SETTING_GENEVE_* parent="NM.SettingGeneve" name="SETTING_GENEVE_(.+)"
SETTING_GSM_* parent="NM.SettingGsm" name="SETTING_GSM_(.+)"
SETTING_HOSTNAME_* parent="NM.SettingHostname" name="SETTING_HOSTNAME_(.+)"
SETTING_HSR_* parent="NM.SettingHsr" name="SETTING_HSR_(.+)"