summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2023-11-17 15:12:57 +0100
committerThomas Haller <thaller@redhat.com>2023-11-30 15:32:26 +0100
commit05fa5ba1a9126347a07a617c19ecd1e1eb052269 (patch)
tree1b55dbac2ad4170784388fb773363f9d3a84e3c4
parentb47c94666c9fbdaef5b5a410f87ae85e62fc1136 (diff)
libnm: implement missing "FwMark" property in NMDeviceIPTunnel
-rw-r--r--src/libnm-client-impl/libnm.ver1
-rw-r--r--src/libnm-client-impl/nm-device-ip-tunnel.c40
-rw-r--r--src/libnm-client-impl/tests/test-libnm.c4
-rw-r--r--src/libnm-client-public/nm-device-ip-tunnel.h3
4 files changed, 47 insertions, 1 deletions
diff --git a/src/libnm-client-impl/libnm.ver b/src/libnm-client-impl/libnm.ver
index a92f8991ad..01df94c341 100644
--- a/src/libnm-client-impl/libnm.ver
+++ b/src/libnm-client-impl/libnm.ver
@@ -1947,6 +1947,7 @@ global:
libnm_1_46_0 {
global:
nm_access_point_get_bandwidth;
+ nm_device_ip_tunnel_get_fwmark;
nm_ethtool_optname_is_channels;
nm_ethtool_optname_is_eee;
} libnm_1_44_0;
diff --git a/src/libnm-client-impl/nm-device-ip-tunnel.c b/src/libnm-client-impl/nm-device-ip-tunnel.c
index 19fe6fd3df..cba02c751c 100644
--- a/src/libnm-client-impl/nm-device-ip-tunnel.c
+++ b/src/libnm-client-impl/nm-device-ip-tunnel.c
@@ -26,6 +26,7 @@ NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_MODE,
PROP_OUTPUT_KEY,
PROP_ENCAPSULATION_LIMIT,
PROP_FLOW_LABEL,
+ PROP_FWMARK,
PROP_FLAGS, );
typedef struct {
@@ -37,6 +38,7 @@ typedef struct {
guint32 mode;
guint32 flow_label;
guint32 flags;
+ guint32 fwmark;
guint8 ttl;
guint8 tos;
guint8 encapsulation_limit;
@@ -237,6 +239,23 @@ nm_device_ip_tunnel_get_flow_label(NMDeviceIPTunnel *device)
}
/**
+ * nm_device_ip_tunnel_get_fwmark:
+ * @device: a #NMDeviceIPTunnel
+ *
+ * Returns: the fwmark assigned to tunnel packets. This property applies only
+ * to VTI tunnels.
+ *
+ * Since: 1.46
+ **/
+guint32
+nm_device_ip_tunnel_get_fwmark(NMDeviceIPTunnel *device)
+{
+ g_return_val_if_fail(NM_IS_DEVICE_IP_TUNNEL(device), 0);
+
+ return NM_DEVICE_IP_TUNNEL_GET_PRIVATE(device)->fwmark;
+}
+
+/**
* nm_device_ip_tunnel_get_flags:
* @device: a #NMDeviceIPTunnel
*
@@ -334,6 +353,9 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
case PROP_FLOW_LABEL:
g_value_set_uint(value, nm_device_ip_tunnel_get_flow_label(device));
break;
+ case PROP_FWMARK:
+ g_value_set_uint(value, nm_device_ip_tunnel_get_fwmark(device));
+ break;
case PROP_FLAGS:
g_value_set_uint(value, nm_device_ip_tunnel_get_flags(device));
break;
@@ -357,7 +379,7 @@ const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_iptunnel = NML_DBUS_META_I
PROP_FLOW_LABEL,
NMDeviceIPTunnel,
_priv.flow_label),
- NML_DBUS_META_PROPERTY_INIT_IGNORE("FwMark", "u"),
+ NML_DBUS_META_PROPERTY_INIT_U("FwMark", PROP_FWMARK, NMDeviceIPTunnel, _priv.fwmark),
NML_DBUS_META_PROPERTY_INIT_S("InputKey",
PROP_INPUT_KEY,
NMDeviceIPTunnel,
@@ -560,6 +582,22 @@ nm_device_ip_tunnel_class_init(NMDeviceIPTunnelClass *klass)
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
/**
+ * NMDeviceIPTunnel:fwmark:
+ *
+ * The fwmark value to assign to tunnel packets. This property applies only
+ * to VTI tunnels.
+ *
+ * Since: 1.46
+ **/
+ obj_properties[PROP_FWMARK] = g_param_spec_uint(NM_DEVICE_IP_TUNNEL_FWMARK,
+ "",
+ "",
+ 0,
+ G_MAXUINT32,
+ 0,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+ /**
* NMDeviceIPTunnel:flags:
*
* Tunnel flags.
diff --git a/src/libnm-client-impl/tests/test-libnm.c b/src/libnm-client-impl/tests/test-libnm.c
index 456f185561..59774f966b 100644
--- a/src/libnm-client-impl/tests/test-libnm.c
+++ b/src/libnm-client-impl/tests/test-libnm.c
@@ -3188,6 +3188,10 @@ check_dbus_properties:
&& nm_streq(pspec->name, NM_DEVICE_WIREGUARD_FWMARK)) {
g_assert_cmpstr(obj_property_name, ==, "fw-mark");
expected_property_name = NM_DEVICE_WIREGUARD_FWMARK;
+ } else if (mif == &_nml_dbus_meta_iface_nm_device_iptunnel
+ && nm_streq(pspec->name, NM_DEVICE_IP_TUNNEL_FWMARK)) {
+ g_assert_cmpstr(obj_property_name, ==, "fw-mark");
+ expected_property_name = NM_DEVICE_IP_TUNNEL_FWMARK;
} else if (NM_IN_SET(mif,
&_nml_dbus_meta_iface_nm_ip4config,
&_nml_dbus_meta_iface_nm_ip6config)
diff --git a/src/libnm-client-public/nm-device-ip-tunnel.h b/src/libnm-client-public/nm-device-ip-tunnel.h
index 4b9b9f5b1b..c3c3d0f59a 100644
--- a/src/libnm-client-public/nm-device-ip-tunnel.h
+++ b/src/libnm-client-public/nm-device-ip-tunnel.h
@@ -37,6 +37,7 @@ G_BEGIN_DECLS
#define NM_DEVICE_IP_TUNNEL_OUTPUT_KEY "output-key"
#define NM_DEVICE_IP_TUNNEL_ENCAPSULATION_LIMIT "encapsulation-limit"
#define NM_DEVICE_IP_TUNNEL_FLOW_LABEL "flow-label"
+#define NM_DEVICE_IP_TUNNEL_FWMARK "fwmark"
#define NM_DEVICE_IP_TUNNEL_FLAGS "flags"
/**
@@ -72,6 +73,8 @@ NM_AVAILABLE_IN_1_2
guint8 nm_device_ip_tunnel_get_encapsulation_limit(NMDeviceIPTunnel *device);
NM_AVAILABLE_IN_1_2
guint nm_device_ip_tunnel_get_flow_label(NMDeviceIPTunnel *device);
+NM_AVAILABLE_IN_1_46
+guint32 nm_device_ip_tunnel_get_fwmark(NMDeviceIPTunnel *device);
NM_AVAILABLE_IN_1_12
NMIPTunnelFlags nm_device_ip_tunnel_get_flags(NMDeviceIPTunnel *device);