summary refs log tree commit diff
path: root/src/libnm-core-impl/nm-setting-bond-port.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2022-01-13 22:30:39 +0100
committerMichael Biebl <biebl@debian.org>2022-01-13 22:30:39 +0100
commit88c227d90a6b7b388c5c85d72802a0ca8f05ed5c (patch)
tree71f32df6617802270e8a78574bd8e1637dc532f4 /src/libnm-core-impl/nm-setting-bond-port.c
parente74c568b07b50b97873fb4ee1d776dedefbd54d6 (diff)
New upstream version 1.34.0 upstream/1.34.0
Diffstat (limited to 'src/libnm-core-impl/nm-setting-bond-port.c')
-rw-r--r--src/libnm-core-impl/nm-setting-bond-port.c173
1 files changed, 173 insertions, 0 deletions
diff --git a/src/libnm-core-impl/nm-setting-bond-port.c b/src/libnm-core-impl/nm-setting-bond-port.c
new file mode 100644
index 00000000..4538e8b9
--- /dev/null
+++ b/src/libnm-core-impl/nm-setting-bond-port.c
@@ -0,0 +1,173 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2021 Red Hat, Inc.
+ */
+
+#include "libnm-core-impl/nm-default-libnm-core.h"
+
+#include "nm-connection-private.h"
+#include "nm-setting-bond-port.h"
+#include "nm-setting-bond.h"
+#include "nm-setting-connection.h"
+#include "nm-utils-private.h"
+#include "nm-utils.h"
+
+/**
+ * SECTION:nm-setting-bond-port
+ * @short_description: Describes connection properties for bond ports
+ *
+ * The #NMSettingBondPort object is a #NMSetting subclass that describes
+ * optional properties that apply to bond ports.
+ **/
+
+/*****************************************************************************/
+
+NM_GOBJECT_PROPERTIES_DEFINE(NMSettingBondPort, PROP_QUEUE_ID, );
+
+typedef struct {
+    guint32 queue_id;
+} NMSettingBondPortPrivate;
+
+/**
+ * NMSettingBondPort:
+ *
+ * Bond Port Settings
+ */
+struct _NMSettingBondPort {
+    NMSetting                parent;
+    NMSettingBondPortPrivate _priv;
+};
+
+struct _NMSettingBondPortClass {
+    NMSettingClass parent;
+};
+
+G_DEFINE_TYPE(NMSettingBondPort, nm_setting_bond_port, NM_TYPE_SETTING)
+
+#define NM_SETTING_BOND_PORT_GET_PRIVATE(self) \
+    _NM_GET_PRIVATE(self, NMSettingBondPort, NM_IS_SETTING_BOND_PORT, NMSetting)
+
+/*****************************************************************************/
+
+/**
+ * nm_setting_bond_port_get_queue_id:
+ * @setting: the #NMSettingBondPort
+ *
+ * Returns: the #NMSettingBondPort:queue_id property of the setting
+ *
+ * Since: 1.34
+ **/
+guint32
+nm_setting_bond_port_get_queue_id(NMSettingBondPort *setting)
+{
+    g_return_val_if_fail(NM_IS_SETTING_BOND_PORT(setting), 0);
+
+    return NM_SETTING_BOND_PORT_GET_PRIVATE(setting)->queue_id;
+}
+
+/*****************************************************************************/
+
+static gboolean
+verify(NMSetting *setting, NMConnection *connection, GError **error)
+{
+    if (connection) {
+        NMSettingConnection *s_con;
+        const char *         slave_type;
+
+        s_con = nm_connection_get_setting_connection(connection);
+        if (!s_con) {
+            g_set_error(error,
+                        NM_CONNECTION_ERROR,
+                        NM_CONNECTION_ERROR_MISSING_SETTING,
+                        _("missing setting"));
+            g_prefix_error(error, "%s: ", NM_SETTING_CONNECTION_SETTING_NAME);
+            return FALSE;
+        }
+
+        slave_type = nm_setting_connection_get_slave_type(s_con);
+        if (!nm_streq0(slave_type, NM_SETTING_BOND_SETTING_NAME)) {
+            g_set_error(error,
+                        NM_CONNECTION_ERROR,
+                        NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                        _("A connection with a '%s' setting must have the slave-type set to '%s'"),
+                        NM_SETTING_BOND_PORT_SETTING_NAME,
+                        NM_SETTING_BOND_SETTING_NAME);
+            g_prefix_error(error,
+                           "%s.%s: ",
+                           NM_SETTING_CONNECTION_SETTING_NAME,
+                           NM_SETTING_CONNECTION_SLAVE_TYPE);
+            return FALSE;
+        }
+    }
+
+    return TRUE;
+}
+
+/*****************************************************************************/
+
+static void
+nm_setting_bond_port_init(NMSettingBondPort *setting)
+{}
+
+/**
+ * nm_setting_bond_port_new:
+ *
+ * Creates a new #NMSettingBondPort object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingBondPort object
+ *
+ * Since: 1.34
+ **/
+NMSetting *
+nm_setting_bond_port_new(void)
+{
+    return g_object_new(NM_TYPE_SETTING_BOND_PORT, NULL);
+}
+
+static void
+nm_setting_bond_port_class_init(NMSettingBondPortClass *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;
+
+    /**
+     * NMSettingBondPort:queue-id:
+     *
+     * The queue ID of this bond port. The maximum value of queue ID is
+     * the number of TX queues currently active in device.
+     *
+     * Since: 1.34
+     **/
+    /* ---ifcfg-rh---
+     * property: queue-id
+     * variable: BONDING_OPTS: queue-id=
+     * values: 0 - 65535
+     * default: 0
+     * description: Queue ID.
+     * ---end---
+     */
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BOND_PORT_QUEUE_ID,
+                                              PROP_QUEUE_ID,
+                                              0,
+                                              G_MAXUINT16,
+                                              NM_BOND_PORT_QUEUE_ID_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBondPort,
+                                              _priv.queue_id);
+
+    g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties);
+
+    _nm_setting_class_commit(setting_class,
+                             NM_META_SETTING_TYPE_BOND_PORT,
+                             NULL,
+                             properties_override,
+                             0);
+}