summary refs log tree commit diff
path: root/src/libnm-core-impl
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2022-11-18 17:48:09 +0100
committerMichael Biebl <biebl@debian.org>2022-11-18 17:48:09 +0100
commit913bcb40f6c699f8a38351c69e7ea263fe78f71f (patch)
tree79508469b79e31338d898459da15070e2a62b049 /src/libnm-core-impl
parent9f101839d9e64df832e9e43c5181887369c46a7e (diff)
New upstream version 1.40.4 upstream/1.40.4
Diffstat (limited to 'src/libnm-core-impl')
-rw-r--r--src/libnm-core-impl/nm-connection.c14
-rw-r--r--src/libnm-core-impl/nm-setting-6lowpan.c6
-rw-r--r--src/libnm-core-impl/nm-setting-bridge.c30
-rw-r--r--src/libnm-core-impl/nm-setting-connection.c2
-rw-r--r--src/libnm-core-impl/nm-setting-ethtool.c18
-rw-r--r--src/libnm-core-impl/nm-setting-hostname.c2
-rw-r--r--src/libnm-core-impl/nm-setting-ip-config.c6
-rw-r--r--src/libnm-core-impl/nm-setting-ip-tunnel.c6
-rw-r--r--src/libnm-core-impl/nm-setting-ip4-config.c6
-rw-r--r--src/libnm-core-impl/nm-setting-ovs-bridge.c2
-rw-r--r--src/libnm-core-impl/nm-setting-ovs-external-ids.c2
-rw-r--r--src/libnm-core-impl/nm-setting-sriov.c4
-rw-r--r--src/libnm-core-impl/nm-setting-tc-config.c4
-rw-r--r--src/libnm-core-impl/nm-setting-user.c6
-rw-r--r--src/libnm-core-impl/nm-setting-vpn.c2
-rw-r--r--src/libnm-core-impl/nm-setting-wireguard.c2
-rw-r--r--src/libnm-core-impl/nm-setting-wireless-security.c4
-rw-r--r--src/libnm-core-impl/nm-setting-wpan.c14
-rw-r--r--src/libnm-core-impl/nm-setting.c16
-rw-r--r--src/libnm-core-impl/nm-utils.c18
-rw-r--r--src/libnm-core-impl/nm-vpn-editor-plugin.c12
-rw-r--r--src/libnm-core-impl/nm-vpn-plugin-info.c2
-rw-r--r--src/libnm-core-impl/tests/test-general.c3
23 files changed, 113 insertions, 68 deletions
diff --git a/src/libnm-core-impl/nm-connection.c b/src/libnm-core-impl/nm-connection.c
index aed4be21..2f5bf357 100644
--- a/src/libnm-core-impl/nm-connection.c
+++ b/src/libnm-core-impl/nm-connection.c
@@ -228,8 +228,10 @@ _nm_connection_add_setting(NMConnection *connection, NMSetting *setting)
     priv = NM_CONNECTION_GET_PRIVATE(connection);
 
     s_old = priv->settings[setting_info->meta_type];
-    if (s_old == setting)
+    if (s_old == setting) {
+        g_object_unref(s_old);
         return;
+    }
 
     priv->settings[setting_info->meta_type] = setting;
 
@@ -3487,7 +3489,7 @@ nm_connection_get_setting_olpc_mesh(NMConnection *connection)
  *
  * Returns: (transfer none): an #NMSettingOvsBridge if the connection contains one, otherwise %NULL
  *
- * Since: 1.10
+ * Since: 1.14
  **/
 NMSettingOvsBridge *
 nm_connection_get_setting_ovs_bridge(NMConnection *connection)
@@ -3503,7 +3505,7 @@ nm_connection_get_setting_ovs_bridge(NMConnection *connection)
  *
  * Returns: (transfer none): an #NMSettingOvsInterface if the connection contains one, otherwise %NULL
  *
- * Since: 1.10
+ * Since: 1.14
  **/
 NMSettingOvsInterface *
 nm_connection_get_setting_ovs_interface(NMConnection *connection)
@@ -3520,7 +3522,7 @@ nm_connection_get_setting_ovs_interface(NMConnection *connection)
  *
  * Returns: (transfer none): an #NMSettingOvsPatch if the connection contains one, otherwise %NULL
  *
- * Since: 1.10
+ * Since: 1.14
  **/
 NMSettingOvsPatch *
 nm_connection_get_setting_ovs_patch(NMConnection *connection)
@@ -3536,7 +3538,7 @@ nm_connection_get_setting_ovs_patch(NMConnection *connection)
  *
  * Returns: (transfer none): an #NMSettingOvsPort if the connection contains one, otherwise %NULL
  *
- * Since: 1.10
+ * Since: 1.14
  **/
 NMSettingOvsPort *
 nm_connection_get_setting_ovs_port(NMConnection *connection)
@@ -3626,7 +3628,7 @@ nm_connection_get_setting_tc_config(NMConnection *connection)
  *
  * Returns: (transfer none): an #NMSettingTun if the connection contains one, otherwise %NULL
  *
- * Since: 1.2
+ * Since: 1.14
  **/
 NMSettingTun *
 nm_connection_get_setting_tun(NMConnection *connection)
diff --git a/src/libnm-core-impl/nm-setting-6lowpan.c b/src/libnm-core-impl/nm-setting-6lowpan.c
index 765af69b..21b3dbb9 100644
--- a/src/libnm-core-impl/nm-setting-6lowpan.c
+++ b/src/libnm-core-impl/nm-setting-6lowpan.c
@@ -29,6 +29,8 @@ typedef struct {
  * NMSetting6Lowpan:
  *
  * 6LoWPAN Settings
+ *
+ * Since: 1.14
  */
 struct _NMSetting6Lowpan {
     NMSetting parent;
@@ -51,7 +53,7 @@ G_DEFINE_TYPE(NMSetting6Lowpan, nm_setting_6lowpan, NM_TYPE_SETTING)
  *
  * Returns: the #NMSetting6Lowpan:parent property of the setting
  *
- * Since: 1.14
+ * Since: 1.42, 1.40.4
  **/
 const char *
 nm_setting_6lowpan_get_parent(NMSetting6Lowpan *setting)
@@ -139,7 +141,7 @@ nm_setting_6lowpan_init(NMSetting6Lowpan *setting)
  *
  * Returns: (transfer full): the new empty #NMSetting6Lowpan object
  *
- * Since: 1.14
+ * Since: 1.42, 1.40.4
  **/
 NMSetting *
 nm_setting_6lowpan_new(void)
diff --git a/src/libnm-core-impl/nm-setting-bridge.c b/src/libnm-core-impl/nm-setting-bridge.c
index 39a3fb60..89611147 100644
--- a/src/libnm-core-impl/nm-setting-bridge.c
+++ b/src/libnm-core-impl/nm-setting-bridge.c
@@ -926,7 +926,7 @@ _nm_setting_bridge_get_vlans(NMSettingBridge *setting)
  *
  * Returns: the #NMSettingBridge:group-address property of the setting
  *
- * Since 1.24
+ * Since: 1.24
  **/
 const char *
 nm_setting_bridge_get_group_address(const NMSettingBridge *setting)
@@ -942,7 +942,7 @@ nm_setting_bridge_get_group_address(const NMSettingBridge *setting)
  *
  * Returns: the #NMSettingBridge:vlan-protocol property of the setting
  *
- * Since 1.24
+ * Since: 1.24
  **/
 const char *
 nm_setting_bridge_get_vlan_protocol(const NMSettingBridge *setting)
@@ -958,7 +958,7 @@ nm_setting_bridge_get_vlan_protocol(const NMSettingBridge *setting)
  *
  * Returns: the #NMSettingBridge:vlan-stats-enabled property of the setting
  *
- * Since 1.24
+ * Since: 1.24
  **/
 gboolean
 nm_setting_bridge_get_vlan_stats_enabled(const NMSettingBridge *setting)
@@ -974,7 +974,7 @@ nm_setting_bridge_get_vlan_stats_enabled(const NMSettingBridge *setting)
  *
  * Returns: the #NMSettingBridge:multicast-router property of the setting
  *
- * Since 1.24
+ * Since: 1.24
  **/
 const char *
 nm_setting_bridge_get_multicast_router(const NMSettingBridge *setting)
@@ -990,7 +990,7 @@ nm_setting_bridge_get_multicast_router(const NMSettingBridge *setting)
  *
  * Returns: the #NMSettingBridge:multicast-query-use-ifaddr property of the setting
  *
- * Since 1.24
+ * Since: 1.24
  **/
 gboolean
 nm_setting_bridge_get_multicast_query_use_ifaddr(const NMSettingBridge *setting)
@@ -1006,7 +1006,7 @@ nm_setting_bridge_get_multicast_query_use_ifaddr(const NMSettingBridge *setting)
  *
  * Returns: the #NMSettingBridge:multicast-querier property of the setting
  *
- * Since 1.24
+ * Since: 1.24
  **/
 gboolean
 nm_setting_bridge_get_multicast_querier(const NMSettingBridge *setting)
@@ -1022,7 +1022,7 @@ nm_setting_bridge_get_multicast_querier(const NMSettingBridge *setting)
  *
  * Returns: the #NMSettingBridge:multicast-hash-max property of the setting
  *
- * Since 1.26
+ * Since: 1.26
  **/
 guint32
 nm_setting_bridge_get_multicast_hash_max(const NMSettingBridge *setting)
@@ -1038,7 +1038,7 @@ nm_setting_bridge_get_multicast_hash_max(const NMSettingBridge *setting)
  *
  * Returns: the #NMSettingBridge:multicast-last-member-count property of the setting
  *
- * Since 1.26
+ * Since: 1.26
  **/
 guint32
 nm_setting_bridge_get_multicast_last_member_count(const NMSettingBridge *setting)
@@ -1054,7 +1054,7 @@ nm_setting_bridge_get_multicast_last_member_count(const NMSettingBridge *setting
  *
  * Returns: the #NMSettingBridge:multicast-last-member-interval property of the setting
  *
- * Since 1.26
+ * Since: 1.26
  **/
 guint64
 nm_setting_bridge_get_multicast_last_member_interval(const NMSettingBridge *setting)
@@ -1070,7 +1070,7 @@ nm_setting_bridge_get_multicast_last_member_interval(const NMSettingBridge *sett
  *
  * Returns: the #NMSettingBridge:multicast-membership-interval property of the setting
  *
- * Since 1.26
+ * Since: 1.26
  **/
 guint64
 nm_setting_bridge_get_multicast_membership_interval(const NMSettingBridge *setting)
@@ -1086,7 +1086,7 @@ nm_setting_bridge_get_multicast_membership_interval(const NMSettingBridge *setti
  *
  * Returns: the #NMSettingBridge:multicast-querier-interval property of the setting
  *
- * Since 1.26
+ * Since: 1.26
  **/
 guint64
 nm_setting_bridge_get_multicast_querier_interval(const NMSettingBridge *setting)
@@ -1102,7 +1102,7 @@ nm_setting_bridge_get_multicast_querier_interval(const NMSettingBridge *setting)
  *
  * Returns: the #NMSettingBridge:multicast-query-interval property of the setting
  *
- * Since 1.26
+ * Since: 1.26
  **/
 guint64
 nm_setting_bridge_get_multicast_query_interval(const NMSettingBridge *setting)
@@ -1118,7 +1118,7 @@ nm_setting_bridge_get_multicast_query_interval(const NMSettingBridge *setting)
  *
  * Returns: the #NMSettingBridge:multicast-query-response-interval property of the setting
  *
- * Since 1.26
+ * Since: 1.26
  **/
 guint64
 nm_setting_bridge_get_multicast_query_response_interval(const NMSettingBridge *setting)
@@ -1134,7 +1134,7 @@ nm_setting_bridge_get_multicast_query_response_interval(const NMSettingBridge *s
  *
  * Returns: the #NMSettingBridge:multicast-query-response-interval property of the setting
  *
- * Since 1.26
+ * Since: 1.26
  **/
 guint32
 nm_setting_bridge_get_multicast_startup_query_count(const NMSettingBridge *setting)
@@ -1150,7 +1150,7 @@ nm_setting_bridge_get_multicast_startup_query_count(const NMSettingBridge *setti
  *
  * Returns: the #NMSettingBridge:multicast-startup-query-interval property of the setting
  *
- * Since 1.26
+ * Since: 1.26
  **/
 guint64
 nm_setting_bridge_get_multicast_startup_query_interval(const NMSettingBridge *setting)
diff --git a/src/libnm-core-impl/nm-setting-connection.c b/src/libnm-core-impl/nm-setting-connection.c
index cbce1c12..bc14c767 100644
--- a/src/libnm-core-impl/nm-setting-connection.c
+++ b/src/libnm-core-impl/nm-setting-connection.c
@@ -1023,7 +1023,7 @@ nm_setting_connection_get_dns_over_tls(NMSettingConnection *setting)
  *
  * Returns: the #NMSettingConnection:mptcp-flags property of the setting.
  *
- * Since: 1.40
+ * Since: 1.42, 1.40.4
  **/
 NMMptcpFlags
 nm_setting_connection_get_mptcp_flags(NMSettingConnection *setting)
diff --git a/src/libnm-core-impl/nm-setting-ethtool.c b/src/libnm-core-impl/nm-setting-ethtool.c
index 71179efd..1db6c335 100644
--- a/src/libnm-core-impl/nm-setting-ethtool.c
+++ b/src/libnm-core-impl/nm-setting-ethtool.c
@@ -23,20 +23,6 @@
 
 /*****************************************************************************/
 
-static const GVariantType *
-get_variant_type_from_ethtool_id(NMEthtoolID ethtool_id)
-{
-    if (nm_ethtool_id_is_feature(ethtool_id) || nm_ethtool_id_is_pause(ethtool_id))
-        return G_VARIANT_TYPE_BOOLEAN;
-
-    if (nm_ethtool_id_is_coalesce(ethtool_id) || nm_ethtool_id_is_ring(ethtool_id))
-        return G_VARIANT_TYPE_UINT32;
-
-    return NULL;
-}
-
-/*****************************************************************************/
-
 /**
  * nm_ethtool_optname_is_feature:
  * @optname: (allow-none): the option name to check
@@ -302,7 +288,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
         NMEthtoolID         ethtool_id;
 
         ethtool_id   = nm_ethtool_id_get_by_name(optname);
-        variant_type = get_variant_type_from_ethtool_id(ethtool_id);
+        variant_type = nm_ethtool_id_get_variant_type(ethtool_id);
 
         if (!variant_type) {
             g_set_error_literal(error,
@@ -365,7 +351,7 @@ get_variant_type(const NMSettInfoSetting *sett_info, const char *name, GError **
 {
     const GVariantType *variant_type;
 
-    variant_type = get_variant_type_from_ethtool_id(nm_ethtool_id_get_by_name(name));
+    variant_type = nm_ethtool_id_get_variant_type(nm_ethtool_id_get_by_name(name));
 
     if (!variant_type) {
         g_set_error(error,
diff --git a/src/libnm-core-impl/nm-setting-hostname.c b/src/libnm-core-impl/nm-setting-hostname.c
index 276a75a8..8a5e50be 100644
--- a/src/libnm-core-impl/nm-setting-hostname.c
+++ b/src/libnm-core-impl/nm-setting-hostname.c
@@ -134,7 +134,7 @@ nm_setting_hostname_init(NMSettingHostname *setting)
  *
  * Returns: (transfer full): the new empty #NMSettingHostname object
  *
- * Since: 1.30
+ * Since: 1.42, 1.40.4
  **/
 NMSetting *
 nm_setting_hostname_new(void)
diff --git a/src/libnm-core-impl/nm-setting-ip-config.c b/src/libnm-core-impl/nm-setting-ip-config.c
index 916a8038..73f98ab1 100644
--- a/src/libnm-core-impl/nm-setting-ip-config.c
+++ b/src/libnm-core-impl/nm-setting-ip-config.c
@@ -266,6 +266,8 @@ nm_ip_address_unref(NMIPAddress *address)
  *
  * Returns: 0 if the two objects have the same values (according to their flags)
  *   or a integer indicating the compare order.
+ *
+ * Since: 1.22
  **/
 int
 nm_ip_address_cmp_full(const NMIPAddress *a, const NMIPAddress *b, NMIPAddressCmpFlags cmp_flags)
@@ -4343,6 +4345,8 @@ nm_setting_ip_config_get_num_dns_options(NMSettingIPConfig *setting)
  * a default configuration, while the former explicitly means "no-options".
  *
  * Returns: whether DNS options are initialized or left unset (the default).
+ *
+ * Since: 1.2
  **/
 gboolean
 nm_setting_ip_config_has_dns_options(NMSettingIPConfig *setting)
@@ -5291,7 +5295,7 @@ nm_setting_ip_config_get_required_timeout(NMSettingIPConfig *setting)
  *
  * Returns: the configured DHCP IAID (Identity Association Identifier)
  *
- * Since: 1.22
+ * Since: 1.42, 1.40.4
  **/
 const char *
 nm_setting_ip_config_get_dhcp_iaid(NMSettingIPConfig *setting)
diff --git a/src/libnm-core-impl/nm-setting-ip-tunnel.c b/src/libnm-core-impl/nm-setting-ip-tunnel.c
index d42e97b9..73416813 100644
--- a/src/libnm-core-impl/nm-setting-ip-tunnel.c
+++ b/src/libnm-core-impl/nm-setting-ip-tunnel.c
@@ -240,7 +240,7 @@ nm_setting_ip_tunnel_get_output_key(NMSettingIPTunnel *setting)
  *
  * Returns: the encapsulation limit value
  *
- * Since: 1.2
+ * Since: 1.42, 1.40.4
  **/
 guint
 nm_setting_ip_tunnel_get_encapsulation_limit(NMSettingIPTunnel *setting)
@@ -258,7 +258,7 @@ nm_setting_ip_tunnel_get_encapsulation_limit(NMSettingIPTunnel *setting)
  *
  * Returns: the flow label value
  *
- * Since: 1.2
+ * Since: 1.42, 1.40.4
  **/
 guint
 nm_setting_ip_tunnel_get_flow_label(NMSettingIPTunnel *setting)
@@ -286,7 +286,7 @@ nm_setting_ip_tunnel_get_mtu(NMSettingIPTunnel *setting)
     return NM_SETTING_IP_TUNNEL_GET_PRIVATE(setting)->mtu;
 }
 
-/*
+/**
  * nm_setting_ip_tunnel_get_flags:
  * @setting: the #NMSettingIPTunnel
  *
diff --git a/src/libnm-core-impl/nm-setting-ip4-config.c b/src/libnm-core-impl/nm-setting-ip4-config.c
index ff56834e..d991152c 100644
--- a/src/libnm-core-impl/nm-setting-ip4-config.c
+++ b/src/libnm-core-impl/nm-setting-ip4-config.c
@@ -138,7 +138,7 @@ nm_setting_ip4_config_get_dhcp_vendor_class_identifier(NMSettingIP4Config *setti
  *
  * Returns: the link-local configuration
  *
- * Since: 1.40
+ * Since: 1.42, 1.40.4
  **/
 NMSettingIP4LinkLocal
 nm_setting_ip4_config_get_link_local(NMSettingIP4Config *setting)
@@ -898,7 +898,7 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass)
      * a global connection default gets consulted.
      * If still unspecified, the DHCP option is not sent to the server.
      *
-     * Since 1.28
+     * Since: 1.28
      */
     /* ---ifcfg-rh---
      * property: dhcp-vendor-class-identifier
@@ -928,7 +928,7 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass)
      * falling back to "auto". Note that if "ipv4.method" is "disabled", then
      * link local addressing is always disabled too. The default is "default".
      *
-     * Since 1.40
+     * Since: 1.40
      */
     /* ---ifcfg-rh---
      * property: link-local
diff --git a/src/libnm-core-impl/nm-setting-ovs-bridge.c b/src/libnm-core-impl/nm-setting-ovs-bridge.c
index b15aab19..7dc9fda4 100644
--- a/src/libnm-core-impl/nm-setting-ovs-bridge.c
+++ b/src/libnm-core-impl/nm-setting-ovs-bridge.c
@@ -120,7 +120,7 @@ nm_setting_ovs_bridge_get_stp_enable(NMSettingOvsBridge *self)
  *
  * Returns: the #NMSettingOvsBridge:datapath_type property of the setting
  *
- * Since: 1.20
+ * Since: 1.42, 1.40.4
  **/
 const char *
 nm_setting_ovs_bridge_get_datapath_type(NMSettingOvsBridge *self)
diff --git a/src/libnm-core-impl/nm-setting-ovs-external-ids.c b/src/libnm-core-impl/nm-setting-ovs-external-ids.c
index 6b8d5d37..f4e31f81 100644
--- a/src/libnm-core-impl/nm-setting-ovs-external-ids.c
+++ b/src/libnm-core-impl/nm-setting-ovs-external-ids.c
@@ -195,6 +195,8 @@ _nm_setting_ovs_external_ids_get_data(NMSettingOvsExternalIDs *self)
  *
  * Returns: (array length=out_len) (transfer none): a
  *   %NULL-terminated array containing each key from the table.
+ *
+ * Since: 1.30
   **/
 const char *const *
 nm_setting_ovs_external_ids_get_data_keys(NMSettingOvsExternalIDs *setting, guint *out_len)
diff --git a/src/libnm-core-impl/nm-setting-sriov.c b/src/libnm-core-impl/nm-setting-sriov.c
index 30dd8f54..f9bee21e 100644
--- a/src/libnm-core-impl/nm-setting-sriov.c
+++ b/src/libnm-core-impl/nm-setting-sriov.c
@@ -372,7 +372,7 @@ const NMVariantAttributeSpec *const _nm_sriov_vf_attribute_spec[] = {
  *
  * Returns: %TRUE if the attribute is valid, %FALSE otherwise
  *
- * Since: 1.14
+ * Since: 1.42, 1.40.4
  */
 gboolean
 nm_sriov_vf_attribute_validate(const char *name, GVariant *value, gboolean *known, GError **error)
@@ -649,7 +649,7 @@ nm_sriov_vf_get_vlan_qos(const NMSriovVF *vf, guint vlan_id)
     return vlan->qos;
 }
 
-/*
+/**
  * nm_sriov_vf_get_vlan_protocol:
  * @vf: the #NMSriovVF
  * @vlan_id: the VLAN id
diff --git a/src/libnm-core-impl/nm-setting-tc-config.c b/src/libnm-core-impl/nm-setting-tc-config.c
index 08a7f94d..529bbca1 100644
--- a/src/libnm-core-impl/nm-setting-tc-config.c
+++ b/src/libnm-core-impl/nm-setting-tc-config.c
@@ -935,7 +935,7 @@ nm_tc_tfilter_get_parent(NMTCTfilter *tfilter)
  *
  * Returns: the action associated with a traffic filter.
  *
- * Since: 1.12
+ * Since: 1.42, 1.40.4
  **/
 NMTCAction *
 nm_tc_tfilter_get_action(NMTCTfilter *tfilter)
@@ -956,7 +956,7 @@ nm_tc_tfilter_get_action(NMTCTfilter *tfilter)
  *
  * Sets the action associated with a traffic filter.
  *
- * Since: 1.12
+ * Since: 1.42, 1.40.4
  **/
 void
 nm_tc_tfilter_set_action(NMTCTfilter *tfilter, NMTCAction *action)
diff --git a/src/libnm-core-impl/nm-setting-user.c b/src/libnm-core-impl/nm-setting-user.c
index 0e95d38b..70bdc62a 100644
--- a/src/libnm-core-impl/nm-setting-user.c
+++ b/src/libnm-core-impl/nm-setting-user.c
@@ -35,6 +35,8 @@ typedef struct {
  * NMSettingUser:
  *
  * General User Profile Settings
+ *
+ * Since: 1.8
  */
 struct _NMSettingUser {
     NMSetting            parent;
@@ -216,6 +218,8 @@ _create_data_hash(void)
  *
  * Returns: (array length=out_len) (transfer none): a
  *   %NULL-terminated array containing each key from the table.
+ *
+ * Since: 1.8
   **/
 const char *const *
 nm_setting_user_get_keys(NMSettingUser *setting, guint *out_len)
@@ -498,6 +502,8 @@ nm_setting_user_init(NMSettingUser *self)
  * Creates a new #NMSettingUser object with default values.
  *
  * Returns: the new empty #NMSettingUser object
+ *
+ * Since: 1.8
  **/
 NMSetting *
 nm_setting_user_new(void)
diff --git a/src/libnm-core-impl/nm-setting-vpn.c b/src/libnm-core-impl/nm-setting-vpn.c
index 42f75fa2..7e6f18dd 100644
--- a/src/libnm-core-impl/nm-setting-vpn.c
+++ b/src/libnm-core-impl/nm-setting-vpn.c
@@ -147,6 +147,8 @@ nm_setting_vpn_get_user_name(NMSettingVpn *setting)
  * @setting: the #NMSettingVpn
  *
  * Returns: the #NMSettingVpn:persistent property of the setting
+ *
+ * Since: 1.42, 1.40.4
  **/
 gboolean
 nm_setting_vpn_get_persistent(NMSettingVpn *setting)
diff --git a/src/libnm-core-impl/nm-setting-wireguard.c b/src/libnm-core-impl/nm-setting-wireguard.c
index ad0f01d5..599ded3c 100644
--- a/src/libnm-core-impl/nm-setting-wireguard.c
+++ b/src/libnm-core-impl/nm-setting-wireguard.c
@@ -1437,7 +1437,7 @@ _peers_clear(NMSettingWireGuardPrivate *priv)
 }
 
 /**
- * nm_setting_wireguard_:
+ * nm_setting_wireguard_clear_peers:
  * @self: the #NMSettingWireGuard instance
  *
  * Returns: the number of cleared peers.
diff --git a/src/libnm-core-impl/nm-setting-wireless-security.c b/src/libnm-core-impl/nm-setting-wireless-security.c
index d9c5afb8..ebefd504 100644
--- a/src/libnm-core-impl/nm-setting-wireless-security.c
+++ b/src/libnm-core-impl/nm-setting-wireless-security.c
@@ -561,7 +561,7 @@ nm_setting_wireless_security_clear_groups(NMSettingWirelessSecurity *setting)
     _notify(setting, PROP_GROUP);
 }
 
-/*
+/**
  * nm_setting_wireless_security_get_pmf:
  * @setting: the #NMSettingWirelessSecurity
  *
@@ -798,7 +798,7 @@ nm_setting_wireless_security_get_wps_method(NMSettingWirelessSecurity *setting)
     return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE(setting)->wps_method;
 }
 
-/*
+/**
  * nm_setting_wireless_security_get_fils:
  * @setting: the #NMSettingWirelessSecurity
  *
diff --git a/src/libnm-core-impl/nm-setting-wpan.c b/src/libnm-core-impl/nm-setting-wpan.c
index 9e25dd16..a3e56ded 100644
--- a/src/libnm-core-impl/nm-setting-wpan.c
+++ b/src/libnm-core-impl/nm-setting-wpan.c
@@ -53,6 +53,8 @@ typedef struct {
  * NMSettingWpan:
  *
  * IEEE 802.15.4 (WPAN) MAC Settings
+ *
+ * Since: 1.14
  */
 struct _NMSettingWpan {
     NMSetting parent;
@@ -75,7 +77,7 @@ G_DEFINE_TYPE(NMSettingWpan, nm_setting_wpan, NM_TYPE_SETTING)
  *
  * Returns: the #NMSettingWpan:mac-address property of the setting
  *
- * Since: 1.14
+ * Since: 1.42, 1.40.4
  **/
 const char *
 nm_setting_wpan_get_mac_address(NMSettingWpan *setting)
@@ -91,7 +93,7 @@ nm_setting_wpan_get_mac_address(NMSettingWpan *setting)
  *
  * Returns: the #NMSettingWpan:pan-id property of the setting
  *
- * Since: 1.14
+ * Since: 1.42, 1.40.4
  **/
 guint16
 nm_setting_wpan_get_pan_id(NMSettingWpan *setting)
@@ -107,7 +109,7 @@ nm_setting_wpan_get_pan_id(NMSettingWpan *setting)
  *
  * Returns: the #NMSettingWpan:short-address property of the setting
  *
- * Since: 1.14
+ * Since: 1.42, 1.40.4
  **/
 guint16
 nm_setting_wpan_get_short_address(NMSettingWpan *setting)
@@ -123,7 +125,7 @@ nm_setting_wpan_get_short_address(NMSettingWpan *setting)
  *
  * Returns: the #NMSettingWpan:page property of the setting
  *
- * Since: 1.16
+ * Since: 1.42, 1.40.4
  **/
 gint16
 nm_setting_wpan_get_page(NMSettingWpan *setting)
@@ -139,7 +141,7 @@ nm_setting_wpan_get_page(NMSettingWpan *setting)
  *
  * Returns: the #NMSettingWpan:channel property of the setting
  *
- * Since: 1.16
+ * Since: 1.42, 1.40.4
  **/
 gint16
 nm_setting_wpan_get_channel(NMSettingWpan *setting)
@@ -211,7 +213,7 @@ nm_setting_wpan_init(NMSettingWpan *setting)
  *
  * Returns: (transfer full): the new empty #NMSettingWpan object
  *
- * Since: 1.14
+ * Since: 1.42, 1.40.4
  **/
 NMSetting *
 nm_setting_wpan_new(void)
diff --git a/src/libnm-core-impl/nm-setting.c b/src/libnm-core-impl/nm-setting.c
index 35070bae..b6f72137 100644
--- a/src/libnm-core-impl/nm-setting.c
+++ b/src/libnm-core-impl/nm-setting.c
@@ -30,6 +30,20 @@
 
 /*****************************************************************************/
 
+/*
+ * We use literal numbers in the header (as opposed to e.g.
+ * (1 << (1 + G_PARAM_USER_SHIFT))), because g-ir-scanner sometimes gets
+ * confused by unknown tokens and silently treats them as zero:
+ * https://gitlab.gnome.org/GNOME/gobject-introspection/-/merge_requests/366
+ */
+
+G_STATIC_ASSERT(G_PARAM_USER_SHIFT == 8);
+G_STATIC_ASSERT(NM_SETTING_PARAM_REQUIRED == (1 << (1 + G_PARAM_USER_SHIFT)));
+G_STATIC_ASSERT(NM_SETTING_PARAM_SECRET == (1 << (2 + G_PARAM_USER_SHIFT)));
+G_STATIC_ASSERT(NM_SETTING_PARAM_FUZZY_IGNORE == (1 << (3 + G_PARAM_USER_SHIFT)));
+
+/*****************************************************************************/
+
 typedef struct {
     GHashTable  *hash;
     const char **names;
@@ -3847,7 +3861,7 @@ nm_setting_option_clear_by_name(NMSetting *setting, NMUtilsPredicateStr predicat
  * Returns: (transfer none): the #GVariant or %NULL if the option
  *   is not set.
  *
- * Since: 1.26.
+ * Since: 1.26
  */
 GVariant *
 nm_setting_option_get(NMSetting *setting, const char *opt_name)
diff --git a/src/libnm-core-impl/nm-utils.c b/src/libnm-core-impl/nm-utils.c
index 3c4cbc65..be6ad4de 100644
--- a/src/libnm-core-impl/nm-utils.c
+++ b/src/libnm-core-impl/nm-utils.c
@@ -1942,6 +1942,8 @@ next:
  * include additional attributes.
  *
  * Returns: (transfer none): a new floating #GVariant representing @addresses.
+ *
+ * Since: 1.42, 1.40.4
  **/
 GVariant *
 nm_utils_ip_addresses_to_variant(GPtrArray *addresses)
@@ -1995,6 +1997,8 @@ nm_utils_ip_addresses_to_variant(GPtrArray *addresses)
  *
  * Returns: (transfer full) (element-type NMIPAddress): a newly allocated
  *   #GPtrArray of #NMIPAddress objects
+ *
+ * Since: 1.42, 1.40.4
  **/
 GPtrArray *
 nm_utils_ip_addresses_from_variant(GVariant *value, int family)
@@ -2054,6 +2058,8 @@ nm_utils_ip_addresses_from_variant(GVariant *value, int family)
  * prefix, next hop, metric, and additional attributes).
  *
  * Returns: (transfer none): a new floating #GVariant representing @routes.
+ *
+ * Since: 1.42, 1.40.4
  **/
 GVariant *
 nm_utils_ip_routes_to_variant(GPtrArray *routes)
@@ -2120,6 +2126,8 @@ nm_utils_ip_routes_to_variant(GPtrArray *routes)
  *
  * Returns: (transfer full) (element-type NMIPRoute): a newly allocated
  *   #GPtrArray of #NMIPRoute objects
+ *
+ * Since: 1.42, 1.40.4
  **/
 GPtrArray *
 nm_utils_ip_routes_from_variant(GVariant *value, int family)
@@ -4314,6 +4322,8 @@ nm_utils_is_valid_iface_name_utf8safe(const char *utf8safe_name)
  *
  * Before 1.20, this function did not accept %NULL as @name argument. If you
  *   want to run against older versions of libnm, don't pass %NULL.
+ *
+ * Since: 1.6
  */
 gboolean
 nm_utils_is_valid_iface_name(const char *name, GError **error)
@@ -5249,7 +5259,7 @@ next:
     return g_steal_pointer(&ht);
 }
 
-/*
+/**
  * nm_utils_format_variant_attributes:
  * @attributes: (element-type utf8 GVariant): a #GHashTable mapping attribute names to #GVariant values
  * @attr_separator: the attribute separator character
@@ -5275,8 +5285,8 @@ nm_utils_format_variant_attributes(GHashTable *attributes,
 
 /*****************************************************************************/
 
-/*
- * nm_utils_get_timestamp_msec():
+/**
+ * nm_utils_get_timestamp_msec:
  *
  * Gets current time in milliseconds of CLOCK_BOOTTIME.
  *
@@ -5314,7 +5324,7 @@ nm_utils_get_timestamp_msec(void)
  * Returns: the version ID of the libnm version. That is, the %NM_VERSION
  *   at runtime.
  *
- * Since: 1.6.0
+ * Since: 1.6
  */
 guint
 nm_utils_version(void)
diff --git a/src/libnm-core-impl/nm-vpn-editor-plugin.c b/src/libnm-core-impl/nm-vpn-editor-plugin.c
index 225f25ef..3a6abbc2 100644
--- a/src/libnm-core-impl/nm-vpn-editor-plugin.c
+++ b/src/libnm-core-impl/nm-vpn-editor-plugin.c
@@ -470,8 +470,20 @@ nm_vpn_editor_plugin_import(NMVpnEditorPlugin *plugin, const char *path, GError
     g_return_val_if_fail(NM_IS_VPN_EDITOR_PLUGIN(plugin), NULL);
 
     if (nm_vpn_editor_plugin_get_capabilities(plugin) & NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT) {
+        gs_free_error GError *error2 = NULL;
+
         g_return_val_if_fail(NM_VPN_EDITOR_PLUGIN_GET_INTERFACE(plugin)->import_from_file != NULL,
                              NULL);
+
+        if (!error) {
+            /* Some VPN plugins crash if error argument is omitted. Work around that
+             * in libnm by always requesting an error.
+             *
+             * https://gitlab.gnome.org/GNOME/NetworkManager-vpnc/-/blob/c7d197477c94c5bae0396f0ef826db4d835e487d/properties/nm-vpnc-editor-plugin.c#L281
+             **/
+            error = &error2;
+        }
+
         return NM_VPN_EDITOR_PLUGIN_GET_INTERFACE(plugin)->import_from_file(plugin, path, error);
     }
 
diff --git a/src/libnm-core-impl/nm-vpn-plugin-info.c b/src/libnm-core-impl/nm-vpn-plugin-info.c
index 473063fb..baa19347 100644
--- a/src/libnm-core-impl/nm-vpn-plugin-info.c
+++ b/src/libnm-core-impl/nm-vpn-plugin-info.c
@@ -898,7 +898,7 @@ nm_vpn_plugin_info_get_program(NMVpnPluginInfo *self)
  *
  * Returns: %TRUE if the service supports multiple instances with different bus names, otherwise %FALSE
  *
- * Since: 1.2
+ * Since: 1.42, 1.40.4
  */
 gboolean
 nm_vpn_plugin_info_supports_multiple(NMVpnPluginInfo *self)
diff --git a/src/libnm-core-impl/tests/test-general.c b/src/libnm-core-impl/tests/test-general.c
index 64b3dca7..a21f50db 100644
--- a/src/libnm-core-impl/tests/test-general.c
+++ b/src/libnm-core-impl/tests/test-general.c
@@ -3139,6 +3139,9 @@ test_setting_new_from_dbus_bad(void)
                  NULL);
     nm_connection_add_setting(conn, setting);
 
+    /* Test assignment of same setting again. */
+    nm_connection_add_setting(conn, g_object_ref(setting));
+
     setting = nm_setting_wireless_new();
     ssid    = g_bytes_new("my-ssid", 7);
     g_object_set(setting,