summary refs log tree commit diff
path: root/src/libnm-core-impl/nm-setting-prefix-delegation.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libnm-core-impl/nm-setting-prefix-delegation.c')
-rw-r--r--src/libnm-core-impl/nm-setting-prefix-delegation.c118
1 files changed, 118 insertions, 0 deletions
diff --git a/src/libnm-core-impl/nm-setting-prefix-delegation.c b/src/libnm-core-impl/nm-setting-prefix-delegation.c
new file mode 100644
index 00000000..100d3153
--- /dev/null
+++ b/src/libnm-core-impl/nm-setting-prefix-delegation.c
@@ -0,0 +1,118 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "libnm-core-impl/nm-default-libnm-core.h"
+
+#include "nm-setting-prefix-delegation.h"
+
+#include "nm-connection-private.h"
+#include "nm-setting-connection.h"
+#include "nm-setting-private.h"
+
+/**
+ * SECTION:nm-setting-prefix-delegation
+ * @short_description: Describes connection properties related to IPv6 prefix delegation
+ *
+ * The #NMSettingPrefixDelegation object is a #NMSetting subclass that describes the
+ * configuration of downstream interfaces using IPv6 prefix delegation.
+ **/
+
+/*****************************************************************************/
+
+NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_SUBNET_ID, );
+
+/**
+ * NMSettingPrefixDelegation:
+ *
+ * IPv6 prefix delegation settings
+ *
+ * Since: 1.54
+ */
+struct _NMSettingPrefixDelegation {
+    NMSetting parent;
+    gint64    subnet_id;
+};
+
+struct _NMSettingPrefixDelegationClass {
+    NMSettingClass parent;
+};
+
+G_DEFINE_TYPE(NMSettingPrefixDelegation, nm_setting_prefix_delegation, NM_TYPE_SETTING)
+
+/*****************************************************************************/
+
+/**
+ * nm_setting_prefix_delegation_get_subnet_id:
+ * @setting: the #NMSettingPrefixDelegation
+ *
+ * Returns: the subnet ID for prefix delegation
+ *
+ * Since: 1.54
+ **/
+gint64
+nm_setting_prefix_delegation_get_subnet_id(NMSettingPrefixDelegation *setting)
+{
+    g_return_val_if_fail(NM_IS_SETTING_PREFIX_DELEGATION(setting), 0);
+
+    return setting->subnet_id;
+}
+
+/*****************************************************************************/
+
+static void
+nm_setting_prefix_delegation_init(NMSettingPrefixDelegation *setting)
+{}
+
+/**
+ * nm_setting_prefix_delegation_new:
+ *
+ * Creates a new #NMSettingPrefixDelegation object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingPrefixDelegation object
+ *
+ * Since: 1.54
+ **/
+NMSetting *
+nm_setting_prefix_delegation_new(void)
+{
+    return g_object_new(NM_TYPE_SETTING_PREFIX_DELEGATION, NULL);
+}
+
+static void
+nm_setting_prefix_delegation_class_init(NMSettingPrefixDelegationClass *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;
+
+    /**
+     * NMSettingPrefixDelegation:subnet-id:
+     *
+     * The subnet ID to use on the interface from the prefix delegation received via
+     * an upstream interface. Set to a value between 0 and 0xffffffff (2^32 - 1)
+     * to indicate a specific subnet ID; or set to -1 to automatically choose
+     * an available subnet ID.
+     *
+     * Since: 1.54
+     **/
+    _nm_setting_property_define_direct_int64(properties_override,
+                                             obj_properties,
+                                             NM_SETTING_PREFIX_DELEGATION_SUBNET_ID,
+                                             PROP_SUBNET_ID,
+                                             -1,
+                                             G_MAXUINT32,
+                                             -1,
+                                             NM_SETTING_PARAM_NONE,
+                                             NMSettingPrefixDelegation,
+                                             subnet_id);
+
+    g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties);
+
+    _nm_setting_class_commit(setting_class,
+                             NM_META_SETTING_TYPE_PREFIX_DELEGATION,
+                             NULL,
+                             properties_override,
+                             0);
+}