mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-09 08:50:22 +01:00
Support loopback interface
Support managing the loopback interface through NM as the users want to set the proper mtu for loopback interface when forwarding the packets. Additionally, the IP addresses, DNS, route and routing rules are also allowed to configure for the loopback connection profiles. https://bugzilla.redhat.com/show_bug.cgi?id=2060905
This commit is contained in:
parent
e50c33a988
commit
eeb9d320ea
39 changed files with 594 additions and 3 deletions
10
Makefile.am
10
Makefile.am
|
|
@ -963,6 +963,8 @@ introspection_sources = \
|
|||
introspection/org.freedesktop.NetworkManager.Device.IPTunnel.h \
|
||||
introspection/org.freedesktop.NetworkManager.Device.Infiniband.c \
|
||||
introspection/org.freedesktop.NetworkManager.Device.Infiniband.h \
|
||||
introspection/org.freedesktop.NetworkManager.Device.Loopback.c \
|
||||
introspection/org.freedesktop.NetworkManager.Device.Loopback.h \
|
||||
introspection/org.freedesktop.NetworkManager.Device.Lowpan.c \
|
||||
introspection/org.freedesktop.NetworkManager.Device.Lowpan.h \
|
||||
introspection/org.freedesktop.NetworkManager.Device.Macsec.c \
|
||||
|
|
@ -1050,6 +1052,7 @@ DBUS_INTERFACE_DOCS = \
|
|||
docs/api/dbus-org.freedesktop.NetworkManager.Device.Generic.xml \
|
||||
docs/api/dbus-org.freedesktop.NetworkManager.Device.IPTunnel.xml \
|
||||
docs/api/dbus-org.freedesktop.NetworkManager.Device.Infiniband.xml \
|
||||
docs/api/dbus-org.freedesktop.NetworkManager.Device.Loopback.xml \
|
||||
docs/api/dbus-org.freedesktop.NetworkManager.Device.Lowpan.xml \
|
||||
docs/api/dbus-org.freedesktop.NetworkManager.Device.Macsec.xml \
|
||||
docs/api/dbus-org.freedesktop.NetworkManager.Device.Macvlan.xml \
|
||||
|
|
@ -1118,6 +1121,7 @@ dbusinterfaces_DATA = \
|
|||
introspection/org.freedesktop.NetworkManager.Device.Generic.xml \
|
||||
introspection/org.freedesktop.NetworkManager.Device.IPTunnel.xml \
|
||||
introspection/org.freedesktop.NetworkManager.Device.Infiniband.xml \
|
||||
introspection/org.freedesktop.NetworkManager.Device.Loopback.xml \
|
||||
introspection/org.freedesktop.NetworkManager.Device.Lowpan.xml \
|
||||
introspection/org.freedesktop.NetworkManager.Device.Macsec.xml \
|
||||
introspection/org.freedesktop.NetworkManager.Device.Macvlan.xml \
|
||||
|
|
@ -1199,6 +1203,7 @@ src_libnm_core_impl_lib_h_pub_real = \
|
|||
src/libnm-core-public/nm-setting-ip-tunnel.h \
|
||||
src/libnm-core-public/nm-setting-ip4-config.h \
|
||||
src/libnm-core-public/nm-setting-ip6-config.h \
|
||||
src/libnm-core-public/nm-setting-loopback.h \
|
||||
src/libnm-core-public/nm-setting-macsec.h \
|
||||
src/libnm-core-public/nm-setting-macvlan.h \
|
||||
src/libnm-core-public/nm-setting-match.h \
|
||||
|
|
@ -1278,6 +1283,7 @@ src_libnm_core_impl_lib_c_settings_real = \
|
|||
src/libnm-core-impl/nm-setting-ip-tunnel.c \
|
||||
src/libnm-core-impl/nm-setting-ip4-config.c \
|
||||
src/libnm-core-impl/nm-setting-ip6-config.c \
|
||||
src/libnm-core-impl/nm-setting-loopback.c \
|
||||
src/libnm-core-impl/nm-setting-macsec.c \
|
||||
src/libnm-core-impl/nm-setting-macvlan.c \
|
||||
src/libnm-core-impl/nm-setting-match.c \
|
||||
|
|
@ -1668,6 +1674,7 @@ libnm_lib_h_pub_real = \
|
|||
src/libnm-client-public/nm-device-generic.h \
|
||||
src/libnm-client-public/nm-device-infiniband.h \
|
||||
src/libnm-client-public/nm-device-ip-tunnel.h \
|
||||
src/libnm-client-public/nm-device-loopback.h \
|
||||
src/libnm-client-public/nm-device-macsec.h \
|
||||
src/libnm-client-public/nm-device-macvlan.h \
|
||||
src/libnm-client-public/nm-device-modem.h \
|
||||
|
|
@ -1738,6 +1745,7 @@ libnm_lib_c_real = \
|
|||
src/libnm-client-impl/nm-device-generic.c \
|
||||
src/libnm-client-impl/nm-device-infiniband.c \
|
||||
src/libnm-client-impl/nm-device-ip-tunnel.c \
|
||||
src/libnm-client-impl/nm-device-loopback.c \
|
||||
src/libnm-client-impl/nm-device-macsec.c \
|
||||
src/libnm-client-impl/nm-device-macvlan.c \
|
||||
src/libnm-client-impl/nm-device-modem.c \
|
||||
|
|
@ -2497,6 +2505,8 @@ src_core_libNetworkManager_la_SOURCES = \
|
|||
src/core/devices/nm-device-infiniband.h \
|
||||
src/core/devices/nm-device-ip-tunnel.c \
|
||||
src/core/devices/nm-device-ip-tunnel.h \
|
||||
src/core/devices/nm-device-loopback.c \
|
||||
src/core/devices/nm-device-loopback.h \
|
||||
src/core/devices/nm-device-macsec.c \
|
||||
src/core/devices/nm-device-macsec.h \
|
||||
src/core/devices/nm-device-macvlan.c \
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ content_files = \
|
|||
dbus-org.freedesktop.NetworkManager.Device.Generic.xml \
|
||||
dbus-org.freedesktop.NetworkManager.Device.IPTunnel.xml \
|
||||
dbus-org.freedesktop.NetworkManager.Device.Infiniband.xml \
|
||||
dbus-org.freedesktop.NetworkManager.Device.Loopback.xml \
|
||||
dbus-org.freedesktop.NetworkManager.Device.Macsec.xml \
|
||||
dbus-org.freedesktop.NetworkManager.Device.Macvlan.xml \
|
||||
dbus-org.freedesktop.NetworkManager.Device.Modem.xml \
|
||||
|
|
|
|||
|
|
@ -193,6 +193,7 @@
|
|||
<xi:include href="dbus-org.freedesktop.NetworkManager.Device.Generic.xml"/>
|
||||
<xi:include href="dbus-org.freedesktop.NetworkManager.Device.IPTunnel.xml"/>
|
||||
<xi:include href="dbus-org.freedesktop.NetworkManager.Device.Infiniband.xml"/>
|
||||
<xi:include href="dbus-org.freedesktop.NetworkManager.Device.Loopback.xml"/>
|
||||
<xi:include href="dbus-org.freedesktop.NetworkManager.Device.Lowpan.xml"/>
|
||||
<xi:include href="dbus-org.freedesktop.NetworkManager.Device.Macsec.xml"/>
|
||||
<xi:include href="dbus-org.freedesktop.NetworkManager.Device.Macvlan.xml"/>
|
||||
|
|
|
|||
|
|
@ -331,6 +331,7 @@ print ("NetworkManager version " + client.get_version())]]></programlisting></in
|
|||
<xi:include href="xml/nm-setting-ip-tunnel.xml"/>
|
||||
<xi:include href="xml/nm-setting-ip4-config.xml"/>
|
||||
<xi:include href="xml/nm-setting-ip6-config.xml"/>
|
||||
<xi:include href="xml/nm-setting-loopback.xml"/>
|
||||
<xi:include href="xml/nm-setting-macsec.xml"/>
|
||||
<xi:include href="xml/nm-setting-macvlan.xml"/>
|
||||
<xi:include href="xml/nm-setting-match.xml"/>
|
||||
|
|
@ -380,6 +381,7 @@ print ("NetworkManager version " + client.get_version())]]></programlisting></in
|
|||
<xi:include href="xml/nm-device-generic.xml"/>
|
||||
<xi:include href="xml/nm-device-infiniband.xml"/>
|
||||
<xi:include href="xml/nm-device-ip-tunnel.xml"/>
|
||||
<xi:include href="xml/nm-device-loopback.xml"/>
|
||||
<xi:include href="xml/nm-device-macsec.xml"/>
|
||||
<xi:include href="xml/nm-device-macvlan.xml"/>
|
||||
<xi:include href="xml/nm-device-modem.xml"/>
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ ifaces = [
|
|||
'org.freedesktop.NetworkManager.Device.Generic',
|
||||
'org.freedesktop.NetworkManager.Device.IPTunnel',
|
||||
'org.freedesktop.NetworkManager.Device.Infiniband',
|
||||
'org.freedesktop.NetworkManager.Device.Loopback',
|
||||
'org.freedesktop.NetworkManager.Device.Lowpan',
|
||||
'org.freedesktop.NetworkManager.Device.Macsec',
|
||||
'org.freedesktop.NetworkManager.Device.Macvlan',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<node name="/">
|
||||
<!--
|
||||
org.freedesktop.NetworkManager.Device.Loopback:
|
||||
@short_description: Loopback Device.
|
||||
|
||||
-->
|
||||
<interface name="org.freedesktop.NetworkManager.Device.Loopback">
|
||||
|
||||
<!--
|
||||
HwAddress:
|
||||
|
||||
Hardware address of the device.
|
||||
n
|
||||
DEPRECATED. Use the "HwAddress" property in "org.freedesktop.NetworkManager.Device" instead which exists since version NetworkManager 1.24.0.
|
||||
-->
|
||||
<property name="HwAddress" type="s" access="read"/>
|
||||
|
||||
</interface>
|
||||
</node>
|
||||
|
|
@ -994,6 +994,10 @@ ipv6.ip6-privacy=0
|
|||
removes extraneous routes from the tables.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>loopback.mtu</varname></term>
|
||||
<listitem><para>If configured explicitly to 0, the MTU is not reconfigured during device activation unless it is required due to IPv6 constraints. If left unspecified, a DHCP/IPv6 SLAAC provided value is used or the MTU is left unspecified on activation.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>sriov.autoprobe-drivers</varname></term>
|
||||
<listitem><para>If left unspecified, drivers are autoprobed when the SR-IOV VF gets created.</para></listitem>
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ src/core/devices/nm-device-ethernet-utils.c
|
|||
src/core/devices/nm-device-ethernet.c
|
||||
src/core/devices/nm-device-infiniband.c
|
||||
src/core/devices/nm-device-ip-tunnel.c
|
||||
src/core/devices/nm-device-loopback.c
|
||||
src/core/devices/nm-device-macvlan.c
|
||||
src/core/devices/nm-device-tun.c
|
||||
src/core/devices/nm-device-veth.c
|
||||
|
|
@ -47,6 +48,7 @@ src/libnm-client-impl/nm-device-ethernet.c
|
|||
src/libnm-client-impl/nm-device-generic.c
|
||||
src/libnm-client-impl/nm-device-infiniband.c
|
||||
src/libnm-client-impl/nm-device-ip-tunnel.c
|
||||
src/libnm-client-impl/nm-device-loopback.c
|
||||
src/libnm-client-impl/nm-device-macvlan.c
|
||||
src/libnm-client-impl/nm-device-modem.c
|
||||
src/libnm-client-impl/nm-device-olpc-mesh.c
|
||||
|
|
|
|||
|
|
@ -398,6 +398,7 @@ nm_device_factory_manager_load_factories(NMDeviceFactoryManagerFactoryFunc callb
|
|||
_ADD_INTERNAL(nm_ethernet_device_factory_get_type);
|
||||
_ADD_INTERNAL(nm_infiniband_device_factory_get_type);
|
||||
_ADD_INTERNAL(nm_ip_tunnel_device_factory_get_type);
|
||||
_ADD_INTERNAL(nm_loopback_device_factory_get_type);
|
||||
_ADD_INTERNAL(nm_macsec_device_factory_get_type);
|
||||
_ADD_INTERNAL(nm_macvlan_device_factory_get_type);
|
||||
_ADD_INTERNAL(nm_ppp_device_factory_get_type);
|
||||
|
|
|
|||
139
src/core/devices/nm-device-loopback.c
Normal file
139
src/core/devices/nm-device-loopback.c
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2017 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#include "src/core/nm-default-daemon.h"
|
||||
|
||||
#include "nm-device-loopback.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "nm-act-request.h"
|
||||
#include "nm-device-private.h"
|
||||
#include "libnm-platform/nm-platform.h"
|
||||
#include "nm-device-factory.h"
|
||||
#include "nm-setting-loopback.h"
|
||||
#include "libnm-core-aux-intern/nm-libnm-core-utils.h"
|
||||
#include "libnm-core-intern/nm-core-internal.h"
|
||||
|
||||
#define _NMLOG_DEVICE_TYPE NMDeviceLoopback
|
||||
#include "nm-device-logging.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
struct _NMDeviceLoopback {
|
||||
NMDevice parent;
|
||||
};
|
||||
|
||||
struct _NMDeviceLoopbackClass {
|
||||
NMDeviceClass parent;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE(NMDeviceLoopback, nm_device_loopback, NM_TYPE_DEVICE)
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static NMDeviceCapabilities
|
||||
get_generic_capabilities(NMDevice *dev)
|
||||
{
|
||||
return NM_DEVICE_CAP_IS_SOFTWARE;
|
||||
}
|
||||
|
||||
static guint32
|
||||
get_configured_mtu(NMDevice *device, NMDeviceMtuSource *out_source, gboolean *out_force)
|
||||
{
|
||||
return nm_device_get_configured_mtu_from_connection(device,
|
||||
NM_TYPE_SETTING_LOOPBACK,
|
||||
out_source);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
complete_connection(NMDevice *device,
|
||||
NMConnection *connection,
|
||||
const char *specific_object,
|
||||
NMConnection *const *existing_connections,
|
||||
GError **error)
|
||||
{
|
||||
nm_utils_complete_generic_with_params(nm_device_get_platform(device),
|
||||
connection,
|
||||
NM_SETTING_LOOPBACK_SETTING_NAME,
|
||||
existing_connections,
|
||||
NULL,
|
||||
_("Loopback connection"),
|
||||
NULL,
|
||||
nm_device_get_ip_iface(device));
|
||||
|
||||
_nm_connection_ensure_setting(connection, NM_TYPE_SETTING_LOOPBACK);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
update_connection(NMDevice *device, NMConnection *connection)
|
||||
{
|
||||
_nm_connection_ensure_setting(connection, NM_TYPE_SETTING_LOOPBACK);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static const NMDBusInterfaceInfoExtended interface_info_device_loopback = {
|
||||
.parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT(NM_DBUS_INTERFACE_DEVICE_LOOPBACK, ),
|
||||
};
|
||||
|
||||
static void
|
||||
nm_device_loopback_init(NMDeviceLoopback *self)
|
||||
{}
|
||||
|
||||
static void
|
||||
nm_device_loopback_class_init(NMDeviceLoopbackClass *klass)
|
||||
{
|
||||
NMDeviceClass *device_class = NM_DEVICE_CLASS(klass);
|
||||
NMDBusObjectClass *dbus_object_class = NM_DBUS_OBJECT_CLASS(klass);
|
||||
|
||||
dbus_object_class->interface_infos = NM_DBUS_INTERFACE_INFOS(&interface_info_device_loopback);
|
||||
|
||||
device_class->connection_type_supported = NM_SETTING_LOOPBACK_SETTING_NAME;
|
||||
device_class->connection_type_check_compatible = NM_SETTING_LOOPBACK_SETTING_NAME;
|
||||
device_class->link_types = NM_DEVICE_DEFINE_LINK_TYPES(NM_LINK_TYPE_LOOPBACK);
|
||||
|
||||
device_class->complete_connection = complete_connection;
|
||||
device_class->get_generic_capabilities = get_generic_capabilities;
|
||||
device_class->update_connection = update_connection;
|
||||
device_class->act_stage1_prepare_set_hwaddr_ethernet = TRUE;
|
||||
device_class->get_configured_mtu = get_configured_mtu;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define NM_TYPE_LOOPBACK_DEVICE_FACTORY (nm_loopback_device_factory_get_type())
|
||||
#define NM_LOOPBACK_DEVICE_FACTORY(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_LOOPBACK_DEVICE_FACTORY, NMLoopbackDeviceFactory))
|
||||
|
||||
static NMDevice *
|
||||
create_device(NMDeviceFactory *factory,
|
||||
const char *iface,
|
||||
const NMPlatformLink *plink,
|
||||
NMConnection *connection,
|
||||
gboolean *out_ignore)
|
||||
{
|
||||
return g_object_new(NM_TYPE_DEVICE_LOOPBACK,
|
||||
NM_DEVICE_IFACE,
|
||||
iface,
|
||||
NM_DEVICE_TYPE_DESC,
|
||||
"Loopback",
|
||||
NM_DEVICE_DEVICE_TYPE,
|
||||
NM_DEVICE_TYPE_LOOPBACK,
|
||||
NM_DEVICE_LINK_TYPE,
|
||||
NM_LINK_TYPE_LOOPBACK,
|
||||
NULL);
|
||||
}
|
||||
|
||||
NM_DEVICE_FACTORY_DEFINE_INTERNAL(
|
||||
LOOPBACK,
|
||||
Loopback,
|
||||
loopback,
|
||||
NM_DEVICE_FACTORY_DECLARE_LINK_TYPES(NM_LINK_TYPE_LOOPBACK)
|
||||
NM_DEVICE_FACTORY_DECLARE_SETTING_TYPES(NM_SETTING_LOOPBACK_SETTING_NAME),
|
||||
factory_class->create_device = create_device;);
|
||||
27
src/core/devices/nm-device-loopback.h
Normal file
27
src/core/devices/nm-device-loopback.h
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2017 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#ifndef __NETWORKMANAGER_DEVICE_LOOPBACK_H__
|
||||
#define __NETWORKMANAGER_DEVICE_LOOPBACK_H__
|
||||
|
||||
#include "nm-device-generic.h"
|
||||
|
||||
#define NM_TYPE_DEVICE_LOOPBACK (nm_device_loopback_get_type())
|
||||
#define NM_DEVICE_LOOPBACK(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_DEVICE_LOOPBACK, NMDeviceLoopback))
|
||||
#define NM_DEVICE_LOOPBACK_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_DEVICE_LOOPBACK, NMDeviceLoopbackClass))
|
||||
#define NM_IS_DEVICE_LOOPBACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_DEVICE_LOOPBACK))
|
||||
#define NM_IS_DEVICE_LOOPBACK_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_DEVICE_LOOPBACK))
|
||||
#define NM_DEVICE_LOOPBACK_GET_CLASS(obj) \
|
||||
(G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_DEVICE_LOOPBACK, NMDeviceLoopbackClass))
|
||||
|
||||
typedef struct _NMDeviceLoopback NMDeviceLoopback;
|
||||
typedef struct _NMDeviceLoopbackClass NMDeviceLoopbackClass;
|
||||
|
||||
GType nm_device_loopback_get_type(void);
|
||||
|
||||
#endif /* __NETWORKMANAGER_DEVICE_LOOPBACK_H__ */
|
||||
|
|
@ -4995,6 +4995,8 @@ nm_device_get_route_metric_default(NMDeviceType device_type)
|
|||
return 800;
|
||||
case NM_DEVICE_TYPE_WPAN:
|
||||
return 850;
|
||||
case NM_DEVICE_TYPE_LOOPBACK:
|
||||
return 875;
|
||||
case NM_DEVICE_TYPE_WIFI_P2P:
|
||||
case NM_DEVICE_TYPE_GENERIC:
|
||||
return 950;
|
||||
|
|
@ -10919,6 +10921,10 @@ nm_device_get_configured_mtu_from_connection(NMDevice *self,
|
|||
if (setting)
|
||||
mtu = nm_setting_wireguard_get_mtu(NM_SETTING_WIREGUARD(setting));
|
||||
global_property_name = NM_CON_DEFAULT("wireguard.mtu");
|
||||
} else if (setting_type == NM_TYPE_SETTING_LOOPBACK) {
|
||||
if (setting)
|
||||
mtu = nm_setting_loopback_get_mtu(NM_SETTING_LOOPBACK(setting));
|
||||
global_property_name = NM_CON_DEFAULT("loopback.mtu");
|
||||
} else
|
||||
g_return_val_if_reached(0);
|
||||
|
||||
|
|
@ -17436,7 +17442,7 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps
|
|||
nm_assert(priv->type == NM_DEVICE_TYPE_UNKNOWN);
|
||||
priv->type = g_value_get_uint(value);
|
||||
nm_assert(priv->type > NM_DEVICE_TYPE_UNKNOWN);
|
||||
nm_assert(priv->type <= NM_DEVICE_TYPE_VRF);
|
||||
nm_assert(priv->type <= NM_DEVICE_TYPE_LOOPBACK);
|
||||
break;
|
||||
case PROP_LINK_TYPE:
|
||||
/* construct-only */
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ libNetworkManager = static_library(
|
|||
'devices/nm-device-generic.c',
|
||||
'devices/nm-device-infiniband.c',
|
||||
'devices/nm-device-ip-tunnel.c',
|
||||
'devices/nm-device-loopback.c',
|
||||
'devices/nm-device-macsec.c',
|
||||
'devices/nm-device-macvlan.c',
|
||||
'devices/nm-device-ppp.c',
|
||||
|
|
|
|||
|
|
@ -1839,7 +1839,10 @@ global:
|
|||
libnm_1_40_0 {
|
||||
global:
|
||||
nm_conn_wireguard_import;
|
||||
nm_device_loopback_get_type;
|
||||
nm_setting_connection_get_wait_activation_delay;
|
||||
nm_setting_ip4_link_local_get_type;
|
||||
nm_setting_ip6_config_get_mtu;
|
||||
nm_setting_loopback_get_mtu;
|
||||
nm_setting_loopback_get_type;
|
||||
} libnm_1_38_0;
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ libnm_client_impl_sources = files(
|
|||
'nm-device-generic.c',
|
||||
'nm-device-infiniband.c',
|
||||
'nm-device-ip-tunnel.c',
|
||||
'nm-device-loopback.c',
|
||||
'nm-device-macsec.c',
|
||||
'nm-device-macvlan.c',
|
||||
'nm-device-modem.c',
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
#include "nm-device-generic.h"
|
||||
#include "nm-device-infiniband.h"
|
||||
#include "nm-device-ip-tunnel.h"
|
||||
#include "nm-device-loopback.h"
|
||||
#include "nm-device-macsec.h"
|
||||
#include "nm-device-macvlan.h"
|
||||
#include "nm-device-modem.h"
|
||||
|
|
|
|||
84
src/libnm-client-impl/nm-device-loopback.c
Normal file
84
src/libnm-client-impl/nm-device-loopback.c
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2017 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#include "libnm-client-impl/nm-default-libnm.h"
|
||||
|
||||
#include "nm-device-loopback.h"
|
||||
|
||||
#include "nm-object-private.h"
|
||||
#include "nm-setting-loopback.h"
|
||||
#include "nm-setting-connection.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
struct _NMDeviceLoopback {
|
||||
NMDevice parent;
|
||||
};
|
||||
|
||||
struct _NMDeviceLoopbackClass {
|
||||
NMDeviceClass parent;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE(NMDeviceLoopback, nm_device_loopback, NM_TYPE_DEVICE)
|
||||
|
||||
#define NM_DEVICE_LOOPBACK_GET_PRIVATE(self) \
|
||||
_NM_GET_PRIVATE(self, NMDeviceLoopback, NM_IS_DEVICE_LOOPBACK, NMObject, NMDevice)
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static gboolean
|
||||
connection_compatible(NMDevice *device, NMConnection *connection, GError **error)
|
||||
{
|
||||
const char *iface_name;
|
||||
|
||||
if (!NM_DEVICE_CLASS(nm_device_loopback_parent_class)
|
||||
->connection_compatible(device, connection, error))
|
||||
return FALSE;
|
||||
|
||||
if (!nm_connection_is_type(connection, NM_SETTING_LOOPBACK_SETTING_NAME)) {
|
||||
g_set_error_literal(error,
|
||||
NM_DEVICE_ERROR,
|
||||
NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
|
||||
_("The connection was not a loopback connection."));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
iface_name = nm_connection_get_interface_name(connection);
|
||||
if (!iface_name) {
|
||||
g_set_error_literal(error,
|
||||
NM_DEVICE_ERROR,
|
||||
NM_DEVICE_ERROR_INVALID_CONNECTION,
|
||||
_("The connection did not specify an interface name."));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GType
|
||||
get_setting_type(NMDevice *device)
|
||||
{
|
||||
return NM_TYPE_SETTING_LOOPBACK;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
nm_device_loopback_init(NMDeviceLoopback *device)
|
||||
{}
|
||||
|
||||
const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_loopback =
|
||||
NML_DBUS_META_IFACE_INIT(NM_DBUS_INTERFACE_DEVICE_LOOPBACK,
|
||||
nm_device_loopback_get_type,
|
||||
NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, );
|
||||
|
||||
static void
|
||||
nm_device_loopback_class_init(NMDeviceLoopbackClass *loopback_class)
|
||||
{
|
||||
NMDeviceClass *device_class = NM_DEVICE_CLASS(loopback_class);
|
||||
|
||||
device_class->connection_compatible = connection_compatible;
|
||||
device_class->get_setting_type = get_setting_type;
|
||||
}
|
||||
|
|
@ -312,6 +312,7 @@ coerce_type(NMDeviceType type)
|
|||
case NM_DEVICE_TYPE_WIREGUARD:
|
||||
case NM_DEVICE_TYPE_WIFI_P2P:
|
||||
case NM_DEVICE_TYPE_VRF:
|
||||
case NM_DEVICE_TYPE_LOOPBACK:
|
||||
return type;
|
||||
}
|
||||
return NM_DEVICE_TYPE_UNKNOWN;
|
||||
|
|
@ -1811,6 +1812,8 @@ get_type_name(NMDevice *device)
|
|||
return _("Wi-Fi P2P");
|
||||
case NM_DEVICE_TYPE_VRF:
|
||||
return _("VRF");
|
||||
case NM_DEVICE_TYPE_LOOPBACK:
|
||||
return _("Loopback");
|
||||
case NM_DEVICE_TYPE_GENERIC:
|
||||
case NM_DEVICE_TYPE_UNUSED1:
|
||||
case NM_DEVICE_TYPE_UNUSED2:
|
||||
|
|
|
|||
|
|
@ -693,6 +693,7 @@ const NMLDBusMetaIface *const _nml_dbus_meta_ifaces[] = {
|
|||
&_nml_dbus_meta_iface_nm_device_generic,
|
||||
&_nml_dbus_meta_iface_nm_device_iptunnel,
|
||||
&_nml_dbus_meta_iface_nm_device_infiniband,
|
||||
&_nml_dbus_meta_iface_nm_device_loopback,
|
||||
&_nml_dbus_meta_iface_nm_device_lowpan,
|
||||
&_nml_dbus_meta_iface_nm_device_macsec,
|
||||
&_nml_dbus_meta_iface_nm_device_macvlan,
|
||||
|
|
|
|||
|
|
@ -556,7 +556,7 @@ struct _NMLDBusMetaIface {
|
|||
NML_DBUS_META_IFACE_OBJ_PROPERTIES(), \
|
||||
##__VA_ARGS__)
|
||||
|
||||
extern const NMLDBusMetaIface *const _nml_dbus_meta_ifaces[44];
|
||||
extern const NMLDBusMetaIface *const _nml_dbus_meta_ifaces[45];
|
||||
|
||||
extern const NMLDBusMetaIface _nml_dbus_meta_iface_nm;
|
||||
extern const NMLDBusMetaIface _nml_dbus_meta_iface_nm_accesspoint;
|
||||
|
|
@ -572,6 +572,7 @@ extern const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_dummy;
|
|||
extern const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_generic;
|
||||
extern const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_infiniband;
|
||||
extern const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_iptunnel;
|
||||
extern const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_loopback;
|
||||
extern const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_lowpan;
|
||||
extern const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_macsec;
|
||||
extern const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_macvlan;
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
#include "nm-setting-ip6-config.h"
|
||||
#include "nm-setting-ip-config.h"
|
||||
#include "nm-setting-ip-tunnel.h"
|
||||
#include "nm-setting-loopback.h"
|
||||
#include "nm-setting-macsec.h"
|
||||
#include "nm-setting-macvlan.h"
|
||||
#include "nm-setting-match.h"
|
||||
|
|
@ -109,6 +110,7 @@
|
|||
#include "nm-device-generic.h"
|
||||
#include "nm-device-infiniband.h"
|
||||
#include "nm-device-ip-tunnel.h"
|
||||
#include "nm-device-loopback.h"
|
||||
#include "nm-device-macsec.h"
|
||||
#include "nm-device-macvlan.h"
|
||||
#include "nm-device-modem.h"
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ libnm_client_headers = files(
|
|||
'nm-device-generic.h',
|
||||
'nm-device-infiniband.h',
|
||||
'nm-device-ip-tunnel.h',
|
||||
'nm-device-loopback.h',
|
||||
'nm-device-macsec.h',
|
||||
'nm-device-macvlan.h',
|
||||
'nm-device-modem.h',
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceEthernet, g_object_unref)
|
|||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceGeneric, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceIPTunnel, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceInfiniband, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceLoopback, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceMacsec, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceMacvlan, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceModem, g_object_unref)
|
||||
|
|
@ -82,6 +83,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingIP6Config, g_object_unref)
|
|||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingIPConfig, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingIPTunnel, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingInfiniband, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingLoopback, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingMacsec, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingMacvlan, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingMatch, g_object_unref)
|
||||
|
|
|
|||
40
src/libnm-client-public/nm-device-loopback.h
Normal file
40
src/libnm-client-public/nm-device-loopback.h
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2017 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#ifndef __NM_DEVICE_LOOPBACK_H__
|
||||
#define __NM_DEVICE_LOOPBACK_H__
|
||||
|
||||
#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
|
||||
#error "Only <NetworkManager.h> can be included directly."
|
||||
#endif
|
||||
|
||||
#include "nm-device.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define NM_TYPE_DEVICE_LOOPBACK (nm_device_loopback_get_type())
|
||||
#define NM_DEVICE_LOOPBACK(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_DEVICE_LOOPBACK, NMDeviceLoopback))
|
||||
#define NM_DEVICE_LOOPBACK_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_DEVICE_LOOPBACK, NMDeviceLoopbackClass))
|
||||
#define NM_IS_DEVICE_LOOPBACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_DEVICE_LOOPBACK))
|
||||
#define NM_IS_DEVICE_LOOPBACK_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_DEVICE_LOOPBACK))
|
||||
#define NM_DEVICE_LOOPBACK_GET_CLASS(obj) \
|
||||
(G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_DEVICE_LOOPBACK, NMDeviceLoopbackClass))
|
||||
|
||||
#define NM_DEVICE_LOOPBACK_HW_ADDRESS "hw-address"
|
||||
|
||||
/**
|
||||
* NMDeviceLoopback:
|
||||
*/
|
||||
typedef struct _NMDeviceLoopback NMDeviceLoopback;
|
||||
typedef struct _NMDeviceLoopbackClass NMDeviceLoopbackClass;
|
||||
|
||||
GType nm_device_loopback_get_type(void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __NM_DEVICE_LOOPBACK_H__ */
|
||||
|
|
@ -24,6 +24,7 @@ libnm_core_settings_sources = files(
|
|||
'nm-setting-ip-tunnel.c',
|
||||
'nm-setting-ip4-config.c',
|
||||
'nm-setting-ip6-config.c',
|
||||
'nm-setting-loopback.c',
|
||||
'nm-setting-macsec.c',
|
||||
'nm-setting-macvlan.c',
|
||||
'nm-setting-match.c',
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
#include "nm-setting-ip-tunnel.h"
|
||||
#include "nm-setting-ip4-config.h"
|
||||
#include "nm-setting-ip6-config.h"
|
||||
#include "nm-setting-loopback.h"
|
||||
#include "nm-setting-macsec.h"
|
||||
#include "nm-setting-macvlan.h"
|
||||
#include "nm-setting-match.h"
|
||||
|
|
@ -358,6 +359,13 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = {
|
|||
.setting_name = NM_SETTING_IP_TUNNEL_SETTING_NAME,
|
||||
.get_setting_gtype = nm_setting_ip_tunnel_get_type,
|
||||
},
|
||||
[NM_META_SETTING_TYPE_LOOPBACK] =
|
||||
{
|
||||
.meta_type = NM_META_SETTING_TYPE_LOOPBACK,
|
||||
.setting_priority = NM_SETTING_PRIORITY_HW_BASE,
|
||||
.setting_name = NM_SETTING_LOOPBACK_SETTING_NAME,
|
||||
.get_setting_gtype = nm_setting_loopback_get_type,
|
||||
},
|
||||
[NM_META_SETTING_TYPE_MACSEC] =
|
||||
{
|
||||
.meta_type = NM_META_SETTING_TYPE_MACSEC,
|
||||
|
|
@ -608,6 +616,7 @@ const NMMetaSettingType nm_meta_setting_types_by_priority[] = {
|
|||
NM_META_SETTING_TYPE_GSM,
|
||||
NM_META_SETTING_TYPE_INFINIBAND,
|
||||
NM_META_SETTING_TYPE_IP_TUNNEL,
|
||||
NM_META_SETTING_TYPE_LOOPBACK,
|
||||
NM_META_SETTING_TYPE_MACSEC,
|
||||
NM_META_SETTING_TYPE_MACVLAN,
|
||||
NM_META_SETTING_TYPE_OVS_BRIDGE,
|
||||
|
|
|
|||
139
src/libnm-core-impl/nm-setting-loopback.c
Normal file
139
src/libnm-core-impl/nm-setting-loopback.c
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2017 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#include "libnm-core-impl/nm-default-libnm-core.h"
|
||||
|
||||
#include "nm-setting-loopback.h"
|
||||
|
||||
#include "nm-connection-private.h"
|
||||
#include "nm-setting-connection.h"
|
||||
#include "nm-setting-private.h"
|
||||
|
||||
/**
|
||||
* SECTION:nm-setting-loopback
|
||||
* @short_description: Describes connection properties for loopback interfaces
|
||||
*
|
||||
* The #NMSettingLoopback object is a #NMSetting subclass that describes properties
|
||||
* necessary for connection to loopback devices
|
||||
**/
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
NM_GOBJECT_PROPERTIES_DEFINE(NMSettingLoopback, PROP_MTU, );
|
||||
|
||||
typedef struct {
|
||||
guint32 mtu;
|
||||
} NMSettingLoopbackPrivate;
|
||||
|
||||
/**
|
||||
* NMSettingLoopback:
|
||||
*
|
||||
* Loopback Link Settings
|
||||
*/
|
||||
struct _NMSettingLoopback {
|
||||
NMSetting parent;
|
||||
};
|
||||
|
||||
struct _NMSettingLoopbackClass {
|
||||
NMSettingClass parent;
|
||||
gpointer padding[4];
|
||||
};
|
||||
|
||||
#define NM_SETTING_LOOPBACK_GET_PRIVATE(o) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_LOOPBACK, NMSettingLoopbackPrivate))
|
||||
|
||||
G_DEFINE_TYPE(NMSettingLoopback, nm_setting_loopback, NM_TYPE_SETTING)
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/**
|
||||
* nm_setting_loopback_get_mtu:
|
||||
* @setting: the #NMSettingLoopback
|
||||
*
|
||||
* Returns: the #NMSettingLoopback:mtu property of the setting
|
||||
**/
|
||||
guint32
|
||||
nm_setting_loopback_get_mtu(NMSettingLoopback *setting)
|
||||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_LOOPBACK(setting), 0);
|
||||
|
||||
return NM_SETTING_LOOPBACK_GET_PRIVATE(setting)->mtu;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
verify(NMSetting *setting, NMConnection *connection, GError **error)
|
||||
{
|
||||
if (!_nm_connection_verify_required_interface_name(connection, error))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
nm_setting_loopback_init(NMSettingLoopback *setting)
|
||||
{}
|
||||
|
||||
/**
|
||||
* nm_setting_loopback_new:
|
||||
*
|
||||
* Creates a new #NMSettingLoopback object with default values.
|
||||
*
|
||||
* Returns: (transfer full): the new empty #NMSettingLoopback object
|
||||
*
|
||||
* Since: 1.8
|
||||
**/
|
||||
NMSetting *
|
||||
nm_setting_loopback_new(void)
|
||||
{
|
||||
return g_object_new(NM_TYPE_SETTING_LOOPBACK, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
nm_setting_loopback_class_init(NMSettingLoopbackClass *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();
|
||||
|
||||
g_type_class_add_private(klass, sizeof(NMSettingLoopbackPrivate));
|
||||
|
||||
object_class->get_property = _nm_setting_property_get_property_direct;
|
||||
object_class->set_property = _nm_setting_property_set_property_direct;
|
||||
|
||||
setting_class->verify = verify;
|
||||
|
||||
/**
|
||||
* NMSettingLoopback:mtu:
|
||||
*
|
||||
* If non-zero, only transmit packets of the specified size or smaller,
|
||||
* breaking larger packets up into multiple Ethernet frames.
|
||||
**/
|
||||
/* ---ifcfg-rh---
|
||||
* property: mtu
|
||||
* variable: MTU
|
||||
* description: MTU of the interface.
|
||||
* ---end---
|
||||
*/
|
||||
_nm_setting_property_define_direct_uint32(properties_override,
|
||||
obj_properties,
|
||||
NM_SETTING_LOOPBACK_MTU,
|
||||
PROP_MTU,
|
||||
0,
|
||||
G_MAXUINT32,
|
||||
0,
|
||||
NM_SETTING_PARAM_FUZZY_IGNORE,
|
||||
NMSettingLoopbackPrivate,
|
||||
mtu);
|
||||
|
||||
g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties);
|
||||
|
||||
_nm_setting_class_commit(setting_class,
|
||||
NM_META_SETTING_TYPE_LOOPBACK,
|
||||
NULL,
|
||||
properties_override,
|
||||
NM_SETT_INFO_PRIVATE_OFFSET_FROM_CLASS);
|
||||
}
|
||||
|
|
@ -121,7 +121,7 @@ test_nm_meta_setting_types_by_priority(void)
|
|||
G_STATIC_ASSERT_EXPR(_NM_META_SETTING_TYPE_NUM
|
||||
== G_N_ELEMENTS(nm_meta_setting_types_by_priority));
|
||||
|
||||
G_STATIC_ASSERT_EXPR(_NM_META_SETTING_TYPE_NUM == 52);
|
||||
G_STATIC_ASSERT_EXPR(_NM_META_SETTING_TYPE_NUM == 53);
|
||||
|
||||
arr = g_ptr_array_new_with_free_func(g_object_unref);
|
||||
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@
|
|||
#include "nm-setting-ip-tunnel.h"
|
||||
#include "nm-setting-ip4-config.h"
|
||||
#include "nm-setting-ip6-config.h"
|
||||
#include "nm-setting-loopback.h"
|
||||
#include "nm-setting-macsec.h"
|
||||
#include "nm-setting-macvlan.h"
|
||||
#include "nm-setting-match.h"
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@ typedef enum _nm_packed {
|
|||
NM_META_SETTING_TYPE_IP_TUNNEL,
|
||||
NM_META_SETTING_TYPE_IP4_CONFIG,
|
||||
NM_META_SETTING_TYPE_IP6_CONFIG,
|
||||
NM_META_SETTING_TYPE_LOOPBACK,
|
||||
NM_META_SETTING_TYPE_MACSEC,
|
||||
NM_META_SETTING_TYPE_MACVLAN,
|
||||
NM_META_SETTING_TYPE_MATCH,
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ libnm_core_headers = files(
|
|||
'nm-setting-ip-tunnel.h',
|
||||
'nm-setting-ip4-config.h',
|
||||
'nm-setting-ip6-config.h',
|
||||
'nm-setting-loopback.h',
|
||||
'nm-setting-macsec.h',
|
||||
'nm-setting-macvlan.h',
|
||||
'nm-setting-match.h',
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ typedef struct _NMSettingIP6Config NMSettingIP6Config;
|
|||
typedef struct _NMSettingIPConfig NMSettingIPConfig;
|
||||
typedef struct _NMSettingIPTunnel NMSettingIPTunnel;
|
||||
typedef struct _NMSettingInfiniband NMSettingInfiniband;
|
||||
typedef struct _NMSettingLoopback NMSettingLoopback;
|
||||
typedef struct _NMSettingMacsec NMSettingMacsec;
|
||||
typedef struct _NMSettingMacvlan NMSettingMacvlan;
|
||||
typedef struct _NMSettingMatch NMSettingMatch;
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#define NM_DBUS_INTERFACE_DEVICE_GRE NM_DBUS_INTERFACE_DEVICE ".Gre"
|
||||
#define NM_DBUS_INTERFACE_DEVICE_INFINIBAND NM_DBUS_INTERFACE_DEVICE ".Infiniband"
|
||||
#define NM_DBUS_INTERFACE_DEVICE_IP_TUNNEL NM_DBUS_INTERFACE_DEVICE ".IPTunnel"
|
||||
#define NM_DBUS_INTERFACE_DEVICE_LOOPBACK NM_DBUS_INTERFACE_DEVICE ".Loopback"
|
||||
#define NM_DBUS_INTERFACE_DEVICE_MACSEC NM_DBUS_INTERFACE_DEVICE ".Macsec"
|
||||
#define NM_DBUS_INTERFACE_DEVICE_MACVLAN NM_DBUS_INTERFACE_DEVICE ".Macvlan"
|
||||
#define NM_DBUS_INTERFACE_DEVICE_MODEM NM_DBUS_INTERFACE_DEVICE ".Modem"
|
||||
|
|
@ -216,6 +217,7 @@ typedef enum {
|
|||
* @NM_DEVICE_TYPE_WIREGUARD: a WireGuard interface
|
||||
* @NM_DEVICE_TYPE_WIFI_P2P: an 802.11 Wi-Fi P2P device. Since: 1.16.
|
||||
* @NM_DEVICE_TYPE_VRF: A VRF (Virtual Routing and Forwarding) interface. Since: 1.24.
|
||||
* @NM_DEVICE_TYPE_LOOPBACK: a loopback interface. Since: 1.40.
|
||||
*
|
||||
* #NMDeviceType values indicate the type of hardware represented by a
|
||||
* device object.
|
||||
|
|
@ -253,6 +255,7 @@ typedef enum {
|
|||
NM_DEVICE_TYPE_WIREGUARD = 29,
|
||||
NM_DEVICE_TYPE_WIFI_P2P = 30,
|
||||
NM_DEVICE_TYPE_VRF = 31,
|
||||
NM_DEVICE_TYPE_LOOPBACK = 32,
|
||||
} NMDeviceType;
|
||||
|
||||
/**
|
||||
|
|
|
|||
43
src/libnm-core-public/nm-setting-loopback.h
Normal file
43
src/libnm-core-public/nm-setting-loopback.h
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2017 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#ifndef __NM_SETTING_LOOPBACK_H__
|
||||
#define __NM_SETTING_LOOPBACK_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_LOOPBACK (nm_setting_loopback_get_type())
|
||||
#define NM_SETTING_LOOPBACK(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_LOOPBACK, NMSettingLoopback))
|
||||
#define NM_SETTING_LOOPBACK_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_LOOPBACKCONFIG, NMSettingLoopbackClass))
|
||||
#define NM_IS_SETTING_LOOPBACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_LOOPBACK))
|
||||
#define NM_IS_SETTING_LOOPBACK_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_LOOPBACK))
|
||||
#define NM_SETTING_LOOPBACK_GET_CLASS(obj) \
|
||||
(G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_LOOPBACK, NMSettingLoopbackClass))
|
||||
|
||||
#define NM_SETTING_LOOPBACK_SETTING_NAME "loopback"
|
||||
|
||||
#define NM_SETTING_LOOPBACK_MTU "mtu"
|
||||
|
||||
typedef struct _NMSettingLoopbackClass NMSettingLoopbackClass;
|
||||
|
||||
NM_AVAILABLE_IN_1_8
|
||||
GType nm_setting_loopback_get_type(void);
|
||||
NM_AVAILABLE_IN_1_8
|
||||
NMSetting *nm_setting_loopback_new(void);
|
||||
|
||||
guint32 nm_setting_loopback_get_mtu(NMSettingLoopback *setting);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __NM_SETTING_LOOPBACK_H__ */
|
||||
|
|
@ -32,6 +32,7 @@
|
|||
#include "nm-setting-ip-tunnel.h"
|
||||
#include "nm-setting-ip4-config.h"
|
||||
#include "nm-setting-ip6-config.h"
|
||||
#include "nm-setting-loopback.h"
|
||||
#include "nm-setting-macsec.h"
|
||||
#include "nm-setting-macvlan.h"
|
||||
#include "nm-setting-match.h"
|
||||
|
|
@ -358,6 +359,13 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = {
|
|||
.setting_name = NM_SETTING_IP_TUNNEL_SETTING_NAME,
|
||||
.get_setting_gtype = nm_setting_ip_tunnel_get_type,
|
||||
},
|
||||
[NM_META_SETTING_TYPE_LOOPBACK] =
|
||||
{
|
||||
.meta_type = NM_META_SETTING_TYPE_LOOPBACK,
|
||||
.setting_priority = NM_SETTING_PRIORITY_HW_BASE,
|
||||
.setting_name = NM_SETTING_LOOPBACK_SETTING_NAME,
|
||||
.get_setting_gtype = nm_setting_loopback_get_type,
|
||||
},
|
||||
[NM_META_SETTING_TYPE_MACSEC] =
|
||||
{
|
||||
.meta_type = NM_META_SETTING_TYPE_MACSEC,
|
||||
|
|
@ -608,6 +616,7 @@ const NMMetaSettingType nm_meta_setting_types_by_priority[] = {
|
|||
NM_META_SETTING_TYPE_GSM,
|
||||
NM_META_SETTING_TYPE_INFINIBAND,
|
||||
NM_META_SETTING_TYPE_IP_TUNNEL,
|
||||
NM_META_SETTING_TYPE_LOOPBACK,
|
||||
NM_META_SETTING_TYPE_MACSEC,
|
||||
NM_META_SETTING_TYPE_MACVLAN,
|
||||
NM_META_SETTING_TYPE_OVS_BRIDGE,
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@ typedef enum _nm_packed {
|
|||
NM_META_SETTING_TYPE_IP_TUNNEL,
|
||||
NM_META_SETTING_TYPE_IP4_CONFIG,
|
||||
NM_META_SETTING_TYPE_IP6_CONFIG,
|
||||
NM_META_SETTING_TYPE_LOOPBACK,
|
||||
NM_META_SETTING_TYPE_MACSEC,
|
||||
NM_META_SETTING_TYPE_MACVLAN,
|
||||
NM_META_SETTING_TYPE_MATCH,
|
||||
|
|
|
|||
|
|
@ -6489,6 +6489,21 @@ static const NMMetaPropertyInfo *const property_infos_IP_TUNNEL[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
#undef _CURRENT_NM_META_SETTING_TYPE
|
||||
#define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_LOOPBACK
|
||||
static const NMMetaPropertyInfo *const property_infos_LOOPBACK[] = {
|
||||
PROPERTY_INFO_WITH_DESC (NM_SETTING_LOOPBACK_MTU,
|
||||
.is_cli_option = TRUE,
|
||||
.property_alias = "mtu",
|
||||
.prompt = N_("MTU"),
|
||||
.property_type = &_pt_gobject_mtu,
|
||||
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (mtu,
|
||||
.get_fcn = MTU_GET_FCN (NMSettingLoopback, nm_setting_loopback_get_mtu),
|
||||
),
|
||||
),
|
||||
NULL
|
||||
};
|
||||
|
||||
#undef _CURRENT_NM_META_SETTING_TYPE
|
||||
#define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_MACSEC
|
||||
static const NMMetaPropertyInfo *const property_infos_MACSEC[] = {
|
||||
|
|
@ -8242,6 +8257,7 @@ _setting_init_fcn_wireless (ARGS_SETTING_INIT_FCN)
|
|||
#define SETTING_PRETTY_NAME_IP4_CONFIG N_("IPv4 protocol")
|
||||
#define SETTING_PRETTY_NAME_IP6_CONFIG N_("IPv6 protocol")
|
||||
#define SETTING_PRETTY_NAME_IP_TUNNEL N_("IP-tunnel settings")
|
||||
#define SETTING_PRETTY_NAME_LOOPBACK N_("Loopback settings")
|
||||
#define SETTING_PRETTY_NAME_MACSEC N_("MACsec connection")
|
||||
#define SETTING_PRETTY_NAME_MACVLAN N_("macvlan connection")
|
||||
#define SETTING_PRETTY_NAME_MATCH N_("Match")
|
||||
|
|
@ -8401,6 +8417,12 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = {
|
|||
NM_META_SETTING_VALID_PART_ITEM (ETHTOOL, FALSE),
|
||||
),
|
||||
),
|
||||
SETTING_INFO (LOOPBACK,
|
||||
.valid_parts = NM_META_SETTING_VALID_PARTS (
|
||||
NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE),
|
||||
NM_META_SETTING_VALID_PART_ITEM (LOOPBACK, TRUE),
|
||||
),
|
||||
),
|
||||
SETTING_INFO (MACSEC,
|
||||
.valid_parts = NM_META_SETTING_VALID_PARTS (
|
||||
NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE),
|
||||
|
|
|
|||
|
|
@ -430,5 +430,6 @@
|
|||
#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 NM_TERNARY_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 NM_TERNARY_TRUE (1).")
|
||||
#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT N_("If set to NM_TERNARY_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 NM_TERNARY_FALSE (0), the hostname can be set from this device even if it doesn't have the default route. When set to NM_TERNARY_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 NM_TERNARY_FALSE (0).")
|
||||
#define DESCRIBE_DOC_NM_SETTING_HOSTNAME_PRIORITY N_("The relative priority of this connection to determine the system hostname. A lower numerical value is better (higher priority). A connection with higher priority is considered before connections with lower priority. If the value is zero, it can be overridden by a global value from NetworkManager configuration. If the property doesn't have a value in the global configuration, the value is assumed to be 100. Negative values have the special effect of excluding other connections with a greater numerical priority value; so in presence of at least one negative priority, only connections with the lowest priority value will be used to determine the hostname.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_LOOPBACK_MTU N_("If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_OVS_EXTERNAL_IDS_DATA N_("A dictionary of key/value pairs with exernal-ids for OVS.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_VETH_PEER N_("This property specifies the peer interface name of the veth. This property is mandatory.")
|
||||
|
|
|
|||
|
|
@ -760,6 +760,11 @@
|
|||
<property name="token"
|
||||
description="Configure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 IPv6 tokenized interface identifiers. Useful with eui64 addr-gen-mode." />
|
||||
</setting>
|
||||
<setting name="loopback" >
|
||||
<property name="mtu"
|
||||
alias="mtu"
|
||||
description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." />
|
||||
</setting>
|
||||
<setting name="macsec" >
|
||||
<property name="parent"
|
||||
alias="dev"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue