summary refs log tree commit diff
path: root/src/libnm-core-impl/nm-setting-bridge.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-bridge.c
parente74c568b07b50b97873fb4ee1d776dedefbd54d6 (diff)
New upstream version 1.34.0 upstream/1.34.0
Diffstat (limited to 'src/libnm-core-impl/nm-setting-bridge.c')
-rw-r--r--src/libnm-core-impl/nm-setting-bridge.c713
1 files changed, 272 insertions, 441 deletions
diff --git a/src/libnm-core-impl/nm-setting-bridge.c b/src/libnm-core-impl/nm-setting-bridge.c
index e987310f..9045d619 100644
--- a/src/libnm-core-impl/nm-setting-bridge.c
+++ b/src/libnm-core-impl/nm-setting-bridge.c
@@ -71,18 +71,18 @@ typedef struct {
     guint32    multicast_hash_max;
     guint32    multicast_last_member_count;
     guint32    multicast_startup_query_count;
-    guint16    priority;
-    guint16    forward_delay;
-    guint16    hello_time;
-    guint16    max_age;
-    guint16    vlan_default_pvid;
-    guint16    group_forward_mask;
-    bool       multicast_snooping : 1;
-    bool       vlan_filtering : 1;
-    bool       stp : 1;
-    bool       vlan_stats_enabled : 1;
-    bool       multicast_query_use_ifaddr : 1;
-    bool       multicast_querier : 1;
+    guint32    priority;
+    guint32    forward_delay;
+    guint32    hello_time;
+    guint32    max_age;
+    guint32    group_forward_mask;
+    guint32    vlan_default_pvid;
+    bool       stp;
+    bool       multicast_snooping;
+    bool       vlan_filtering;
+    bool       vlan_stats_enabled;
+    bool       multicast_query_use_ifaddr;
+    bool       multicast_querier;
 } NMSettingBridgePrivate;
 
 /**
@@ -1231,7 +1231,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
                      error))
         return FALSE;
 
-    if (priv->group_forward_mask & 7) {
+    if (priv->group_forward_mask & 7u) {
         g_set_error_literal(error,
                             NM_CONNECTION_ERROR,
                             NM_CONNECTION_ERROR_INVALID_PROPERTY,
@@ -1315,35 +1315,13 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
 }
 
 static NMTernary
-compare_property(const NMSettInfoSetting *sett_info,
-                 guint                    property_idx,
-                 NMConnection *           con_a,
-                 NMSetting *              set_a,
-                 NMConnection *           con_b,
-                 NMSetting *              set_b,
-                 NMSettingCompareFlags    flags)
+compare_fcn_vlans(_NM_SETT_INFO_PROP_COMPARE_FCN_ARGS _nm_nil)
 {
-    NMSettingBridgePrivate *priv_a;
-    NMSettingBridgePrivate *priv_b;
-    guint                   i;
-
-    if (nm_streq(sett_info->property_infos[property_idx].name, NM_SETTING_BRIDGE_VLANS)) {
-        if (set_b) {
-            priv_a = NM_SETTING_BRIDGE_GET_PRIVATE(set_a);
-            priv_b = NM_SETTING_BRIDGE_GET_PRIVATE(set_b);
-
-            if (priv_a->vlans->len != priv_b->vlans->len)
-                return FALSE;
-            for (i = 0; i < priv_a->vlans->len; i++) {
-                if (nm_bridge_vlan_cmp(priv_a->vlans->pdata[i], priv_b->vlans->pdata[i]))
-                    return FALSE;
-            }
-        }
-        return TRUE;
+    if (set_b) {
+        return _nm_utils_bridge_compare_vlans(NM_SETTING_BRIDGE_GET_PRIVATE(set_a)->vlans,
+                                              NM_SETTING_BRIDGE_GET_PRIVATE(set_b)->vlans);
     }
-
-    return NM_SETTING_CLASS(nm_setting_bridge_parent_class)
-        ->compare_property(sett_info, property_idx, con_a, set_a, con_b, set_b, flags);
+    return TRUE;
 }
 
 /*****************************************************************************/
@@ -1351,88 +1329,9 @@ compare_property(const NMSettInfoSetting *sett_info,
 static void
 get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
-    NMSettingBridgePrivate *priv    = NM_SETTING_BRIDGE_GET_PRIVATE(object);
-    NMSettingBridge *       setting = NM_SETTING_BRIDGE(object);
+    NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE(object);
 
     switch (prop_id) {
-    case PROP_MAC_ADDRESS:
-        g_value_set_string(value, nm_setting_bridge_get_mac_address(setting));
-        break;
-    case PROP_STP:
-        g_value_set_boolean(value, priv->stp);
-        break;
-    case PROP_PRIORITY:
-        g_value_set_uint(value, priv->priority);
-        break;
-    case PROP_FORWARD_DELAY:
-        g_value_set_uint(value, priv->forward_delay);
-        break;
-    case PROP_HELLO_TIME:
-        g_value_set_uint(value, priv->hello_time);
-        break;
-    case PROP_MAX_AGE:
-        g_value_set_uint(value, priv->max_age);
-        break;
-    case PROP_AGEING_TIME:
-        g_value_set_uint(value, priv->ageing_time);
-        break;
-    case PROP_GROUP_ADDRESS:
-        g_value_set_string(value, priv->group_address);
-        break;
-    case PROP_GROUP_FORWARD_MASK:
-        g_value_set_uint(value, priv->group_forward_mask);
-        break;
-    case PROP_MULTICAST_HASH_MAX:
-        g_value_set_uint(value, priv->multicast_hash_max);
-        break;
-    case PROP_MULTICAST_LAST_MEMBER_COUNT:
-        g_value_set_uint(value, priv->multicast_last_member_count);
-        break;
-    case PROP_MULTICAST_LAST_MEMBER_INTERVAL:
-        g_value_set_uint64(value, priv->multicast_last_member_interval);
-        break;
-    case PROP_MULTICAST_MEMBERSHIP_INTERVAL:
-        g_value_set_uint64(value, priv->multicast_membership_interval);
-        break;
-    case PROP_MULTICAST_SNOOPING:
-        g_value_set_boolean(value, priv->multicast_snooping);
-        break;
-    case PROP_MULTICAST_ROUTER:
-        g_value_set_string(value, priv->multicast_router);
-        break;
-    case PROP_MULTICAST_QUERIER:
-        g_value_set_boolean(value, priv->multicast_querier);
-        break;
-    case PROP_MULTICAST_QUERIER_INTERVAL:
-        g_value_set_uint64(value, priv->multicast_querier_interval);
-        break;
-    case PROP_MULTICAST_QUERY_INTERVAL:
-        g_value_set_uint64(value, priv->multicast_query_interval);
-        break;
-    case PROP_MULTICAST_QUERY_RESPONSE_INTERVAL:
-        g_value_set_uint64(value, priv->multicast_query_response_interval);
-        break;
-    case PROP_MULTICAST_QUERY_USE_IFADDR:
-        g_value_set_boolean(value, priv->multicast_query_use_ifaddr);
-        break;
-    case PROP_MULTICAST_STARTUP_QUERY_COUNT:
-        g_value_set_uint(value, priv->multicast_startup_query_count);
-        break;
-    case PROP_MULTICAST_STARTUP_QUERY_INTERVAL:
-        g_value_set_uint64(value, priv->multicast_startup_query_interval);
-        break;
-    case PROP_VLAN_FILTERING:
-        g_value_set_boolean(value, priv->vlan_filtering);
-        break;
-    case PROP_VLAN_DEFAULT_PVID:
-        g_value_set_uint(value, priv->vlan_default_pvid);
-        break;
-    case PROP_VLAN_PROTOCOL:
-        g_value_set_string(value, priv->vlan_protocol);
-        break;
-    case PROP_VLAN_STATS_ENABLED:
-        g_value_set_boolean(value, priv->vlan_stats_enabled);
-        break;
     case PROP_VLANS:
         g_value_take_boxed(value,
                            _nm_utils_copy_array(priv->vlans,
@@ -1440,7 +1339,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
                                                 (GDestroyNotify) nm_bridge_vlan_unref));
         break;
     default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+        _nm_setting_property_get_property_direct(object, prop_id, value, pspec);
         break;
     }
 }
@@ -1451,90 +1350,6 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps
     NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE(object);
 
     switch (prop_id) {
-    case PROP_MAC_ADDRESS:
-        g_free(priv->mac_address);
-        priv->mac_address =
-            _nm_utils_hwaddr_canonical_or_invalid(g_value_get_string(value), ETH_ALEN);
-        break;
-    case PROP_STP:
-        priv->stp = g_value_get_boolean(value);
-        break;
-    case PROP_PRIORITY:
-        priv->priority = (guint16) g_value_get_uint(value);
-        break;
-    case PROP_FORWARD_DELAY:
-        priv->forward_delay = (guint16) g_value_get_uint(value);
-        break;
-    case PROP_HELLO_TIME:
-        priv->hello_time = (guint16) g_value_get_uint(value);
-        break;
-    case PROP_MAX_AGE:
-        priv->max_age = (guint16) g_value_get_uint(value);
-        break;
-    case PROP_AGEING_TIME:
-        priv->ageing_time = g_value_get_uint(value);
-        break;
-    case PROP_GROUP_ADDRESS:
-        g_free(priv->group_address);
-        priv->group_address =
-            _nm_utils_hwaddr_canonical_or_invalid(g_value_get_string(value), ETH_ALEN);
-        break;
-    case PROP_GROUP_FORWARD_MASK:
-        priv->group_forward_mask = (guint16) g_value_get_uint(value);
-        break;
-    case PROP_MULTICAST_HASH_MAX:
-        priv->multicast_hash_max = g_value_get_uint(value);
-        break;
-    case PROP_MULTICAST_LAST_MEMBER_COUNT:
-        priv->multicast_last_member_count = g_value_get_uint(value);
-        break;
-    case PROP_MULTICAST_LAST_MEMBER_INTERVAL:
-        priv->multicast_last_member_interval = g_value_get_uint64(value);
-        break;
-    case PROP_MULTICAST_MEMBERSHIP_INTERVAL:
-        priv->multicast_membership_interval = g_value_get_uint64(value);
-        break;
-    case PROP_MULTICAST_SNOOPING:
-        priv->multicast_snooping = g_value_get_boolean(value);
-        break;
-    case PROP_MULTICAST_ROUTER:
-        g_free(priv->multicast_router);
-        priv->multicast_router = g_value_dup_string(value);
-        break;
-    case PROP_MULTICAST_QUERIER:
-        priv->multicast_querier = g_value_get_boolean(value);
-        break;
-    case PROP_MULTICAST_QUERIER_INTERVAL:
-        priv->multicast_querier_interval = g_value_get_uint64(value);
-        break;
-    case PROP_MULTICAST_QUERY_INTERVAL:
-        priv->multicast_query_interval = g_value_get_uint64(value);
-        break;
-    case PROP_MULTICAST_QUERY_RESPONSE_INTERVAL:
-        priv->multicast_query_response_interval = g_value_get_uint64(value);
-        break;
-    case PROP_MULTICAST_QUERY_USE_IFADDR:
-        priv->multicast_query_use_ifaddr = g_value_get_boolean(value);
-        break;
-    case PROP_MULTICAST_STARTUP_QUERY_COUNT:
-        priv->multicast_startup_query_count = g_value_get_uint(value);
-        break;
-    case PROP_MULTICAST_STARTUP_QUERY_INTERVAL:
-        priv->multicast_startup_query_interval = g_value_get_uint64(value);
-        break;
-    case PROP_VLAN_FILTERING:
-        priv->vlan_filtering = g_value_get_boolean(value);
-        break;
-    case PROP_VLAN_DEFAULT_PVID:
-        priv->vlan_default_pvid = g_value_get_uint(value);
-        break;
-    case PROP_VLAN_PROTOCOL:
-        g_free(priv->vlan_protocol);
-        priv->vlan_protocol = g_value_dup_string(value);
-        break;
-    case PROP_VLAN_STATS_ENABLED:
-        priv->vlan_stats_enabled = g_value_get_boolean(value);
-        break;
     case PROP_VLANS:
         g_ptr_array_unref(priv->vlans);
         priv->vlans = _nm_utils_copy_array(g_value_get_boxed(value),
@@ -1542,7 +1357,7 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps
                                            (GDestroyNotify) nm_bridge_vlan_unref);
         break;
     default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+        _nm_setting_property_set_property_direct(object, prop_id, value, pspec);
         break;
     }
 }
@@ -1555,28 +1370,6 @@ nm_setting_bridge_init(NMSettingBridge *setting)
     NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE(setting);
 
     priv->vlans = g_ptr_array_new_with_free_func((GDestroyNotify) nm_bridge_vlan_unref);
-
-    priv->ageing_time                       = NM_BRIDGE_AGEING_TIME_DEF;
-    priv->forward_delay                     = NM_BRIDGE_FORWARD_DELAY_DEF;
-    priv->hello_time                        = NM_BRIDGE_HELLO_TIME_DEF;
-    priv->max_age                           = NM_BRIDGE_MAX_AGE_DEF;
-    priv->multicast_last_member_count       = NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF;
-    priv->multicast_last_member_interval    = NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEF;
-    priv->multicast_membership_interval     = NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEF;
-    priv->multicast_hash_max                = NM_BRIDGE_MULTICAST_HASH_MAX_DEF;
-    priv->multicast_snooping                = NM_BRIDGE_MULTICAST_SNOOPING_DEF;
-    priv->priority                          = NM_BRIDGE_PRIORITY_DEF;
-    priv->stp                               = NM_BRIDGE_STP_DEF;
-    priv->vlan_default_pvid                 = NM_BRIDGE_VLAN_DEFAULT_PVID_DEF;
-    priv->multicast_query_interval          = NM_BRIDGE_MULTICAST_QUERY_INTERVAL_DEF;
-    priv->multicast_query_response_interval = NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_DEF;
-    priv->multicast_querier_interval        = NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_DEF;
-    priv->multicast_startup_query_count     = NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEF;
-    priv->multicast_startup_query_interval  = NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEF;
-
-    nm_assert(priv->multicast_querier == NM_BRIDGE_MULTICAST_QUERIER_DEF);
-    nm_assert(priv->multicast_query_use_ifaddr == NM_BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEF);
-    nm_assert(priv->vlan_stats_enabled == NM_BRIDGE_VLAN_STATS_ENABLED_DEF);
 }
 
 /**
@@ -1597,10 +1390,6 @@ finalize(GObject *object)
 {
     NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE(object);
 
-    g_free(priv->mac_address);
-    g_free(priv->multicast_router);
-    g_free(priv->group_address);
-    g_free(priv->vlan_protocol);
     g_ptr_array_unref(priv->vlans);
 
     G_OBJECT_CLASS(nm_setting_bridge_parent_class)->finalize(object);
@@ -1617,8 +1406,7 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
     object_class->set_property = set_property;
     object_class->finalize     = finalize;
 
-    setting_class->compare_property = compare_property;
-    setting_class->verify           = verify;
+    setting_class->verify = verify;
 
     /**
      * NMSettingBridge:mac-address:
@@ -1650,15 +1438,14 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *   BRIDGE_MACADDR for bridges is an NM extension.
      * ---end---
      */
-    obj_properties[PROP_MAC_ADDRESS] = g_param_spec_string(
-        NM_SETTING_BRIDGE_MAC_ADDRESS,
-        "",
-        "",
-        NULL,
-        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
-    _nm_properties_override_gobj(properties_override,
-                                 obj_properties[PROP_MAC_ADDRESS],
-                                 &nm_sett_info_propert_type_mac_address);
+    _nm_setting_property_define_direct_mac_address(properties_override,
+                                                   obj_properties,
+                                                   NM_SETTING_BRIDGE_MAC_ADDRESS,
+                                                   PROP_MAC_ADDRESS,
+                                                   NM_SETTING_PARAM_INFERRABLE,
+                                                   NMSettingBridgePrivate,
+                                                   mac_address,
+                                                   .direct_set_string_mac_address_len = ETH_ALEN);
 
     /**
      * NMSettingBridge:stp:
@@ -1672,13 +1459,14 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      * description: Span tree protocol participation.
      * ---end---
      */
-    _nm_setting_property_define_boolean(properties_override,
-                                        obj_properties,
-                                        NM_SETTING_BRIDGE_STP,
-                                        PROP_STP,
-                                        NM_BRIDGE_STP_DEF,
-                                        NM_SETTING_PARAM_INFERRABLE,
-                                        nm_setting_bridge_get_stp);
+    _nm_setting_property_define_direct_boolean(properties_override,
+                                               obj_properties,
+                                               NM_SETTING_BRIDGE_STP,
+                                               PROP_STP,
+                                               NM_BRIDGE_STP_DEF,
+                                               NM_SETTING_PARAM_INFERRABLE,
+                                               NMSettingBridgePrivate,
+                                               stp);
 
     /**
      * NMSettingBridge:priority:
@@ -1695,14 +1483,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      * description: STP priority.
      * ---end---
      */
-    obj_properties[PROP_PRIORITY] =
-        g_param_spec_uint(NM_SETTING_BRIDGE_PRIORITY,
-                          "",
-                          "",
-                          NM_BRIDGE_PRIORITY_MIN,
-                          NM_BRIDGE_PRIORITY_MAX,
-                          NM_BRIDGE_PRIORITY_DEF,
-                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_PRIORITY,
+                                              PROP_PRIORITY,
+                                              NM_BRIDGE_PRIORITY_MIN,
+                                              NM_BRIDGE_PRIORITY_MAX,
+                                              NM_BRIDGE_PRIORITY_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              priority);
 
     /**
      * NMSettingBridge:forward-delay:
@@ -1717,14 +1507,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      * description: STP forwarding delay.
      * ---end---
      */
-    obj_properties[PROP_FORWARD_DELAY] =
-        g_param_spec_uint(NM_SETTING_BRIDGE_FORWARD_DELAY,
-                          "",
-                          "",
-                          0,
-                          NM_BRIDGE_FORWARD_DELAY_MAX,
-                          NM_BRIDGE_FORWARD_DELAY_DEF,
-                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_FORWARD_DELAY,
+                                              PROP_FORWARD_DELAY,
+                                              0,
+                                              NM_BRIDGE_FORWARD_DELAY_MAX,
+                                              NM_BRIDGE_FORWARD_DELAY_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              forward_delay);
 
     /**
      * NMSettingBridge:hello-time:
@@ -1739,14 +1531,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      * description: STP hello time.
      * ---end---
      */
-    obj_properties[PROP_HELLO_TIME] =
-        g_param_spec_uint(NM_SETTING_BRIDGE_HELLO_TIME,
-                          "",
-                          "",
-                          0,
-                          NM_BRIDGE_HELLO_TIME_MAX,
-                          NM_BRIDGE_HELLO_TIME_DEF,
-                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_HELLO_TIME,
+                                              PROP_HELLO_TIME,
+                                              0,
+                                              NM_BRIDGE_HELLO_TIME_MAX,
+                                              NM_BRIDGE_HELLO_TIME_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              hello_time);
 
     /**
      * NMSettingBridge:max-age:
@@ -1761,14 +1555,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      * description: STP maximum message age.
      * ---end---
      */
-    obj_properties[PROP_MAX_AGE] =
-        g_param_spec_uint(NM_SETTING_BRIDGE_MAX_AGE,
-                          "",
-                          "",
-                          0,
-                          NM_BRIDGE_MAX_AGE_MAX,
-                          NM_BRIDGE_MAX_AGE_DEF,
-                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_MAX_AGE,
+                                              PROP_MAX_AGE,
+                                              0,
+                                              NM_BRIDGE_MAX_AGE_MAX,
+                                              NM_BRIDGE_MAX_AGE_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              max_age);
 
     /**
      * NMSettingBridge:ageing-time:
@@ -1783,14 +1579,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      * description: Ethernet MAC ageing time.
      * ---end---
      */
-    obj_properties[PROP_AGEING_TIME] =
-        g_param_spec_uint(NM_SETTING_BRIDGE_AGEING_TIME,
-                          "",
-                          "",
-                          NM_BRIDGE_AGEING_TIME_MIN,
-                          NM_BRIDGE_AGEING_TIME_MAX,
-                          NM_BRIDGE_AGEING_TIME_DEF,
-                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_AGEING_TIME,
+                                              PROP_AGEING_TIME,
+                                              NM_BRIDGE_AGEING_TIME_MIN,
+                                              NM_BRIDGE_AGEING_TIME_MAX,
+                                              NM_BRIDGE_AGEING_TIME_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              ageing_time);
 
     /**
      * NMSettingBridge:group-forward-mask:
@@ -1804,14 +1602,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.10
      **/
-    obj_properties[PROP_GROUP_FORWARD_MASK] =
-        g_param_spec_uint(NM_SETTING_BRIDGE_GROUP_FORWARD_MASK,
-                          "",
-                          "",
-                          0,
-                          0xFFFF,
-                          0,
-                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_GROUP_FORWARD_MASK,
+                                              PROP_GROUP_FORWARD_MASK,
+                                              0,
+                                              0xFFFF,
+                                              0,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              group_forward_mask);
 
     /**
      * NMSettingBridge:multicast-snooping:
@@ -1831,13 +1631,14 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      * description: IGMP snooping support.
      * ---end---
      */
-    _nm_setting_property_define_boolean(properties_override,
-                                        obj_properties,
-                                        NM_SETTING_BRIDGE_MULTICAST_SNOOPING,
-                                        PROP_MULTICAST_SNOOPING,
-                                        NM_BRIDGE_MULTICAST_SNOOPING_DEF,
-                                        NM_SETTING_PARAM_INFERRABLE,
-                                        nm_setting_bridge_get_multicast_snooping);
+    _nm_setting_property_define_direct_boolean(properties_override,
+                                               obj_properties,
+                                               NM_SETTING_BRIDGE_MULTICAST_SNOOPING,
+                                               PROP_MULTICAST_SNOOPING,
+                                               NM_BRIDGE_MULTICAST_SNOOPING_DEF,
+                                               NM_SETTING_PARAM_INFERRABLE,
+                                               NMSettingBridgePrivate,
+                                               multicast_snooping);
 
     /**
      * NMSettingBridge:vlan-filtering:
@@ -1854,13 +1655,14 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      * description: VLAN filtering support.
      * ---end---
      */
-    _nm_setting_property_define_boolean(properties_override,
-                                        obj_properties,
-                                        NM_SETTING_BRIDGE_VLAN_FILTERING,
-                                        PROP_VLAN_FILTERING,
-                                        FALSE,
-                                        NM_SETTING_PARAM_INFERRABLE,
-                                        nm_setting_bridge_get_vlan_filtering);
+    _nm_setting_property_define_direct_boolean(properties_override,
+                                               obj_properties,
+                                               NM_SETTING_BRIDGE_VLAN_FILTERING,
+                                               PROP_VLAN_FILTERING,
+                                               FALSE,
+                                               NM_SETTING_PARAM_INFERRABLE,
+                                               NMSettingBridgePrivate,
+                                               vlan_filtering);
 
     /**
      * NMSettingBridge:vlan-default-pvid:
@@ -1878,14 +1680,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      * description: default VLAN PVID.
      * ---end---
      */
-    obj_properties[PROP_VLAN_DEFAULT_PVID] =
-        g_param_spec_uint(NM_SETTING_BRIDGE_VLAN_DEFAULT_PVID,
-                          "",
-                          "",
-                          0,
-                          NM_BRIDGE_VLAN_VID_MAX,
-                          NM_BRIDGE_VLAN_DEFAULT_PVID_DEF,
-                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_VLAN_DEFAULT_PVID,
+                                              PROP_VLAN_DEFAULT_PVID,
+                                              0,
+                                              NM_BRIDGE_VLAN_VID_MAX,
+                                              NM_BRIDGE_VLAN_DEFAULT_PVID_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              vlan_default_pvid);
 
     /**
      * NMSettingBridge:vlans: (type GPtrArray(NMBridgeVlan))
@@ -1917,9 +1721,13 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
                                                     G_TYPE_PTR_ARRAY,
                                                     G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE
                                                         | G_PARAM_STATIC_STRINGS);
-    _nm_properties_override_gobj(properties_override,
-                                 obj_properties[PROP_VLANS],
-                                 &nm_sett_info_propert_type_bridge_vlans);
+    _nm_properties_override_gobj(
+        properties_override,
+        obj_properties[PROP_VLANS],
+        NM_SETT_INFO_PROPERT_TYPE_DBUS(NM_G_VARIANT_TYPE("aa{sv}"),
+                                       .to_dbus_fcn   = _nm_utils_bridge_vlans_to_dbus,
+                                       .compare_fcn   = compare_fcn_vlans,
+                                       .from_dbus_fcn = _nm_utils_bridge_vlans_from_dbus, ));
 
     /* ---dbus---
      * property: interface-name
@@ -1951,15 +1759,14 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      * example: BRIDGING_OPTS="group_address=01:80:C2:00:00:0A"
      * ---end---
      */
-    obj_properties[PROP_GROUP_ADDRESS] = g_param_spec_string(
-        NM_SETTING_BRIDGE_GROUP_ADDRESS,
-        "",
-        "",
-        NULL,
-        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
-    _nm_properties_override_gobj(properties_override,
-                                 obj_properties[PROP_GROUP_ADDRESS],
-                                 &nm_sett_info_propert_type_mac_address);
+    _nm_setting_property_define_direct_mac_address(properties_override,
+                                                   obj_properties,
+                                                   NM_SETTING_BRIDGE_GROUP_ADDRESS,
+                                                   PROP_GROUP_ADDRESS,
+                                                   NM_SETTING_PARAM_INFERRABLE,
+                                                   NMSettingBridgePrivate,
+                                                   group_address,
+                                                   .direct_set_string_mac_address_len = ETH_ALEN);
 
     /**
      * NMSettingBridge:vlan-protocol:
@@ -1980,12 +1787,13 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.24
      */
-    obj_properties[PROP_VLAN_PROTOCOL] = g_param_spec_string(
-        NM_SETTING_BRIDGE_VLAN_PROTOCOL,
-        "",
-        "",
-        NULL,
-        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_string(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_VLAN_PROTOCOL,
+                                              PROP_VLAN_PROTOCOL,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              vlan_protocol);
 
     /**
      * NMSettingBridge:vlan-stats-enabled:
@@ -2001,13 +1809,14 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.24
      */
-    _nm_setting_property_define_boolean(properties_override,
-                                        obj_properties,
-                                        NM_SETTING_BRIDGE_VLAN_STATS_ENABLED,
-                                        PROP_VLAN_STATS_ENABLED,
-                                        NM_BRIDGE_VLAN_STATS_ENABLED_DEF,
-                                        NM_SETTING_PARAM_INFERRABLE,
-                                        nm_setting_bridge_get_vlan_stats_enabled);
+    _nm_setting_property_define_direct_boolean(properties_override,
+                                               obj_properties,
+                                               NM_SETTING_BRIDGE_VLAN_STATS_ENABLED,
+                                               PROP_VLAN_STATS_ENABLED,
+                                               NM_BRIDGE_VLAN_STATS_ENABLED_DEF,
+                                               NM_SETTING_PARAM_INFERRABLE,
+                                               NMSettingBridgePrivate,
+                                               vlan_stats_enabled);
 
     /**
      * NMSettingBridge:multicast-router:
@@ -2029,12 +1838,13 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.24
      */
-    obj_properties[PROP_MULTICAST_ROUTER] = g_param_spec_string(
-        NM_SETTING_BRIDGE_MULTICAST_ROUTER,
-        "",
-        "",
-        NULL,
-        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_string(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_MULTICAST_ROUTER,
+                                              PROP_MULTICAST_ROUTER,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              multicast_router);
 
     /**
      * NMSettingBridge:multicast-query-use-ifaddr:
@@ -2052,13 +1862,14 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.24
      */
-    _nm_setting_property_define_boolean(properties_override,
-                                        obj_properties,
-                                        NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR,
-                                        PROP_MULTICAST_QUERY_USE_IFADDR,
-                                        NM_BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEF,
-                                        NM_SETTING_PARAM_INFERRABLE,
-                                        nm_setting_bridge_get_multicast_query_use_ifaddr);
+    _nm_setting_property_define_direct_boolean(properties_override,
+                                               obj_properties,
+                                               NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR,
+                                               PROP_MULTICAST_QUERY_USE_IFADDR,
+                                               NM_BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEF,
+                                               NM_SETTING_PARAM_INFERRABLE,
+                                               NMSettingBridgePrivate,
+                                               multicast_query_use_ifaddr);
 
     /**
      * NMSettingBridge:multicast-querier:
@@ -2075,13 +1886,14 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.24
      */
-    _nm_setting_property_define_boolean(properties_override,
-                                        obj_properties,
-                                        NM_SETTING_BRIDGE_MULTICAST_QUERIER,
-                                        PROP_MULTICAST_QUERIER,
-                                        NM_BRIDGE_MULTICAST_QUERIER_DEF,
-                                        NM_SETTING_PARAM_INFERRABLE,
-                                        nm_setting_bridge_get_multicast_querier);
+    _nm_setting_property_define_direct_boolean(properties_override,
+                                               obj_properties,
+                                               NM_SETTING_BRIDGE_MULTICAST_QUERIER,
+                                               PROP_MULTICAST_QUERIER,
+                                               NM_BRIDGE_MULTICAST_QUERIER_DEF,
+                                               NM_SETTING_PARAM_INFERRABLE,
+                                               NMSettingBridgePrivate,
+                                               multicast_querier);
 
     /**
      * NMSettingBridge:multicast-hash-max:
@@ -2097,14 +1909,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.26
      */
-    obj_properties[PROP_MULTICAST_HASH_MAX] =
-        g_param_spec_uint(NM_SETTING_BRIDGE_MULTICAST_HASH_MAX,
-                          "",
-                          "",
-                          NM_BRIDGE_MULTICAST_HASH_MAX_MIN,
-                          NM_BRIDGE_MULTICAST_HASH_MAX_MAX,
-                          NM_BRIDGE_MULTICAST_HASH_MAX_DEF,
-                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_MULTICAST_HASH_MAX,
+                                              PROP_MULTICAST_HASH_MAX,
+                                              NM_BRIDGE_MULTICAST_HASH_MAX_MIN,
+                                              NM_BRIDGE_MULTICAST_HASH_MAX_MAX,
+                                              NM_BRIDGE_MULTICAST_HASH_MAX_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              multicast_hash_max);
 
     /**
      * NMSettingBridge:multicast-last-member-count:
@@ -2122,14 +1936,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.26
      */
-    obj_properties[PROP_MULTICAST_LAST_MEMBER_COUNT] =
-        g_param_spec_uint(NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT,
-                          "",
-                          "",
-                          NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_MIN,
-                          NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_MAX,
-                          NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF,
-                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT,
+                                              PROP_MULTICAST_LAST_MEMBER_COUNT,
+                                              NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_MIN,
+                                              NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_MAX,
+                                              NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              multicast_last_member_count);
 
     /**
      * NMSettingBridge:multicast-last-member-interval:
@@ -2146,14 +1962,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.26
      */
-    obj_properties[PROP_MULTICAST_LAST_MEMBER_INTERVAL] = g_param_spec_uint64(
-        NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL,
-        "",
-        "",
-        NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_MIN,
-        NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_MAX,
-        NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEF,
-        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint64(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL,
+                                              PROP_MULTICAST_LAST_MEMBER_INTERVAL,
+                                              NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_MIN,
+                                              NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_MAX,
+                                              NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              multicast_last_member_interval);
 
     /**
      * NMSettingBridge:multicast-membership-interval:
@@ -2171,14 +1989,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.26
      */
-    obj_properties[PROP_MULTICAST_MEMBERSHIP_INTERVAL] = g_param_spec_uint64(
-        NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL,
-        "",
-        "",
-        NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_MIN,
-        NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_MAX,
-        NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEF,
-        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint64(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL,
+                                              PROP_MULTICAST_MEMBERSHIP_INTERVAL,
+                                              NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_MIN,
+                                              NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_MAX,
+                                              NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              multicast_membership_interval);
 
     /**
      * NMSettingBridge:multicast-querier-interval:
@@ -2195,14 +2015,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.26
      */
-    obj_properties[PROP_MULTICAST_QUERIER_INTERVAL] = g_param_spec_uint64(
-        NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL,
-        "",
-        "",
-        NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_MIN,
-        NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_MAX,
-        NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_DEF,
-        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint64(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL,
+                                              PROP_MULTICAST_QUERIER_INTERVAL,
+                                              NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_MIN,
+                                              NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_MAX,
+                                              NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              multicast_querier_interval);
 
     /**
      * NMSettingBridge:multicast-query-interval:
@@ -2219,14 +2041,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.26
      */
-    obj_properties[PROP_MULTICAST_QUERY_INTERVAL] = g_param_spec_uint64(
-        NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL,
-        "",
-        "",
-        NM_BRIDGE_MULTICAST_QUERY_INTERVAL_MIN,
-        NM_BRIDGE_MULTICAST_QUERY_INTERVAL_MAX,
-        NM_BRIDGE_MULTICAST_QUERY_INTERVAL_DEF,
-        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint64(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL,
+                                              PROP_MULTICAST_QUERY_INTERVAL,
+                                              NM_BRIDGE_MULTICAST_QUERY_INTERVAL_MIN,
+                                              NM_BRIDGE_MULTICAST_QUERY_INTERVAL_MAX,
+                                              NM_BRIDGE_MULTICAST_QUERY_INTERVAL_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              multicast_query_interval);
 
     /**
      * NMSettingBridge:multicast-query-response-interval:
@@ -2243,14 +2067,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.26
      */
-    obj_properties[PROP_MULTICAST_QUERY_RESPONSE_INTERVAL] = g_param_spec_uint64(
-        NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL,
-        "",
-        "",
-        NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_MIN,
-        NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_MAX,
-        NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_DEF,
-        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint64(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL,
+                                              PROP_MULTICAST_QUERY_RESPONSE_INTERVAL,
+                                              NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_MIN,
+                                              NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_MAX,
+                                              NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              multicast_query_response_interval);
 
     /**
      * NMSettingBridge:multicast-startup-query-count:
@@ -2266,14 +2092,16 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.26
      */
-    obj_properties[PROP_MULTICAST_STARTUP_QUERY_COUNT] =
-        g_param_spec_uint(NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT,
-                          "",
-                          "",
-                          NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_MIN,
-                          NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_MAX,
-                          NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEF,
-                          G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint32(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT,
+                                              PROP_MULTICAST_STARTUP_QUERY_COUNT,
+                                              NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_MIN,
+                                              NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_MAX,
+                                              NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              multicast_startup_query_count);
 
     /**
      * NMSettingBridge:multicast-startup-query-interval:
@@ -2290,19 +2118,22 @@ nm_setting_bridge_class_init(NMSettingBridgeClass *klass)
      *
      * Since: 1.26
      */
-    obj_properties[PROP_MULTICAST_STARTUP_QUERY_INTERVAL] = g_param_spec_uint64(
-        NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL,
-        "",
-        "",
-        NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_MIN,
-        NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_MAX,
-        NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEF,
-        G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
+    _nm_setting_property_define_direct_uint64(properties_override,
+                                              obj_properties,
+                                              NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL,
+                                              PROP_MULTICAST_STARTUP_QUERY_INTERVAL,
+                                              NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_MIN,
+                                              NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_MAX,
+                                              NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEF,
+                                              NM_SETTING_PARAM_INFERRABLE,
+                                              NMSettingBridgePrivate,
+                                              multicast_startup_query_interval);
 
     g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties);
 
-    _nm_setting_class_commit_full(setting_class,
-                                  NM_META_SETTING_TYPE_BRIDGE,
-                                  NULL,
-                                  properties_override);
+    _nm_setting_class_commit(setting_class,
+                             NM_META_SETTING_TYPE_BRIDGE,
+                             NULL,
+                             properties_override,
+                             G_STRUCT_OFFSET(NMSettingBridge, _priv));
 }