summary refs log tree commit diff
path: root/src/libnm-core-impl/nm-setting-ovs-dpdk.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2023-02-10 11:50:34 +0100
committerMichael Biebl <biebl@debian.org>2023-02-10 11:50:34 +0100
commit1372848511cb896b80b51ed1a3e9606bd9816631 (patch)
tree674792b9385bdef935988894b45f06b2af39f88c /src/libnm-core-impl/nm-setting-ovs-dpdk.c
parent40ec077ea305994c1fc2130add6787ca0c73e2c6 (diff)
New upstream version 1.42.0 upstream/1.42.0
Diffstat (limited to 'src/libnm-core-impl/nm-setting-ovs-dpdk.c')
-rw-r--r--src/libnm-core-impl/nm-setting-ovs-dpdk.c116
1 files changed, 115 insertions, 1 deletions
diff --git a/src/libnm-core-impl/nm-setting-ovs-dpdk.c b/src/libnm-core-impl/nm-setting-ovs-dpdk.c
index e26f918b..87e9a3e8 100644
--- a/src/libnm-core-impl/nm-setting-ovs-dpdk.c
+++ b/src/libnm-core-impl/nm-setting-ovs-dpdk.c
@@ -22,7 +22,7 @@
 
 /*****************************************************************************/
 
-NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_DEVARGS, PROP_N_RXQ, );
+NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_DEVARGS, PROP_N_RXQ, PROP_N_RXQ_DESC, PROP_N_TXQ_DESC, );
 
 /**
  * NMSettingOvsDpdk:
@@ -34,6 +34,8 @@ struct _NMSettingOvsDpdk {
 
     char   *devargs;
     guint32 n_rxq;
+    guint32 n_rxq_desc;
+    guint32 n_txq_desc;
 };
 
 struct _NMSettingOvsDpdkClass {
@@ -76,6 +78,72 @@ nm_setting_ovs_dpdk_get_n_rxq(NMSettingOvsDpdk *self)
     return self->n_rxq;
 }
 
+/**
+ * nm_setting_ovs_dpdk_get_n_rxq_desc:
+ * @self: the #NMSettingOvsDpdk
+ *
+ * Returns: the #NMSettingOvsDpdk:n-rxq-desc property of the setting
+ *
+ * Since: 1.42
+ **/
+guint32
+nm_setting_ovs_dpdk_get_n_rxq_desc(NMSettingOvsDpdk *self)
+{
+    g_return_val_if_fail(NM_IS_SETTING_OVS_DPDK(self), 0);
+
+    return self->n_rxq_desc;
+}
+
+/**
+ * nm_setting_ovs_dpdk_get_n_txq_desc:
+ * @self: the #NMSettingOvsDpdk
+ *
+ * Returns: the #NMSettingOvsDpdk:n-txq-desc property of the setting
+ *
+ * Since: 1.42
+ **/
+guint32
+nm_setting_ovs_dpdk_get_n_txq_desc(NMSettingOvsDpdk *self)
+{
+    g_return_val_if_fail(NM_IS_SETTING_OVS_DPDK(self), 0);
+
+    return self->n_txq_desc;
+}
+
+/*****************************************************************************/
+
+static gboolean
+verify(NMSetting *setting, NMConnection *connection, GError **error)
+{
+    NMSettingOvsDpdk *self = NM_SETTING_OVS_DPDK(setting);
+
+    if (self->n_rxq_desc != 0 && !nm_utils_is_power_of_two(self->n_rxq_desc)) {
+        g_set_error(error,
+                    NM_CONNECTION_ERROR,
+                    NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                    _("must be a power of two"));
+        g_prefix_error(error,
+                       "%s.%s: ",
+                       NM_SETTING_OVS_DPDK_SETTING_NAME,
+                       NM_SETTING_OVS_DPDK_N_RXQ_DESC);
+        return FALSE;
+    }
+
+    if (self->n_txq_desc != 0 && !nm_utils_is_power_of_two(self->n_txq_desc)) {
+        g_set_error(error,
+                    NM_CONNECTION_ERROR,
+                    NM_CONNECTION_ERROR_INVALID_PROPERTY,
+                    _("must be a power of two"));
+        g_prefix_error(error,
+                       "%s.%s: ",
+                       NM_SETTING_OVS_DPDK_SETTING_NAME,
+                       NM_SETTING_OVS_DPDK_N_TXQ_DESC);
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
 /*****************************************************************************/
 
 static void
@@ -107,6 +175,8 @@ nm_setting_ovs_dpdk_class_init(NMSettingOvsDpdkClass *klass)
     object_class->get_property = _nm_setting_property_get_property_direct;
     object_class->set_property = _nm_setting_property_set_property_direct;
 
+    setting_class->verify = verify;
+
     /**
      * NMSettingOvsDpdk:devargs:
      *
@@ -142,6 +212,50 @@ nm_setting_ovs_dpdk_class_init(NMSettingOvsDpdkClass *klass)
                                               NMSettingOvsDpdk,
                                               n_rxq);
 
+    /**
+     * NMSettingOvsDpdk:n-rxq-desc:
+     *
+     * The rx queue size (number of rx descriptors) for DPDK ports.
+     * Must be zero or a power of 2 between 1 and 4096, and supported
+     * by the hardware. Defaults to zero which means to leave the
+     * parameter in OVS unspecified and effectively configures 2048
+     * descriptors.
+     *
+     * Since: 1.42
+     **/
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_OVS_DPDK_N_RXQ_DESC,
+                                              PROP_N_RXQ_DESC,
+                                              0,
+                                              4096,
+                                              0,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingOvsDpdk,
+                                              n_rxq_desc);
+
+    /**
+     * NMSettingOvsDpdk:n-txq-desc:
+     *
+     * The tx queue size (number of tx descriptors) for DPDK ports.
+     * Must be zero or a power of 2 between 1 and 4096, and supported
+     * by the hardware. Defaults to zero which means to leave the
+     * parameter in OVS unspecified and effectively configures 2048
+     * descriptors.
+     *
+     * Since: 1.42
+     **/
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_OVS_DPDK_N_TXQ_DESC,
+                                              PROP_N_TXQ_DESC,
+                                              0,
+                                              4096,
+                                              0,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingOvsDpdk,
+                                              n_txq_desc);
+
     g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties);
 
     _nm_setting_class_commit(setting_class,