about summary refs log tree commit diff
path: root/src/libnmc-setting/nm-meta-setting-desc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libnmc-setting/nm-meta-setting-desc.c')
-rw-r--r--src/libnmc-setting/nm-meta-setting-desc.c86
1 files changed, 41 insertions, 45 deletions
diff --git a/src/libnmc-setting/nm-meta-setting-desc.c b/src/libnmc-setting/nm-meta-setting-desc.c
index 103b844e..2871ccb6 100644
--- a/src/libnmc-setting/nm-meta-setting-desc.c
+++ b/src/libnmc-setting/nm-meta-setting-desc.c
@@ -1073,7 +1073,6 @@ _get_fcn_gobject_enum(ARGS_GET_FCN)
 {
     GType                       gtype       = 0;
     const NMUtilsEnumValueInfo *value_infos = NULL;
-    gboolean                    has_gtype   = FALSE;
     nm_auto_unset_gvalue GValue gval        = G_VALUE_INIT;
     gint64                      v;
     gboolean                    format_numeric             = FALSE;
@@ -1087,13 +1086,6 @@ _get_fcn_gobject_enum(ARGS_GET_FCN)
 
     RETURN_UNSUPPORTED_GET_TYPE();
 
-    if (property_info->property_typ_data) {
-        if (property_info->property_typ_data->subtype.gobject_enum.get_gtype) {
-            gtype     = property_info->property_typ_data->subtype.gobject_enum.get_gtype();
-            has_gtype = TRUE;
-        }
-    }
-
     if (property_info->property_typ_data && get_type == NM_META_ACCESSOR_GET_TYPE_PRETTY
         && NM_FLAGS_ANY(property_info->property_typ_data->typ_flags,
                         NM_META_PROPERTY_TYP_FLAG_ENUM_GET_PRETTY_NUMERIC
@@ -1136,18 +1128,12 @@ _get_fcn_gobject_enum(ARGS_GET_FCN)
 
     nm_assert(format_text || format_numeric);
 
+    gtype = nm_meta_property_enum_get_type(property_info);
+    g_return_val_if_fail(gtype != G_TYPE_INVALID, NULL);
+
     pspec = g_object_class_find_property(G_OBJECT_GET_CLASS(setting), property_info->property_name);
     g_return_val_if_fail(pspec, NULL);
 
-    if (has_gtype) {
-        /* if the property is already enum, don't set get_gtype: it's redundant and error prone */
-        g_return_val_if_fail(NM_IN_SET(pspec->value_type, G_TYPE_INT, G_TYPE_UINT), FALSE);
-    } else {
-        gtype = pspec->value_type;
-    }
-
-    g_return_val_if_fail(G_TYPE_IS_ENUM(gtype) || G_TYPE_IS_FLAGS(gtype), NULL);
-
     g_value_init(&gval, pspec->value_type);
     g_object_get_property(G_OBJECT(setting), property_info->property_name, &gval);
     NM_SET_OUT(out_is_default, g_param_value_defaults(pspec, &gval));
@@ -1255,17 +1241,19 @@ nm_meta_property_int_get_range(const NMMetaPropertyInfo *property_info,
 GType
 nm_meta_property_enum_get_type(const NMMetaPropertyInfo *property_info)
 {
-    GType gtype = _property_get_spec(property_info)->value_type;
+    GType setting_gtype = property_info->setting_info->general->get_setting_gtype();
+    GType prop_gtype =
+        nm_setting_get_enum_property_type(setting_gtype, property_info->property_name);
 
     if (property_info->property_typ_data
         && property_info->property_typ_data->subtype.gobject_enum.get_gtype) {
         /* if the property is already enum, don't set get_gtype: it's redundant and error prone */
-        g_return_val_if_fail(NM_IN_SET(gtype, G_TYPE_INT, G_TYPE_UINT), G_TYPE_INVALID);
+        g_return_val_if_fail(prop_gtype == G_TYPE_INVALID, G_TYPE_INVALID);
         return property_info->property_typ_data->subtype.gobject_enum.get_gtype();
     }
 
-    g_return_val_if_fail(G_TYPE_IS_ENUM(gtype) || G_TYPE_IS_FLAGS(gtype), G_TYPE_INVALID);
-    return gtype;
+    g_return_val_if_fail(G_TYPE_IS_ENUM(prop_gtype) || G_TYPE_IS_FLAGS(prop_gtype), G_TYPE_INVALID);
+    return prop_gtype;
 }
 
 /**
@@ -1579,33 +1567,18 @@ _set_fcn_gobject_mac(ARGS_SET_FCN)
 static gboolean
 _set_fcn_gobject_enum(ARGS_SET_FCN)
 {
-    GType                       gtype = 0;
-    GType                       gtype_prop;
-    gboolean                    has_gtype = FALSE;
-    nm_auto_unset_gvalue GValue gval      = G_VALUE_INIT;
+    GType                       gtype;
+    GType                       gtype_gobj;
+    nm_auto_unset_gvalue GValue gval = G_VALUE_INIT;
     gboolean                    is_flags;
     int                         v;
 
     if (_SET_FCN_DO_RESET_DEFAULT_WITH_SUPPORTS_REMOVE(property_info, modifier, value))
         return _gobject_property_reset_default(setting, property_info->property_name);
 
-    if (property_info->property_typ_data) {
-        if (property_info->property_typ_data->subtype.gobject_enum.get_gtype) {
-            gtype     = property_info->property_typ_data->subtype.gobject_enum.get_gtype();
-            has_gtype = TRUE;
-        }
-    }
-
-    gtype_prop = _gobject_property_get_gtype(G_OBJECT(setting), property_info->property_name);
-
-    if (has_gtype) {
-        /* if the property is already enum, don't set get_gtype: it's redundant and error prone */
-        g_return_val_if_fail(NM_IN_SET(gtype_prop, G_TYPE_INT, G_TYPE_UINT), FALSE);
-    } else {
-        gtype = gtype_prop;
-    }
+    gtype = nm_meta_property_enum_get_type(property_info);
+    g_return_val_if_fail(gtype != G_TYPE_INVALID, FALSE);
 
-    g_return_val_if_fail(G_TYPE_IS_FLAGS(gtype) || G_TYPE_IS_ENUM(gtype), FALSE);
     is_flags = G_TYPE_IS_FLAGS(gtype);
 
     if (!_nm_utils_enum_from_str_full(
@@ -1641,10 +1614,12 @@ _set_fcn_gobject_enum(ARGS_SET_FCN)
             v = (int) (v_flag | ((guint) v));
     }
 
-    g_value_init(&gval, gtype_prop);
-    if (gtype_prop == G_TYPE_INT)
+    gtype_gobj = _gobject_property_get_gtype(G_OBJECT(setting), property_info->property_name);
+
+    g_value_init(&gval, gtype_gobj);
+    if (gtype_gobj == G_TYPE_INT)
         g_value_set_int(&gval, v);
-    else if (gtype_prop == G_TYPE_UINT)
+    else if (gtype_gobj == G_TYPE_UINT)
         g_value_set_uint(&gval, v);
     else if (is_flags)
         g_value_set_flags(&gval, v);
@@ -6011,6 +5986,15 @@ static const NMMetaPropertyInfo *const property_infos_ETHTOOL[] = {
 };
 
 #undef  _CURRENT_NM_META_SETTING_TYPE
+#define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_GENERIC
+static const NMMetaPropertyInfo *const property_infos_GENERIC[] = {
+    PROPERTY_INFO_WITH_DESC (NM_SETTING_GENERIC_DEVICE_HANDLER,
+        .property_type =                &_pt_gobject_string,
+    ),
+    NULL
+};
+
+#undef  _CURRENT_NM_META_SETTING_TYPE
 #define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_GSM
 static const NMMetaPropertyInfo *const property_infos_GSM[] = {
     PROPERTY_INFO_WITH_DESC (NM_SETTING_GSM_AUTO_CONFIG,
@@ -6934,6 +6918,9 @@ static const NMMetaPropertyInfo *const property_infos_MACSEC[] = {
     PROPERTY_INFO_WITH_DESC (NM_SETTING_MACSEC_SEND_SCI,
         .property_type =                &_pt_gobject_bool,
     ),
+    PROPERTY_INFO_WITH_DESC (NM_SETTING_MACSEC_OFFLOAD,
+        .property_type =                &_pt_gobject_enum,
+    ),
     NULL
 };
 
@@ -7388,6 +7375,15 @@ static const NMMetaPropertyInfo *const property_infos_SRIOV[] = {
     PROPERTY_INFO_WITH_DESC (NM_SETTING_SRIOV_AUTOPROBE_DRIVERS,
         .property_type =                &_pt_gobject_ternary,
     ),
+    PROPERTY_INFO_WITH_DESC (NM_SETTING_SRIOV_ESWITCH_MODE,
+        .property_type =                &_pt_gobject_enum,
+    ),
+    PROPERTY_INFO_WITH_DESC (NM_SETTING_SRIOV_ESWITCH_INLINE_MODE,
+        .property_type =                &_pt_gobject_enum,
+    ),
+    PROPERTY_INFO_WITH_DESC (NM_SETTING_SRIOV_ESWITCH_ENCAP_MODE,
+        .property_type =                &_pt_gobject_enum,
+    ),
     NULL
 };
 
@@ -8795,7 +8791,7 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = {
             NM_META_SETTING_VALID_PART_ITEM (ETHTOOL,               FALSE),
         ),
     ),
-    SETTING_INFO_EMPTY (GENERIC,
+    SETTING_INFO (GENERIC,
         .valid_parts = NM_META_SETTING_VALID_PARTS (
             NM_META_SETTING_VALID_PART_ITEM (CONNECTION,            TRUE),
             NM_META_SETTING_VALID_PART_ITEM (GENERIC,               TRUE),