summary refs log tree commit diff
path: root/libnm
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2021-02-11 18:11:46 +0100
committerMichael Biebl <biebl@debian.org>2021-02-11 18:11:46 +0100
commit80ec1decc49c72efec2a8b87c06245c92c0ab807 (patch)
treee3b229aa94e8dcf0590f2317664176e7b8f7607b /libnm
parent65f86e8f56267192d42f2b629fc6b0c99fb9cd0c (diff)
New upstream version 1.29.90 upstream/1.29.90
Diffstat (limited to 'libnm')
-rw-r--r--libnm/NetworkManager.h18
-rw-r--r--libnm/libnm.ver29
-rw-r--r--libnm/meson.build74
-rw-r--r--libnm/nm-access-point.c12
-rw-r--r--libnm/nm-access-point.h2
-rw-r--r--libnm/nm-active-connection.c6
-rw-r--r--libnm/nm-active-connection.h2
-rw-r--r--libnm/nm-autoptr.h4
-rw-r--r--libnm/nm-checkpoint.c6
-rw-r--r--libnm/nm-checkpoint.h2
-rw-r--r--libnm/nm-client.c22
-rw-r--r--libnm/nm-client.h7
-rw-r--r--libnm/nm-dbus-helpers.c4
-rw-r--r--libnm/nm-dbus-helpers.h2
-rw-r--r--libnm/nm-default-client.h23
-rw-r--r--libnm/nm-default-libnm.h23
-rw-r--r--libnm/nm-device-6lowpan.c6
-rw-r--r--libnm/nm-device-6lowpan.h2
-rw-r--r--libnm/nm-device-adsl.c6
-rw-r--r--libnm/nm-device-adsl.h2
-rw-r--r--libnm/nm-device-bond.c6
-rw-r--r--libnm/nm-device-bond.h2
-rw-r--r--libnm/nm-device-bridge.c6
-rw-r--r--libnm/nm-device-bridge.h2
-rw-r--r--libnm/nm-device-bt.c8
-rw-r--r--libnm/nm-device-bt.h2
-rw-r--r--libnm/nm-device-dummy.c6
-rw-r--r--libnm/nm-device-dummy.h2
-rw-r--r--libnm/nm-device-ethernet.c67
-rw-r--r--libnm/nm-device-ethernet.h2
-rw-r--r--libnm/nm-device-generic.c6
-rw-r--r--libnm/nm-device-generic.h2
-rw-r--r--libnm/nm-device-infiniband.c8
-rw-r--r--libnm/nm-device-infiniband.h2
-rw-r--r--libnm/nm-device-ip-tunnel.c6
-rw-r--r--libnm/nm-device-ip-tunnel.h2
-rw-r--r--libnm/nm-device-macsec.c6
-rw-r--r--libnm/nm-device-macsec.h2
-rw-r--r--libnm/nm-device-macvlan.c6
-rw-r--r--libnm/nm-device-macvlan.h2
-rw-r--r--libnm/nm-device-modem.c6
-rw-r--r--libnm/nm-device-modem.h2
-rw-r--r--libnm/nm-device-olpc-mesh.c6
-rw-r--r--libnm/nm-device-olpc-mesh.h2
-rw-r--r--libnm/nm-device-ovs-bridge.c6
-rw-r--r--libnm/nm-device-ovs-bridge.h2
-rw-r--r--libnm/nm-device-ovs-interface.c6
-rw-r--r--libnm/nm-device-ovs-interface.h2
-rw-r--r--libnm/nm-device-ovs-port.c6
-rw-r--r--libnm/nm-device-ovs-port.h2
-rw-r--r--libnm/nm-device-ppp.c6
-rw-r--r--libnm/nm-device-ppp.h2
-rw-r--r--libnm/nm-device-team.c6
-rw-r--r--libnm/nm-device-team.h2
-rw-r--r--libnm/nm-device-tun.c6
-rw-r--r--libnm/nm-device-tun.h2
-rw-r--r--libnm/nm-device-veth.c124
-rw-r--r--libnm/nm-device-veth.h41
-rw-r--r--libnm/nm-device-vlan.c6
-rw-r--r--libnm/nm-device-vlan.h2
-rw-r--r--libnm/nm-device-vrf.c6
-rw-r--r--libnm/nm-device-vrf.h2
-rw-r--r--libnm/nm-device-vxlan.c6
-rw-r--r--libnm/nm-device-vxlan.h2
-rw-r--r--libnm/nm-device-wifi-p2p.c6
-rw-r--r--libnm/nm-device-wifi-p2p.h2
-rw-r--r--libnm/nm-device-wifi.c11
-rw-r--r--libnm/nm-device-wifi.h2
-rw-r--r--libnm/nm-device-wimax.c4
-rw-r--r--libnm/nm-device-wimax.h2
-rw-r--r--libnm/nm-device-wireguard.c6
-rw-r--r--libnm/nm-device-wireguard.h2
-rw-r--r--libnm/nm-device-wpan.c6
-rw-r--r--libnm/nm-device-wpan.h2
-rw-r--r--libnm/nm-device.c13
-rw-r--r--libnm/nm-device.h2
-rw-r--r--libnm/nm-dhcp-config.c8
-rw-r--r--libnm/nm-dhcp-config.h2
-rw-r--r--libnm/nm-dhcp4-config.c4
-rw-r--r--libnm/nm-dhcp4-config.h2
-rw-r--r--libnm/nm-dhcp6-config.c4
-rw-r--r--libnm/nm-dhcp6-config.h2
-rw-r--r--libnm/nm-dns-manager.c4
-rw-r--r--libnm/nm-dns-manager.h2
-rw-r--r--libnm/nm-enum-types.c.template76
-rw-r--r--libnm/nm-enum-types.h.template22
-rw-r--r--libnm/nm-ethtool-utils.h107
-rw-r--r--libnm/nm-ip-config.c8
-rw-r--r--libnm/nm-ip-config.h2
-rw-r--r--libnm/nm-ip4-config.c4
-rw-r--r--libnm/nm-ip4-config.h2
-rw-r--r--libnm/nm-ip6-config.c4
-rw-r--r--libnm/nm-ip6-config.h2
-rw-r--r--libnm/nm-libnm-aux/nm-libnm-aux.c4
-rw-r--r--libnm/nm-libnm-aux/nm-libnm-aux.h2
-rw-r--r--libnm/nm-libnm-utils.c43
-rw-r--r--libnm/nm-libnm-utils.h37
-rw-r--r--libnm/nm-object-private.h2
-rw-r--r--libnm/nm-object.c14
-rw-r--r--libnm/nm-object.h2
-rw-r--r--libnm/nm-property-infos-dbus.xml6
-rw-r--r--libnm/nm-property-infos-ifcfg-rh.xml21
-rw-r--r--libnm/nm-property-infos-keyfile.xml6
-rw-r--r--libnm/nm-property-infos-nmcli.xml6
-rw-r--r--libnm/nm-remote-connection-private.h2
-rw-r--r--libnm/nm-remote-connection.c6
-rw-r--r--libnm/nm-remote-connection.h2
-rw-r--r--libnm/nm-secret-agent-old.c4
-rw-r--r--libnm/nm-secret-agent-old.h2
-rw-r--r--libnm/nm-settings-docs-gir.xml24
-rw-r--r--libnm/nm-types.h3
-rw-r--r--libnm/nm-vpn-connection.c6
-rw-r--r--libnm/nm-vpn-connection.h2
-rw-r--r--libnm/nm-vpn-editor.c4
-rw-r--r--libnm/nm-vpn-editor.h2
-rw-r--r--libnm/nm-vpn-plugin-old.c4
-rw-r--r--libnm/nm-vpn-plugin-old.h2
-rw-r--r--libnm/nm-vpn-service-plugin.c4
-rw-r--r--libnm/nm-vpn-service-plugin.h2
-rw-r--r--libnm/nm-wifi-p2p-peer.c6
-rw-r--r--libnm/nm-wifi-p2p-peer.h2
-rw-r--r--libnm/nm-wimax-nsp.c4
-rw-r--r--libnm/nm-wimax-nsp.h2
-rw-r--r--libnm/tests/meson.build47
-rw-r--r--libnm/tests/test-libnm.c177
-rw-r--r--libnm/tests/test-nm-client.c4
-rw-r--r--libnm/tests/test-remote-settings-client.c4
-rw-r--r--libnm/tests/test-secret-agent.c4
128 files changed, 949 insertions, 476 deletions
diff --git a/libnm/NetworkManager.h b/libnm/NetworkManager.h
index e9cfad32..f9cc8565 100644
--- a/libnm/NetworkManager.h
+++ b/libnm/NetworkManager.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2014 - 2018 Red Hat, Inc.
  */
@@ -34,6 +34,7 @@
 #include "nm-device-ppp.h"
 #include "nm-device-team.h"
 #include "nm-device-tun.h"
+#include "nm-device-veth.h"
 #include "nm-device-vlan.h"
 #include "nm-device-vxlan.h"
 #include "nm-device-wifi-p2p.h"
@@ -44,7 +45,9 @@
 #include "nm-device.h"
 #include "nm-dhcp-config.h"
 #include "nm-enum-types.h"
+#include "nm-ethtool-utils.h"
 #include "nm-ip-config.h"
+#include "nm-keyfile.h"
 #include "nm-object.h"
 #include "nm-remote-connection.h"
 #include "nm-setting-6lowpan.h"
@@ -61,6 +64,7 @@
 #include "nm-setting-ethtool.h"
 #include "nm-setting-generic.h"
 #include "nm-setting-gsm.h"
+#include "nm-setting-hostname.h"
 #include "nm-setting-infiniband.h"
 #include "nm-setting-ip4-config.h"
 #include "nm-setting-ip6-config.h"
@@ -86,6 +90,7 @@
 #include "nm-setting-team-port.h"
 #include "nm-setting-tun.h"
 #include "nm-setting-user.h"
+#include "nm-setting-veth.h"
 #include "nm-setting-vlan.h"
 #include "nm-setting-vpn.h"
 #include "nm-setting-vrf.h"
@@ -111,6 +116,17 @@
 
 #include "nm-autoptr.h"
 
+#if !defined(NETWORKMANAGER_COMPILATION) \
+    && (!defined(NM_NO_INCLUDE_EXTRA_HEADERS) || !NM_NO_INCLUDE_EXTRA_HEADERS)
+    /* historically, NetworkManager.h drags in the following system headers.
+     * These are not strictly necessary and the user may wish to opt out from
+     * including them. */
+    #include <linux/if_ether.h>
+    #include <linux/if_infiniband.h>
+    #include <linux/if_vlan.h>
+    #include <netinet/in.h>
+#endif
+
 #undef __NETWORKMANAGER_H_INSIDE__
 
 #endif /* __NETWORKMANAGER_H__ */
diff --git a/libnm/libnm.ver b/libnm/libnm.ver
index c85fcb5c..c61792c7 100644
--- a/libnm/libnm.ver
+++ b/libnm/libnm.ver
@@ -1755,3 +1755,32 @@ global:
 	nm_setting_ip_config_remove_dhcp_reject_server;
 	nm_setting_wireless_get_ap_isolation;
 } libnm_1_26_4;
+
+libnm_1_30_0 {
+global:
+	nm_device_veth_get_type;
+	nm_keyfile_handler_data_fail_with_error;
+	nm_keyfile_handler_data_get_context;
+	nm_keyfile_handler_data_warn_get;
+	nm_keyfile_handler_flags_get_type;
+	nm_keyfile_handler_type_get_type;
+	nm_keyfile_read;
+	nm_keyfile_warn_severity_get_type;
+	nm_keyfile_write;
+	nm_setting_hostname_get_from_dhcp;
+	nm_setting_hostname_get_from_dns_lookup;
+	nm_setting_hostname_get_only_from_default;
+	nm_setting_hostname_get_priority;
+	nm_setting_hostname_get_type;
+	nm_setting_ovs_external_ids_check_key;
+	nm_setting_ovs_external_ids_check_val;
+	nm_setting_ovs_external_ids_get_data;
+	nm_setting_ovs_external_ids_get_data_keys;
+	nm_setting_ovs_external_ids_get_type;
+	nm_setting_ovs_external_ids_new;
+	nm_setting_ovs_external_ids_set_data;
+	nm_setting_veth_get_peer;
+	nm_setting_veth_get_type;
+	nm_setting_veth_new;
+	nm_utils_print;
+} libnm_1_28_0;
diff --git a/libnm/meson.build b/libnm/meson.build
index d3991ab1..d0846419 100644
--- a/libnm/meson.build
+++ b/libnm/meson.build
@@ -1,4 +1,4 @@
-# SPDX-License-Identifier: LGPL-2.1+
+# SPDX-License-Identifier: LGPL-2.1-or-later
 
 libnm_inc = include_directories('.')
 
@@ -8,11 +8,6 @@ libnm_nm_default_dep = declare_dependency(
   dependencies: libnm_core_nm_default_dep,
 )
 
-c_flags = [
-  '-DG_LOG_DOMAIN="@0@"'.format(libnm_name),
-  '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM',
-]
-
 libnm_headers = files(
   'NetworkManager.h',
   'nm-access-point.h',
@@ -40,6 +35,7 @@ libnm_headers = files(
   'nm-device-ppp.h',
   'nm-device-team.h',
   'nm-device-tun.h',
+  'nm-device-veth.h',
   'nm-device-vlan.h',
   'nm-device-vrf.h',
   'nm-device-vxlan.h',
@@ -50,6 +46,7 @@ libnm_headers = files(
   'nm-device-wpan.h',
   'nm-device.h',
   'nm-dhcp-config.h',
+  'nm-ethtool-utils.h',
   'nm-ip-config.h',
   'nm-object.h',
   'nm-remote-connection.h',
@@ -68,14 +65,12 @@ install_headers(
   subdir: libnm_name,
 )
 
-enum_types = 'nm-enum-types'
-
 libnm_enum_sources = gnome.mkenums(
-  enum_types,
+  'nm-enum-types',
   sources: libnm_headers + [nm_version_macro_header],
   identifier_prefix: nm_id_prefix,
-  c_template: enum_types + '.c.template',
-  h_template: enum_types + '.h.template',
+  c_template: 'nm-enum-types.c.template',
+  h_template: 'nm-enum-types.h.template',
   install_header: true,
   install_dir: libnm_pkgincludedir,
 )
@@ -106,6 +101,7 @@ libnm_sources = files(
   'nm-device-ppp.c',
   'nm-device-team.c',
   'nm-device-tun.c',
+  'nm-device-veth.c',
   'nm-device-vlan.c',
   'nm-device-vrf.c',
   'nm-device-vxlan.c',
@@ -134,37 +130,35 @@ libnm_sources = files(
   'nm-wimax-nsp.c',
 )
 
-deps = [
-  libnmdbus_dep,
-  libnm_libnm_core_intern_dep,
-  libnm_nm_default_dep,
-  libnm_udev_aux_dep,
-  libudev_dep,
-]
-
-liblibnm = static_library(
-  'libnm',
+libnm_static = static_library(
+  'nm-static',
   sources: libnm_sources + libnm_enum_sources,
-  dependencies: deps,
-  c_args: c_flags,
+  dependencies: [
+    libnmdbus_dep,
+    libnm_libnm_core_intern_dep,
+    libnm_nm_default_dep,
+    libnm_udev_aux_dep,
+    libudev_dep,
+  ],
+  c_args: [
+    '-DG_LOG_DOMAIN="libnm"',
+  ],
   link_with: libnm_systemd_logging_stub,
 )
 
-links = [
-  liblibnm,
-  libnm_core,
-  libnmdbus,
-  libnm_systemd_logging_stub,
-  libnm_utils_base,
-]
-
 linker_script = join_paths(meson.current_source_dir(), 'libnm.ver')
 
 libnm = shared_library(
   'nm',
   version: libnm_version,
   dependencies: libnm_nm_default_dep,
-  link_whole: links,
+  link_whole: [
+    libnm_static,
+    libnm_core,
+    libnmdbus,
+    libnm_systemd_logging_stub,
+    libnm_glib_aux,
+  ],
   link_args: '-Wl,--version-script,@0@'.format(linker_script),
   link_depends: linker_script,
   install: true,
@@ -208,7 +202,10 @@ if enable_introspection
     symbol_prefix: nm_id_prefix.to_lower(),
     header: 'NetworkManager.h',
     export_packages: libnm_name,
-    extra_args: c_flags,
+    extra_args: [
+      '-DG_LOG_DOMAIN="libnm"',
+      '-DNETWORKMANAGER_COMPILATION',
+    ],
     install: true,
   )
 
@@ -294,18 +291,13 @@ if enable_introspection
 
 endif
 
-if enable_tests
-  subdir('tests')
-endif
-
 libnm_libnm_aux = static_library(
   'nm-libnm-aux',
   sources: files(
     'nm-libnm-aux/nm-libnm-aux.c',
   ),
   c_args: [
-    '-DG_LOG_DOMAIN="@0@"'.format('libnmc'),
-    '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT',
+    '-DG_LOG_DOMAIN="libnmc"',
   ],
   dependencies: [
     libnm_core_nm_default_dep,
@@ -318,3 +310,7 @@ libnm_libnm_aux_dep = declare_dependency(
   include_directories: [shared_inc],
   link_with: [libnm_libnm_aux],
 )
+
+if enable_tests
+  subdir('tests')
+endif
diff --git a/libnm/nm-access-point.c b/libnm/nm-access-point.c
index 5e23bc52..abe1a553 100644
--- a/libnm/nm-access-point.c
+++ b/libnm/nm-access-point.c
@@ -1,13 +1,15 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2011 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-access-point.h"
 
+#include <linux/if_ether.h>
+
 #include "nm-connection.h"
 #include "nm-setting-connection.h"
 #include "nm-setting-wireless.h"
@@ -363,6 +365,10 @@ nm_access_point_connection_valid(NMAccessPoint *ap, NMConnection *connection)
  * Returns: (transfer full) (element-type NMConnection): an array of
  * #NMConnections that could be activated with the given @ap.  The array should
  * be freed with g_ptr_array_unref() when it is no longer required.
+ *
+ * WARNING: the transfer annotation for this function may not work correctly
+ *   with bindings. See https://gitlab.gnome.org/GNOME/gobject-introspection/-/issues/305.
+ *   You can filter the list yourself with nm_access_point_connection_valid().
  **/
 GPtrArray *
 nm_access_point_filter_connections(NMAccessPoint *ap, const GPtrArray *connections)
@@ -472,7 +478,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_accesspoint = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_ACCESS_POINT,
     nm_access_point_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_U("Flags", PROP_FLAGS, NMAccessPoint, _priv.flags),
         NML_DBUS_META_PROPERTY_INIT_U("Frequency", PROP_FREQUENCY, NMAccessPoint, _priv.frequency),
diff --git a/libnm/nm-access-point.h b/libnm/nm-access-point.h
index 0fa897c2..0460ea0a 100644
--- a/libnm/nm-access-point.h
+++ b/libnm/nm-access-point.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2011 Red Hat, Inc.
diff --git a/libnm/nm-active-connection.c b/libnm/nm-active-connection.c
index c80e4663..80fb2511 100644
--- a/libnm/nm-active-connection.c
+++ b/libnm/nm-active-connection.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2014 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-active-connection.h"
 
@@ -542,7 +542,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_connection_active = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
     nm_active_connection_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_LOW,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_10,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_O_PROP("Connection",
                                            PROP_CONNECTION,
diff --git a/libnm/nm-active-connection.h b/libnm/nm-active-connection.h
index 3899ed06..44b715c7 100644
--- a/libnm/nm-active-connection.h
+++ b/libnm/nm-active-connection.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2014 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
diff --git a/libnm/nm-autoptr.h b/libnm/nm-autoptr.h
index 93be5464..f37e2cfc 100644
--- a/libnm/nm-autoptr.h
+++ b/libnm/nm-autoptr.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2018 Red Hat, Inc.
  */
@@ -53,6 +53,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceOvsPort, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDevicePpp, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceTeam, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceTun, g_object_unref)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceVeth, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceVlan, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceVxlan, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceWifi, g_object_unref)
@@ -98,6 +99,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingTeam, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingTeamPort, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingTun, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingUser, g_object_unref)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingVeth, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingVlan, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingVpn, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingVxlan, g_object_unref)
diff --git a/libnm/nm-checkpoint.c b/libnm/nm-checkpoint.c
index 7439a96c..5fd55bc1 100644
--- a/libnm/nm-checkpoint.c
+++ b/libnm/nm-checkpoint.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-checkpoint.h"
 
@@ -128,7 +128,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_checkpoint = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_CHECKPOINT,
     nm_checkpoint_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_X("Created", PROP_CREATED, NMCheckpoint, _priv.created),
         NML_DBUS_META_PROPERTY_INIT_AO_PROP("Devices",
diff --git a/libnm/nm-checkpoint.h b/libnm/nm-checkpoint.h
index b2cab46a..3bc28f6f 100644
--- a/libnm/nm-checkpoint.h
+++ b/libnm/nm-checkpoint.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017 Red Hat, Inc.
  */
diff --git a/libnm/nm-client.c b/libnm/nm-client.c
index 1c2c2dd7..2c775196 100644
--- a/libnm/nm-client.c
+++ b/libnm/nm-client.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2018 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-client.h"
 
@@ -482,17 +482,17 @@ _nm_client_new_error_nm_not_cached(void)
 }
 
 static void
-_nm_client_dbus_call_simple_cb(GObject *source, GAsyncResult *result, gpointer data)
+_nm_client_dbus_call_simple_cb(GObject *source, GAsyncResult *result, gpointer user_data)
 {
     GAsyncReadyCallback callback;
-    gpointer            user_data;
+    gpointer            callback_user_data;
     gs_unref_object GObject *context_busy_watcher = NULL;
     gpointer                 obfuscated_self_ptr;
     gpointer                 log_call_counter_ptr;
 
-    nm_utils_user_data_unpack(data,
+    nm_utils_user_data_unpack(user_data,
                               &callback,
-                              &user_data,
+                              &callback_user_data,
                               &context_busy_watcher,
                               &obfuscated_self_ptr,
                               &log_call_counter_ptr);
@@ -502,7 +502,7 @@ _nm_client_dbus_call_simple_cb(GObject *source, GAsyncResult *result, gpointer d
                  (guint64) GPOINTER_TO_SIZE(obfuscated_self_ptr),
                  GPOINTER_TO_SIZE(log_call_counter_ptr));
 
-    callback(source, result, user_data);
+    callback(source, result, callback_user_data);
 }
 
 void
@@ -1166,7 +1166,7 @@ nml_dbus_object_iface_data_get(NMLDBusObject *dbobj,
             count++;
         }
     } else {
-        nm_c_list_for_each_entry_prev (db_iface_data, &dbobj->iface_lst_head, iface_lst) {
+        c_list_for_each_entry_prev (db_iface_data, &dbobj->iface_lst_head, iface_lst) {
             if (db_iface_data->dbus_iface_is_wellknown)
                 break;
             if (db_iface_data->iface_removed)
@@ -2694,7 +2694,7 @@ _obj_handle_dbus_changes(NMClient *self, NMLDBusObject *dbobj)
             nml_dbus_object_set_obj_state(dbobj, NML_DBUS_OBJ_STATE_WITH_NMOBJ_READY, self);
         } else {
             GType                   gtype     = G_TYPE_NONE;
-            NMLDBusMetaInteracePrio curr_prio = NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_LOW - 1;
+            NMLDBusMetaInteracePrio curr_prio = NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_10 - 1;
 
             c_list_for_each_entry (db_iface_data, &dbobj->iface_lst_head, iface_lst) {
                 nm_assert(!db_iface_data->iface_removed);
@@ -6981,7 +6981,7 @@ _init_release_all(NMClient *self)
     nm_assert(c_list_is_empty(&priv->dbus_objects_lst_head_on_dbus));
     nm_assert(c_list_is_empty(&priv->dbus_objects_lst_head_with_nmobj_not_ready));
     nm_assert(c_list_is_empty(&priv->dbus_objects_lst_head_with_nmobj_ready));
-    nm_assert(g_hash_table_size(priv->dbus_objects) == 0);
+    nm_assert(nm_g_hash_table_size(priv->dbus_objects) == 0);
 }
 
 /*****************************************************************************/
@@ -7822,7 +7822,7 @@ dispose(GObject *object)
     nm_assert(c_list_is_empty(&priv->queue_notify_lst_head));
     nm_assert(c_list_is_empty(&priv->notify_event_lst_head));
     nm_assert(c_list_is_empty(&self->obj_base.queue_notify_lst));
-    nm_assert(!priv->dbus_objects || g_hash_table_size(priv->dbus_objects) == 0);
+    nm_assert(nm_g_hash_table_size(priv->dbus_objects) == 0);
 
     nml_dbus_property_o_clear_many(priv->nm.property_o, G_N_ELEMENTS(priv->nm.property_o), NULL);
     nml_dbus_property_ao_clear_many(priv->nm.property_ao, G_N_ELEMENTS(priv->nm.property_ao), NULL);
diff --git a/libnm/nm-client.h b/libnm/nm-client.h
index 86e9486e..5a977088 100644
--- a/libnm/nm-client.h
+++ b/libnm/nm-client.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2014 Red Hat, Inc.
@@ -480,6 +480,11 @@ void nm_client_dbus_set_property(NMClient *          client,
 NM_AVAILABLE_IN_1_24
 gboolean nm_client_dbus_set_property_finish(NMClient *client, GAsyncResult *result, GError **error);
 
+/*****************************************************************************/
+
+NM_AVAILABLE_IN_1_30
+void nm_utils_print(int output_mode, const char *msg);
+
 G_END_DECLS
 
 #endif /* __NM_CLIENT_H__ */
diff --git a/libnm/nm-dbus-helpers.c b/libnm/nm-dbus-helpers.c
index 955fa6a5..b1461855 100644
--- a/libnm/nm-dbus-helpers.c
+++ b/libnm/nm-dbus-helpers.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2013 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-dbus-helpers.h"
 
diff --git a/libnm/nm-dbus-helpers.h b/libnm/nm-dbus-helpers.h
index a918d22f..a22f8e3d 100644
--- a/libnm/nm-dbus-helpers.h
+++ b/libnm/nm-dbus-helpers.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2013 Red Hat, Inc.
  */
diff --git a/libnm/nm-default-client.h b/libnm/nm-default-client.h
new file mode 100644
index 00000000..b5d1a6d3
--- /dev/null
+++ b/libnm/nm-default-client.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2015 Red Hat, Inc.
+ */
+
+#ifndef __NM_DEFAULT_CLIENT_H__
+#define __NM_DEFAULT_CLIENT_H__
+
+/*****************************************************************************/
+
+#include "nm-glib-aux/nm-default-glib-i18n-lib.h"
+
+#undef NETWORKMANAGER_COMPILATION
+#define NETWORKMANAGER_COMPILATION NM_NETWORKMANAGER_COMPILATION_CLIENT
+
+/*****************************************************************************/
+
+#include "nm-version.h"
+#include "NetworkManager.h"
+
+/*****************************************************************************/
+
+#endif /* __NM_DEFAULT_CLIENT_H__ */
diff --git a/libnm/nm-default-libnm.h b/libnm/nm-default-libnm.h
new file mode 100644
index 00000000..799547bc
--- /dev/null
+++ b/libnm/nm-default-libnm.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2015 Red Hat, Inc.
+ */
+
+#ifndef __NM_DEFAULT_LIBNM_H__
+#define __NM_DEFAULT_LIBNM_H__
+
+/*****************************************************************************/
+
+#include "nm-glib-aux/nm-default-glib-i18n-lib.h"
+
+#undef NETWORKMANAGER_COMPILATION
+#define NETWORKMANAGER_COMPILATION NM_NETWORKMANAGER_COMPILATION_LIBNM
+
+/*****************************************************************************/
+
+#include "nm-version.h"
+#include "nm-libnm-utils.h"
+
+/*****************************************************************************/
+
+#endif /* __NM_DEFAULT_LIBNM_H__ */
diff --git a/libnm/nm-device-6lowpan.c b/libnm/nm-device-6lowpan.c
index 4cf29c14..ccb8ae01 100644
--- a/libnm/nm-device-6lowpan.c
+++ b/libnm/nm-device-6lowpan.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2018 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-6lowpan.h"
 
@@ -94,7 +94,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_lowpan = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_6LOWPAN,
     nm_device_6lowpan_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress",
                                         0,
diff --git a/libnm/nm-device-6lowpan.h b/libnm/nm-device-6lowpan.h
index 4380a3e9..d46e6db4 100644
--- a/libnm/nm-device-6lowpan.h
+++ b/libnm/nm-device-6lowpan.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2018 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-adsl.c b/libnm/nm-device-adsl.c
index 1cfc8652..ff64cd3a 100644
--- a/libnm/nm-device-adsl.c
+++ b/libnm/nm-device-adsl.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Author: Pantelis Koukousoulas <pktoss@gmail.com>
  * Copyright (C) 2009 - 2011 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-adsl.h"
 
@@ -100,7 +100,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_adsl = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_ADSL,
     nm_device_adsl_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceAdsl, _priv.carrier), ), );
 
diff --git a/libnm/nm-device-adsl.h b/libnm/nm-device-adsl.h
index 286e3cf3..92eaf369 100644
--- a/libnm/nm-device-adsl.h
+++ b/libnm/nm-device-adsl.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2011 Pantelis Koukousoulas <pktoss@gmail.com>
  */
diff --git a/libnm/nm-device-bond.c b/libnm/nm-device-bond.c
index b37948d0..12149641 100644
--- a/libnm/nm-device-bond.c
+++ b/libnm/nm-device-bond.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2012 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-setting-bond.h"
 
@@ -155,7 +155,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_bond = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_BOND,
     nm_device_bond_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceBond, _priv.carrier),
         NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress",
diff --git a/libnm/nm-device-bond.h b/libnm/nm-device-bond.h
index c2935ee4..91c023a4 100644
--- a/libnm/nm-device-bond.h
+++ b/libnm/nm-device-bond.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2012 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-bridge.c b/libnm/nm-device-bridge.c
index ef889d51..732c5a2c 100644
--- a/libnm/nm-device-bridge.c
+++ b/libnm/nm-device-bridge.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2012 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-setting-bridge.h"
 
@@ -149,7 +149,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_bridge = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_BRIDGE,
     nm_device_bridge_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceBridge, _priv.carrier),
         NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress",
diff --git a/libnm/nm-device-bridge.h b/libnm/nm-device-bridge.h
index cb367f0b..a6c50658 100644
--- a/libnm/nm-device-bridge.h
+++ b/libnm/nm-device-bridge.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2012 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-bt.c b/libnm/nm-device-bt.c
index 960ac469..55f0a942 100644
--- a/libnm/nm-device-bt.c
+++ b/libnm/nm-device-bt.c
@@ -1,13 +1,15 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2012 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-bt.h"
 
+#include <linux/if_ether.h>
+
 #include "nm-setting-connection.h"
 #include "nm-setting-bluetooth.h"
 #include "nm-utils.h"
@@ -218,7 +220,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_bluetooth = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_BLUETOOTH,
     nm_device_bt_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_U("BtCapabilities",
                                       PROP_BT_CAPABILITIES,
diff --git a/libnm/nm-device-bt.h b/libnm/nm-device-bt.h
index a2558cd9..a7cfc796 100644
--- a/libnm/nm-device-bt.h
+++ b/libnm/nm-device-bt.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2008 - 2012 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
diff --git a/libnm/nm-device-dummy.c b/libnm/nm-device-dummy.c
index c5534a0e..6b928102 100644
--- a/libnm/nm-device-dummy.c
+++ b/libnm/nm-device-dummy.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-dummy.h"
 
@@ -93,7 +93,7 @@ nm_device_dummy_init(NMDeviceDummy *device)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_dummy = NML_DBUS_META_IFACE_INIT(
     NM_DBUS_INTERFACE_DEVICE_DUMMY,
     nm_device_dummy_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress",
                                         0,
diff --git a/libnm/nm-device-dummy.h b/libnm/nm-device-dummy.h
index 8da3390e..ad34b65e 100644
--- a/libnm/nm-device-dummy.h
+++ b/libnm/nm-device-dummy.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-ethernet.c b/libnm/nm-device-ethernet.c
index f831abc4..b7173c80 100644
--- a/libnm/nm-device-ethernet.c
+++ b/libnm/nm-device-ethernet.c
@@ -1,18 +1,23 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2012 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-ethernet.h"
 
+#include <linux/if_ether.h>
+
+#include "nm-libnm-utils.h"
 #include "nm-setting-connection.h"
 #include "nm-setting-wired.h"
 #include "nm-setting-pppoe.h"
+#include "nm-setting-veth.h"
 #include "nm-utils.h"
 #include "nm-object-private.h"
+#include "nm-device-veth.h"
 
 /*****************************************************************************/
 
@@ -21,26 +26,17 @@ NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_PERM_HW_ADDRESS,
                                   PROP_CARRIER,
                                   PROP_S390_SUBCHANNELS, );
 
-typedef struct {
+typedef struct _NMDeviceEthernetPrivate {
     char ** s390_subchannels;
     char *  perm_hw_address;
     guint32 speed;
     bool    carrier;
 } NMDeviceEthernetPrivate;
 
-struct _NMDeviceEthernet {
-    NMDevice                parent;
-    NMDeviceEthernetPrivate _priv;
-};
-
-struct _NMDeviceEthernetClass {
-    NMDeviceClass parent;
-};
-
 G_DEFINE_TYPE(NMDeviceEthernet, nm_device_ethernet, NM_TYPE_DEVICE)
 
 #define NM_DEVICE_ETHERNET_GET_PRIVATE(self) \
-    _NM_GET_PRIVATE(self, NMDeviceEthernet, NM_IS_DEVICE_ETHERNET, NMObject, NMDevice)
+    _NM_GET_PRIVATE_PTR(self, NMDeviceEthernet, NM_IS_DEVICE_ETHERNET, NMObject)
 
 /*****************************************************************************/
 
@@ -181,9 +177,12 @@ connection_compatible(NMDevice *device, NMConnection *connection, GError **error
              ->connection_compatible(device, connection, error))
         return FALSE;
 
-    if (nm_connection_is_type(connection, NM_SETTING_PPPOE_SETTING_NAME)) {
+    if (nm_connection_is_type(connection, NM_SETTING_PPPOE_SETTING_NAME)
+        || nm_connection_is_type(connection, NM_SETTING_WIRED_SETTING_NAME)
+        || (nm_connection_is_type(connection, NM_SETTING_VETH_SETTING_NAME)
+            && NM_IS_DEVICE_VETH(device))) {
         /* NOP */
-    } else if (!nm_connection_is_type(connection, NM_SETTING_WIRED_SETTING_NAME)) {
+    } else {
         g_set_error_literal(error,
                             NM_DEVICE_ERROR,
                             NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
@@ -271,7 +270,13 @@ get_setting_type(NMDevice *device)
 
 static void
 nm_device_ethernet_init(NMDeviceEthernet *device)
-{}
+{
+    NMDeviceEthernetPrivate *priv;
+
+    priv = G_TYPE_INSTANCE_GET_PRIVATE(device, NM_TYPE_DEVICE_ETHERNET, NMDeviceEthernetPrivate);
+
+    device->_priv = priv;
+}
 
 static void
 finalize(GObject *object)
@@ -309,38 +314,34 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
     }
 }
 
-/* TODO: implemented Veth. */
-const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_veth = NML_DBUS_META_IFACE_INIT(
-    NM_DBUS_INTERFACE_DEVICE_VETH,
-    NULL,
-    NML_DBUS_META_INTERFACE_PRIO_NONE,
-    NML_DBUS_META_IFACE_DBUS_PROPERTIES(NML_DBUS_META_PROPERTY_INIT_TODO("Peer", "o"), ), );
-
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_wired = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_WIRED,
     nm_device_ethernet_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_20,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
-        NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceEthernet, _priv.carrier),
+        NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceEthernetPrivate, carrier),
         NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress",
                                         0,
                                         "s",
                                         _nm_device_notify_update_prop_hw_address),
         NML_DBUS_META_PROPERTY_INIT_S("PermHwAddress",
                                       PROP_PERM_HW_ADDRESS,
-                                      NMDeviceEthernet,
-                                      _priv.perm_hw_address),
+                                      NMDeviceEthernetPrivate,
+                                      perm_hw_address),
         NML_DBUS_META_PROPERTY_INIT_AS("S390Subchannels",
                                        PROP_S390_SUBCHANNELS,
-                                       NMDeviceEthernet,
-                                       _priv.s390_subchannels),
-        NML_DBUS_META_PROPERTY_INIT_U("Speed", PROP_SPEED, NMDeviceEthernet, _priv.speed), ), );
+                                       NMDeviceEthernetPrivate,
+                                       s390_subchannels),
+        NML_DBUS_META_PROPERTY_INIT_U("Speed", PROP_SPEED, NMDeviceEthernetPrivate, speed), ),
+    .base_struct_offset = G_STRUCT_OFFSET(NMDeviceEthernet, _priv), );
 
 static void
-nm_device_ethernet_class_init(NMDeviceEthernetClass *eth_class)
+nm_device_ethernet_class_init(NMDeviceEthernetClass *klass)
 {
-    GObjectClass * object_class = G_OBJECT_CLASS(eth_class);
-    NMDeviceClass *device_class = NM_DEVICE_CLASS(eth_class);
+    GObjectClass * object_class = G_OBJECT_CLASS(klass);
+    NMDeviceClass *device_class = NM_DEVICE_CLASS(klass);
+
+    g_type_class_add_private(klass, sizeof(NMDeviceEthernetPrivate));
 
     object_class->get_property = get_property;
     object_class->finalize     = finalize;
diff --git a/libnm/nm-device-ethernet.h b/libnm/nm-device-ethernet.h
index f8dc32c2..877930e6 100644
--- a/libnm/nm-device-ethernet.h
+++ b/libnm/nm-device-ethernet.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2012 Red Hat, Inc.
diff --git a/libnm/nm-device-generic.c b/libnm/nm-device-generic.c
index 9e2f543c..ebc73a7e 100644
--- a/libnm/nm-device-generic.c
+++ b/libnm/nm-device-generic.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2013 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-generic.h"
 
@@ -133,7 +133,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_generic = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_GENERIC,
     nm_device_generic_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress",
                                         0,
diff --git a/libnm/nm-device-generic.h b/libnm/nm-device-generic.h
index 115b520d..5c1f3084 100644
--- a/libnm/nm-device-generic.h
+++ b/libnm/nm-device-generic.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2013 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-infiniband.c b/libnm/nm-device-infiniband.c
index bac15af7..820a4ab4 100644
--- a/libnm/nm-device-infiniband.c
+++ b/libnm/nm-device-infiniband.c
@@ -1,12 +1,14 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2011 - 2012 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-infiniband.h"
 
+#include <linux/if_infiniband.h>
+
 #include "nm-setting-connection.h"
 #include "nm-setting-infiniband.h"
 #include "nm-utils.h"
@@ -143,7 +145,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_infiniband = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_INFINIBAND,
     nm_device_infiniband_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceInfiniband, _priv.carrier),
         NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress",
diff --git a/libnm/nm-device-infiniband.h b/libnm/nm-device-infiniband.h
index 758a54a1..be9a26e5 100644
--- a/libnm/nm-device-infiniband.h
+++ b/libnm/nm-device-infiniband.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2011 - 2012 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-ip-tunnel.c b/libnm/nm-device-ip-tunnel.c
index 84a1cdcd..a6d2ef4a 100644
--- a/libnm/nm-device-ip-tunnel.c
+++ b/libnm/nm-device-ip-tunnel.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2015 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-ip-tunnel.h"
 
@@ -346,7 +346,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_iptunnel = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_IP_TUNNEL,
     nm_device_ip_tunnel_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_Y("EncapsulationLimit",
                                       PROP_ENCAPSULATION_LIMIT,
diff --git a/libnm/nm-device-ip-tunnel.h b/libnm/nm-device-ip-tunnel.h
index 50b877b8..0d9c3e55 100644
--- a/libnm/nm-device-ip-tunnel.h
+++ b/libnm/nm-device-ip-tunnel.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2015 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-macsec.c b/libnm/nm-device-macsec.c
index 78b68630..3d6e1d38 100644
--- a/libnm/nm-device-macsec.c
+++ b/libnm/nm-device-macsec.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-macsec.h"
 
@@ -387,7 +387,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_macsec = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_MACSEC,
     nm_device_macsec_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_T("CipherSuite",
                                       PROP_CIPHER_SUITE,
diff --git a/libnm/nm-device-macsec.h b/libnm/nm-device-macsec.h
index f33341c8..5a036601 100644
--- a/libnm/nm-device-macsec.h
+++ b/libnm/nm-device-macsec.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-macvlan.c b/libnm/nm-device-macvlan.c
index ad5f8b95..773de990 100644
--- a/libnm/nm-device-macvlan.c
+++ b/libnm/nm-device-macvlan.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2015 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-setting-macvlan.h"
 
@@ -210,7 +210,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_macvlan = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_MACVLAN,
     nm_device_macvlan_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_S("Mode", PROP_MODE, NMDeviceMacvlan, _priv.mode),
         NML_DBUS_META_PROPERTY_INIT_B("NoPromisc",
diff --git a/libnm/nm-device-macvlan.h b/libnm/nm-device-macvlan.h
index 402cdd26..b8d27066 100644
--- a/libnm/nm-device-macvlan.h
+++ b/libnm/nm-device-macvlan.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2015 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-modem.c b/libnm/nm-device-modem.c
index a4493dfe..51b49fea 100644
--- a/libnm/nm-device-modem.c
+++ b/libnm/nm-device-modem.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2011 - 2012 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-modem.h"
 
@@ -262,7 +262,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_modem = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_MODEM,
     nm_device_modem_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_S("Apn", PROP_APN, NMDeviceModem, _priv.apn),
         NML_DBUS_META_PROPERTY_INIT_U("CurrentCapabilities",
diff --git a/libnm/nm-device-modem.h b/libnm/nm-device-modem.h
index 80ecdc9e..eced137a 100644
--- a/libnm/nm-device-modem.h
+++ b/libnm/nm-device-modem.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2011 - 2012 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
diff --git a/libnm/nm-device-olpc-mesh.c b/libnm/nm-device-olpc-mesh.c
index a9bc85a6..697b3381 100644
--- a/libnm/nm-device-olpc-mesh.c
+++ b/libnm/nm-device-olpc-mesh.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2012 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-olpc-mesh.h"
 
@@ -139,7 +139,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_olpcmesh = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_OLPC_MESH,
     nm_device_olpc_mesh_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_U("ActiveChannel",
                                       PROP_ACTIVE_CHANNEL,
diff --git a/libnm/nm-device-olpc-mesh.h b/libnm/nm-device-olpc-mesh.h
index 28d2d618..d8b835fa 100644
--- a/libnm/nm-device-olpc-mesh.h
+++ b/libnm/nm-device-olpc-mesh.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2012 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-ovs-bridge.c b/libnm/nm-device-ovs-bridge.c
index faad9b70..9c175548 100644
--- a/libnm/nm-device-ovs-bridge.c
+++ b/libnm/nm-device-ovs-bridge.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017, 2018 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-ovs-bridge.h"
 
@@ -126,7 +126,7 @@ nm_device_ovs_bridge_init(NMDeviceOvsBridge *device)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_ovsbridge =
     NML_DBUS_META_IFACE_INIT_PROP(NM_DBUS_INTERFACE_DEVICE_OVS_BRIDGE,
                                   nm_device_ovs_bridge_get_type,
-                                  NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+                                  NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
                                   NML_DBUS_META_IFACE_DBUS_PROPERTIES(
                                       NML_DBUS_META_PROPERTY_INIT_AO_PROP("Slaves",
                                                                           PROP_SLAVES,
diff --git a/libnm/nm-device-ovs-bridge.h b/libnm/nm-device-ovs-bridge.h
index f0359961..50754e11 100644
--- a/libnm/nm-device-ovs-bridge.h
+++ b/libnm/nm-device-ovs-bridge.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017, 2018 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-ovs-interface.c b/libnm/nm-device-ovs-interface.c
index 7ed55c79..1c757a5b 100644
--- a/libnm/nm-device-ovs-interface.c
+++ b/libnm/nm-device-ovs-interface.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-ovs-interface.h"
 
@@ -76,7 +76,7 @@ nm_device_ovs_interface_init(NMDeviceOvsInterface *device)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_ovsinterface =
     NML_DBUS_META_IFACE_INIT(NM_DBUS_INTERFACE_DEVICE_OVS_INTERFACE,
                              nm_device_ovs_interface_get_type,
-                             NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, );
+                             NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, );
 
 static void
 nm_device_ovs_interface_class_init(NMDeviceOvsInterfaceClass *ovs_interface_class)
diff --git a/libnm/nm-device-ovs-interface.h b/libnm/nm-device-ovs-interface.h
index 719e91c1..6767ad4a 100644
--- a/libnm/nm-device-ovs-interface.h
+++ b/libnm/nm-device-ovs-interface.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-ovs-port.c b/libnm/nm-device-ovs-port.c
index e96337db..1b3faa53 100644
--- a/libnm/nm-device-ovs-port.c
+++ b/libnm/nm-device-ovs-port.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017, 2018 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-ovs-port.h"
 
@@ -126,7 +126,7 @@ nm_device_ovs_port_init(NMDeviceOvsPort *device)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_ovsport =
     NML_DBUS_META_IFACE_INIT_PROP(NM_DBUS_INTERFACE_DEVICE_OVS_PORT,
                                   nm_device_ovs_port_get_type,
-                                  NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+                                  NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
                                   NML_DBUS_META_IFACE_DBUS_PROPERTIES(
                                       NML_DBUS_META_PROPERTY_INIT_AO_PROP("Slaves",
                                                                           PROP_SLAVES,
diff --git a/libnm/nm-device-ovs-port.h b/libnm/nm-device-ovs-port.h
index b0fca9ab..1f69641b 100644
--- a/libnm/nm-device-ovs-port.h
+++ b/libnm/nm-device-ovs-port.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017, 2018 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-ppp.c b/libnm/nm-device-ppp.c
index fff2f7af..a1c1f741 100644
--- a/libnm/nm-device-ppp.c
+++ b/libnm/nm-device-ppp.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-ppp.h"
 
@@ -30,7 +30,7 @@ nm_device_ppp_init(NMDevicePpp *device)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_ppp =
     NML_DBUS_META_IFACE_INIT(NM_DBUS_INTERFACE_DEVICE_PPP,
                              nm_device_ppp_get_type,
-                             NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, );
+                             NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, );
 
 static void
 nm_device_ppp_class_init(NMDevicePppClass *klass)
diff --git a/libnm/nm-device-ppp.h b/libnm/nm-device-ppp.h
index 6e306057..7bd282d7 100644
--- a/libnm/nm-device-ppp.h
+++ b/libnm/nm-device-ppp.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-team.c b/libnm/nm-device-team.c
index 9a1e9f1f..d76dd5c1 100644
--- a/libnm/nm-device-team.c
+++ b/libnm/nm-device-team.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-team.h"
 
@@ -177,7 +177,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_team = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_TEAM,
     nm_device_team_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceTeam, _priv.carrier),
         NML_DBUS_META_PROPERTY_INIT_S("Config", PROP_CONFIG, NMDeviceTeam, _priv.config),
diff --git a/libnm/nm-device-team.h b/libnm/nm-device-team.h
index 03d8e55b..921353b6 100644
--- a/libnm/nm-device-team.h
+++ b/libnm/nm-device-team.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
  */
diff --git a/libnm/nm-device-tun.c b/libnm/nm-device-tun.c
index 35f939ef..0445da9a 100644
--- a/libnm/nm-device-tun.c
+++ b/libnm/nm-device-tun.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2015 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-tun.h"
 
@@ -275,7 +275,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_tun = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_TUN,
     nm_device_tun_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_X("Group", PROP_GROUP, NMDeviceTun, _priv.group),
         NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress",
diff --git a/libnm/nm-device-tun.h b/libnm/nm-device-tun.h
index ac668b07..ee7342de 100644
--- a/libnm/nm-device-tun.h
+++ b/libnm/nm-device-tun.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2015 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-veth.c b/libnm/nm-device-veth.c
new file mode 100644
index 00000000..9a9f7680
--- /dev/null
+++ b/libnm/nm-device-veth.c
@@ -0,0 +1,124 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2020 Red Hat, Inc.
+ */
+
+#include "libnm/nm-default-libnm.h"
+
+#include "nm-device-veth.h"
+
+#include "nm-setting-connection.h"
+#include "nm-setting-veth.h"
+#include "nm-setting-wired.h"
+#include "nm-utils.h"
+#include "nm-device-ethernet.h"
+#include "nm-object-private.h"
+
+/*****************************************************************************/
+
+NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_PEER, );
+
+typedef struct {
+    NMLDBusPropertyO peer;
+} NMDeviceVethPrivate;
+
+struct _NMDeviceVeth {
+    NMDeviceEthernet    parent;
+    NMDeviceVethPrivate _priv;
+};
+
+struct _NMDeviceVethClass {
+    NMDeviceEthernetClass parent;
+};
+
+G_DEFINE_TYPE(NMDeviceVeth, nm_device_veth, NM_TYPE_DEVICE_ETHERNET)
+
+#define NM_DEVICE_VETH_GET_PRIVATE(self) \
+    _NM_GET_PRIVATE(self, NMDeviceVeth, NM_IS_DEVICE_VETH, NMObject, NMDevice)
+
+/*****************************************************************************/
+
+/**
+ * nm_device_veth_get_peer:
+ * @device: a #NMDeviceVeth
+ *
+ * Returns: (transfer none): the device's peer device
+ *
+ * Since: 1.30
+ **/
+NMDevice *
+nm_device_veth_get_peer(NMDeviceVeth *device)
+{
+    g_return_val_if_fail(NM_IS_DEVICE_VETH(device), FALSE);
+
+    return nml_dbus_property_o_get_obj(&NM_DEVICE_VETH_GET_PRIVATE(device)->peer);
+}
+
+static GType
+get_setting_type(NMDevice *device)
+{
+    return NM_TYPE_SETTING_VETH;
+}
+
+/*****************************************************************************/
+
+static void
+get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+    NMDeviceVeth *device = NM_DEVICE_VETH(object);
+
+    switch (prop_id) {
+    case PROP_PEER:
+        g_value_set_object(value, nm_device_veth_get_peer(device));
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+        break;
+    }
+}
+
+static void
+nm_device_veth_init(NMDeviceVeth *device)
+{}
+
+const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_veth =
+    NML_DBUS_META_IFACE_INIT_PROP(NM_DBUS_INTERFACE_DEVICE_VETH,
+                                  nm_device_veth_get_type,
+                                  NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
+                                  NML_DBUS_META_IFACE_DBUS_PROPERTIES(
+                                      NML_DBUS_META_PROPERTY_INIT_O_PROP("Peer",
+                                                                         PROP_PEER,
+                                                                         NMDeviceVeth,
+                                                                         _priv.peer,
+                                                                         nm_device_get_type), ), );
+
+static void
+nm_device_veth_class_init(NMDeviceVethClass *klass)
+{
+    GObjectClass * object_class    = G_OBJECT_CLASS(klass);
+    NMObjectClass *nm_object_class = NM_OBJECT_CLASS(klass);
+    NMDeviceClass *device_class    = NM_DEVICE_CLASS(klass);
+
+    object_class->get_property = get_property;
+
+    _NM_OBJECT_CLASS_INIT_PRIV_PTR_DIRECT(nm_object_class, NMDeviceVeth);
+
+    _NM_OBJECT_CLASS_INIT_PROPERTY_O_FIELDS_1(nm_object_class, NMDeviceVethPrivate, peer);
+
+    device_class->get_setting_type = get_setting_type;
+
+    /**
+     * NMDeviceVeth:peer:
+     *
+     * The device's peer device.
+     *
+     * Since: 1.30
+     **/
+    obj_properties[PROP_PEER] = g_param_spec_object(NM_DEVICE_VETH_PEER,
+                                                    "",
+                                                    "",
+                                                    NM_TYPE_DEVICE,
+                                                    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+    _nml_dbus_meta_class_init_with_properties(object_class, &_nml_dbus_meta_iface_nm_device_veth);
+}
diff --git a/libnm/nm-device-veth.h b/libnm/nm-device-veth.h
new file mode 100644
index 00000000..689762a7
--- /dev/null
+++ b/libnm/nm-device-veth.h
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2020 Red Hat, Inc.
+ */
+
+#ifndef __NM_DEVICE_VETH_H__
+#define __NM_DEVICE_VETH_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-device.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_VETH (nm_device_veth_get_type())
+#define NM_DEVICE_VETH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_DEVICE_VETH, NMDeviceVeth))
+#define NM_DEVICE_VETH_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_DEVICE_VETH, NMDeviceVethClass))
+#define NM_IS_DEVICE_VETH(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_DEVICE_VETH))
+#define NM_IS_DEVICE_VETH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_DEVICE_VETH))
+#define NM_DEVICE_VETH_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_DEVICE_VETH, NMDeviceVethClass))
+
+#define NM_DEVICE_VETH_PEER "peer"
+
+/**
+ * NMDeviceVeth:
+ */
+typedef struct _NMDeviceVethClass NMDeviceVethClass;
+
+NM_AVAILABLE_IN_1_30
+GType nm_device_veth_get_type(void);
+
+NM_AVAILABLE_IN_1_30
+NMDevice *nm_device_veth_get_peer(NMDeviceVeth *device);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_VETH_H__ */
diff --git a/libnm/nm-device-vlan.c b/libnm/nm-device-vlan.c
index 07ea02f7..e7419b23 100644
--- a/libnm/nm-device-vlan.c
+++ b/libnm/nm-device-vlan.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2012 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-vlan.h"
 
@@ -188,7 +188,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_vlan = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_VLAN,
     nm_device_vlan_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceVlan, _priv.carrier),
         NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress",
diff --git a/libnm/nm-device-vlan.h b/libnm/nm-device-vlan.h
index 30dbbcc3..81430509 100644
--- a/libnm/nm-device-vlan.h
+++ b/libnm/nm-device-vlan.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2012 - 2014 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-vrf.c b/libnm/nm-device-vrf.c
index 0c00c525..73f27707 100644
--- a/libnm/nm-device-vrf.c
+++ b/libnm/nm-device-vrf.c
@@ -1,6 +1,6 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-vrf.h"
 
@@ -108,7 +108,7 @@ nm_device_vrf_init(NMDeviceVrf *device)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_vrf = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_VRF,
     nm_device_vrf_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_U("Table", PROP_TABLE, NMDeviceVrf, _priv.table), ), );
 
diff --git a/libnm/nm-device-vrf.h b/libnm/nm-device-vrf.h
index f52625ca..f835dd2f 100644
--- a/libnm/nm-device-vrf.h
+++ b/libnm/nm-device-vrf.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #ifndef __NM_DEVICE_VRF_H__
 #define __NM_DEVICE_VRF_H__
diff --git a/libnm/nm-device-vxlan.c b/libnm/nm-device-vxlan.c
index d4a0e2c0..36d95f91 100644
--- a/libnm/nm-device-vxlan.c
+++ b/libnm/nm-device-vxlan.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2015 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-vxlan.h"
 
@@ -486,7 +486,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_vxlan = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_VXLAN,
     nm_device_vxlan_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_U("Ageing", PROP_AGEING, NMDeviceVxlan, _priv.ageing),
         NML_DBUS_META_PROPERTY_INIT_Q("DstPort", PROP_DST_PORT, NMDeviceVxlan, _priv.dst_port),
diff --git a/libnm/nm-device-vxlan.h b/libnm/nm-device-vxlan.h
index 70ab1ac6..9ef5eb2d 100644
--- a/libnm/nm-device-vxlan.h
+++ b/libnm/nm-device-vxlan.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2015 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-wifi-p2p.c b/libnm/nm-device-wifi-p2p.c
index dcf5f3e5..019bf1cf 100644
--- a/libnm/nm-device-wifi-p2p.c
+++ b/libnm/nm-device-wifi-p2p.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2018 - 2019 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-wifi-p2p.h"
 
@@ -325,7 +325,7 @@ nm_device_wifi_p2p_init(NMDeviceWifiP2P *device)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_wifip2p = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_WIFI_P2P,
     nm_device_wifi_p2p_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress",
                                         0,
diff --git a/libnm/nm-device-wifi-p2p.h b/libnm/nm-device-wifi-p2p.h
index defa88e0..374ef4bd 100644
--- a/libnm/nm-device-wifi-p2p.h
+++ b/libnm/nm-device-wifi-p2p.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2018 - 2019 Red Hat, Inc.
  */
diff --git a/libnm/nm-device-wifi.c b/libnm/nm-device-wifi.c
index a84492f2..90e4a302 100644
--- a/libnm/nm-device-wifi.c
+++ b/libnm/nm-device-wifi.c
@@ -1,13 +1,15 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2014 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-wifi.h"
 
+#include <linux/if_ether.h>
+
 #include "nm-glib-aux/nm-dbus-aux.h"
 #include "nm-setting-connection.h"
 #include "nm-setting-wireless.h"
@@ -496,7 +498,8 @@ connection_compatible(NMDevice *device, NMConnection *connection, GError **error
     if (s_wsec) {
         /* Connection has security, verify it against the device's capabilities */
         key_mgmt = nm_setting_wireless_security_get_key_mgmt(s_wsec);
-        if (!g_strcmp0(key_mgmt, "wpa-psk") || !g_strcmp0(key_mgmt, "wpa-eap")) {
+        if (nm_streq(key_mgmt, "wpa-psk") || nm_streq(key_mgmt, "wpa-eap")
+            || nm_streq(key_mgmt, "wpa-eap-suite-b-192")) {
             wifi_caps = nm_device_wifi_get_capabilities(NM_DEVICE_WIFI(device));
 
             /* Is device only WEP capable? */
@@ -604,7 +607,7 @@ finalize(GObject *object)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_wireless = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_WIRELESS,
     nm_device_wifi_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_AO_PROP("AccessPoints",
                                             PROP_ACCESS_POINTS,
diff --git a/libnm/nm-device-wifi.h b/libnm/nm-device-wifi.h
index f738d649..bf712bbc 100644
--- a/libnm/nm-device-wifi.h
+++ b/libnm/nm-device-wifi.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2012 Red Hat, Inc.
diff --git a/libnm/nm-device-wimax.c b/libnm/nm-device-wimax.c
index c1a1a9ba..9b42354c 100644
--- a/libnm/nm-device-wimax.c
+++ b/libnm/nm-device-wimax.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2011 - 2012 Red Hat, Inc.
  * Copyright (C) 2009 Novell, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-wimax.h"
 
diff --git a/libnm/nm-device-wimax.h b/libnm/nm-device-wimax.h
index 652dc73a..8a0fd901 100644
--- a/libnm/nm-device-wimax.h
+++ b/libnm/nm-device-wimax.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2011 - 2012 Red Hat, Inc.
  * Copyright (C) 2009 Novell, Inc.
diff --git a/libnm/nm-device-wireguard.c b/libnm/nm-device-wireguard.c
index 43febf4c..a4baec4f 100644
--- a/libnm/nm-device-wireguard.c
+++ b/libnm/nm-device-wireguard.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2018 Javier Arteaga <jarteaga@jbeta.is>
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-wireguard.h"
 
@@ -131,7 +131,7 @@ finalize(GObject *object)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_wireguard = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DEVICE_WIREGUARD,
     nm_device_wireguard_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_U("FwMark", PROP_FWMARK, NMDeviceWireGuard, _priv.fwmark),
         NML_DBUS_META_PROPERTY_INIT_Q("ListenPort",
diff --git a/libnm/nm-device-wireguard.h b/libnm/nm-device-wireguard.h
index 8fffd923..f54695ee 100644
--- a/libnm/nm-device-wireguard.h
+++ b/libnm/nm-device-wireguard.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2018 Javier Arteaga <jarteaga@jbeta.is>
  */
diff --git a/libnm/nm-device-wpan.c b/libnm/nm-device-wpan.c
index 83597c62..7218a8c6 100644
--- a/libnm/nm-device-wpan.c
+++ b/libnm/nm-device-wpan.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2018 Lubomir Rintel <lkundrak@v3.sk>
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device-wpan.h"
 
@@ -76,7 +76,7 @@ nm_device_wpan_init(NMDeviceWpan *device)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_wpan = NML_DBUS_META_IFACE_INIT(
     NM_DBUS_INTERFACE_DEVICE_WPAN,
     nm_device_wpan_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress",
                                         0,
diff --git a/libnm/nm-device-wpan.h b/libnm/nm-device-wpan.h
index d5c57c19..7d50fd9e 100644
--- a/libnm/nm-device-wpan.h
+++ b/libnm/nm-device-wpan.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2018 Lubomir Rintel <lkundrak@v3.sk>
  */
diff --git a/libnm/nm-device.c b/libnm/nm-device.c
index 9e7eb6ba..9cb88dae 100644
--- a/libnm/nm-device.c
+++ b/libnm/nm-device.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2018 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-device.h"
 
@@ -1223,8 +1223,11 @@ nm_device_get_type_description(NMDevice *device)
     }
 
     typename = G_OBJECT_TYPE_NAME(device);
-    if (g_str_has_prefix(typename, "NMDevice"))
+    if (g_str_has_prefix(typename, "NMDevice")) {
         typename += 8;
+        if (nm_streq(typename, "Veth"))
+            typename = "Ethernet";
+    }
     priv->type_description = g_ascii_strdown(typename, -1);
 
     return _nml_coerce_property_str_not_empty(priv->type_description);
@@ -2814,6 +2817,10 @@ nm_device_connection_compatible(NMDevice *device, NMConnection *connection, GErr
  * Returns: (transfer full) (element-type NMConnection): an array of
  * #NMConnections that could be activated with the given @device.  The array
  * should be freed with g_ptr_array_unref() when it is no longer required.
+ *
+ * WARNING: the transfer annotation for this function may not work correctly
+ *   with bindings. See https://gitlab.gnome.org/GNOME/gobject-introspection/-/issues/305.
+ *   You can filter the list yourself with nm_device_connection_valid().
  **/
 GPtrArray *
 nm_device_filter_connections(NMDevice *device, const GPtrArray *connections)
diff --git a/libnm/nm-device.h b/libnm/nm-device.h
index 28b59a5f..0ee2c93b 100644
--- a/libnm/nm-device.h
+++ b/libnm/nm-device.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2013 Red Hat, Inc.
diff --git a/libnm/nm-dhcp-config.c b/libnm/nm-dhcp-config.c
index 1b8a8d15..ec7da6de 100644
--- a/libnm/nm-dhcp-config.c
+++ b/libnm/nm-dhcp-config.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2008 - 2014 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-dhcp-config.h"
 
@@ -102,7 +102,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_dhcp4config = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DHCP4_CONFIG,
     nm_dhcp4_config_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_FCN("Options",
                                         PROP_OPTIONS,
@@ -113,7 +113,7 @@ const NMLDBusMetaIface _nml_dbus_meta_iface_nm_dhcp4config = NML_DBUS_META_IFACE
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_dhcp6config = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_DHCP6_CONFIG,
     nm_dhcp6_config_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_FCN("Options",
                                         PROP_OPTIONS,
diff --git a/libnm/nm-dhcp-config.h b/libnm/nm-dhcp-config.h
index 9e6a09d4..7663fb9a 100644
--- a/libnm/nm-dhcp-config.h
+++ b/libnm/nm-dhcp-config.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2008 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
diff --git a/libnm/nm-dhcp4-config.c b/libnm/nm-dhcp4-config.c
index d5ad7edf..25219d45 100644
--- a/libnm/nm-dhcp4-config.c
+++ b/libnm/nm-dhcp4-config.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2014 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-dhcp4-config.h"
 
diff --git a/libnm/nm-dhcp4-config.h b/libnm/nm-dhcp4-config.h
index 6a3c6597..d0ea2b46 100644
--- a/libnm/nm-dhcp4-config.h
+++ b/libnm/nm-dhcp4-config.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2014 Red Hat, Inc.
  */
diff --git a/libnm/nm-dhcp6-config.c b/libnm/nm-dhcp6-config.c
index 63a42832..2574b36c 100644
--- a/libnm/nm-dhcp6-config.c
+++ b/libnm/nm-dhcp6-config.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2014 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-dhcp6-config.h"
 
diff --git a/libnm/nm-dhcp6-config.h b/libnm/nm-dhcp6-config.h
index 66ad7081..253594e6 100644
--- a/libnm/nm-dhcp6-config.h
+++ b/libnm/nm-dhcp6-config.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2014 Red Hat, Inc.
  */
diff --git a/libnm/nm-dns-manager.c b/libnm/nm-dns-manager.c
index ce55bb7f..6261c71a 100644
--- a/libnm/nm-dns-manager.c
+++ b/libnm/nm-dns-manager.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2016 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-dns-manager.h"
 
diff --git a/libnm/nm-dns-manager.h b/libnm/nm-dns-manager.h
index ee863916..8053b243 100644
--- a/libnm/nm-dns-manager.h
+++ b/libnm/nm-dns-manager.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2016 Red Hat, Inc.
  */
diff --git a/libnm/nm-enum-types.c.template b/libnm/nm-enum-types.c.template
deleted file mode 100644
index 5abd5c79..00000000
--- a/libnm/nm-enum-types.c.template
+++ /dev/null
@@ -1,76 +0,0 @@
-/*** BEGIN file-header ***/
-#include "config.h"
-
-#include "nm-enum-types.h"
-#include "nm-default.h"
-
-#include "nm-version-macros.h"
-#include "NetworkManager.h"
-#include "nm-access-point.h"
-#include "nm-active-connection.h"
-#include "nm-checkpoint.h"
-#include "nm-client.h"
-#include "nm-device-adsl.h"
-#include "nm-device-bond.h"
-#include "nm-device-bridge.h"
-#include "nm-device-bt.h"
-#include "nm-device-dummy.h"
-#include "nm-device-ethernet.h"
-#include "nm-device-generic.h"
-#include "nm-device-infiniband.h"
-#include "nm-device-ip-tunnel.h"
-#include "nm-device-macsec.h"
-#include "nm-device-macvlan.h"
-#include "nm-device-modem.h"
-#include "nm-device-olpc-mesh.h"
-#include "nm-device-ovs-interface.h"
-#include "nm-device-ovs-port.h"
-#include "nm-device-ovs-bridge.h"
-#include "nm-device-ppp.h"
-#include "nm-device-team.h"
-#include "nm-device-tun.h"
-#include "nm-device-vlan.h"
-#include "nm-device-vxlan.h"
-#include "nm-device-wifi.h"
-#include "nm-device-wimax.h"
-#include "nm-device.h"
-#include "nm-dhcp-config.h"
-#include "nm-ip-config.h"
-#include "nm-object.h"
-#include "nm-remote-connection.h"
-#include "nm-types.h"
-#include "nm-vpn-connection.h"
-#include "nm-vpn-editor.h"
-#include "nm-wimax-nsp.h"
-#include "nm-secret-agent-old.h"
-#include "nm-vpn-plugin-old.h"
-#include "nm-vpn-service-plugin.h"
-/*** END file-header ***/
-
-/*** BEGIN value-header ***/
-GType
-@enum_name@_get_type (void)
-{
-  static volatile gsize g_define_type_id__volatile = 0;
-
-  if (g_once_init_enter (&g_define_type_id__volatile))
-    {
-      static const G@Type@Value values[] = {
-/*** END value-header ***/
-
-/*** BEGIN value-production ***/
-        { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
-/*** END value-production ***/
-
-/*** BEGIN value-tail ***/
-        { 0, NULL, NULL }
-      };
-      GType g_define_type_id =
-        g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
-      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
-    }
-
-  return g_define_type_id__volatile;
-}
-
-/*** END value-tail ***/
diff --git a/libnm/nm-enum-types.h.template b/libnm/nm-enum-types.h.template
deleted file mode 100644
index bd9ce40b..00000000
--- a/libnm/nm-enum-types.h.template
+++ /dev/null
@@ -1,22 +0,0 @@
-/*** BEGIN file-header ***/
-#ifndef __NM_ENUM_TYPES_H__
-#define __NM_ENUM_TYPES_H__
-
-#include <nm-core-enum-types.h>
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-/*** END file-header ***/
-
-/*** BEGIN enumeration-production ***/
-GType @enum_name@_get_type (void) G_GNUC_CONST;
-#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
-
-/*** END enumeration-production ***/
-
-/*** BEGIN file-tail ***/
-G_END_DECLS
-
-#endif /* __NM_ENUM_TYPES_H__ */
-/*** END file-tail ***/
diff --git a/libnm/nm-ethtool-utils.h b/libnm/nm-ethtool-utils.h
new file mode 100644
index 00000000..d422724b
--- /dev/null
+++ b/libnm/nm-ethtool-utils.h
@@ -0,0 +1,107 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2018 Red Hat, Inc.
+ */
+
+#ifndef __NM_ETHTOOL_UTILS_H__
+#define __NM_ETHTOOL_UTILS_H__
+
+G_BEGIN_DECLS
+
+/*****************************************************************************/
+
+#define NM_ETHTOOL_OPTNAME_FEATURE_ESP_HW_OFFLOAD             "feature-esp-hw-offload"
+#define NM_ETHTOOL_OPTNAME_FEATURE_ESP_TX_CSUM_HW_OFFLOAD     "feature-esp-tx-csum-hw-offload"
+#define NM_ETHTOOL_OPTNAME_FEATURE_FCOE_MTU                   "feature-fcoe-mtu"
+#define NM_ETHTOOL_OPTNAME_FEATURE_GRO                        "feature-gro"
+#define NM_ETHTOOL_OPTNAME_FEATURE_GSO                        "feature-gso"
+#define NM_ETHTOOL_OPTNAME_FEATURE_HIGHDMA                    "feature-highdma"
+#define NM_ETHTOOL_OPTNAME_FEATURE_HW_TC_OFFLOAD              "feature-hw-tc-offload"
+#define NM_ETHTOOL_OPTNAME_FEATURE_L2_FWD_OFFLOAD             "feature-l2-fwd-offload"
+#define NM_ETHTOOL_OPTNAME_FEATURE_LOOPBACK                   "feature-loopback"
+#define NM_ETHTOOL_OPTNAME_FEATURE_LRO                        "feature-lro"
+#define NM_ETHTOOL_OPTNAME_FEATURE_MACSEC_HW_OFFLOAD          "feature-macsec-hw-offload"
+#define NM_ETHTOOL_OPTNAME_FEATURE_NTUPLE                     "feature-ntuple"
+#define NM_ETHTOOL_OPTNAME_FEATURE_RX                         "feature-rx"
+#define NM_ETHTOOL_OPTNAME_FEATURE_RXHASH                     "feature-rxhash"
+#define NM_ETHTOOL_OPTNAME_FEATURE_RXVLAN                     "feature-rxvlan"
+#define NM_ETHTOOL_OPTNAME_FEATURE_RX_ALL                     "feature-rx-all"
+#define NM_ETHTOOL_OPTNAME_FEATURE_RX_FCS                     "feature-rx-fcs"
+#define NM_ETHTOOL_OPTNAME_FEATURE_RX_GRO_HW                  "feature-rx-gro-hw"
+#define NM_ETHTOOL_OPTNAME_FEATURE_RX_GRO_LIST                "feature-rx-gro-list"
+#define NM_ETHTOOL_OPTNAME_FEATURE_RX_UDP_GRO_FORWARDING      "feature-rx-udp-gro-forwarding"
+#define NM_ETHTOOL_OPTNAME_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD "feature-rx-udp_tunnel-port-offload"
+#define NM_ETHTOOL_OPTNAME_FEATURE_RX_VLAN_FILTER             "feature-rx-vlan-filter"
+#define NM_ETHTOOL_OPTNAME_FEATURE_RX_VLAN_STAG_FILTER        "feature-rx-vlan-stag-filter"
+#define NM_ETHTOOL_OPTNAME_FEATURE_RX_VLAN_STAG_HW_PARSE      "feature-rx-vlan-stag-hw-parse"
+#define NM_ETHTOOL_OPTNAME_FEATURE_SG                         "feature-sg"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_RECORD              "feature-tls-hw-record"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_RX_OFFLOAD          "feature-tls-hw-rx-offload"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_TX_OFFLOAD          "feature-tls-hw-tx-offload"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TSO                        "feature-tso"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX                         "feature-tx"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TXVLAN                     "feature-txvlan"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_FCOE_CRC       "feature-tx-checksum-fcoe-crc"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_IPV4           "feature-tx-checksum-ipv4"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_IPV6           "feature-tx-checksum-ipv6"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_IP_GENERIC     "feature-tx-checksum-ip-generic"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_SCTP           "feature-tx-checksum-sctp"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_ESP_SEGMENTATION        "feature-tx-esp-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_FCOE_SEGMENTATION       "feature-tx-fcoe-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_CSUM_SEGMENTATION   "feature-tx-gre-csum-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_SEGMENTATION        "feature-tx-gre-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_LIST                "feature-tx-gso-list"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_PARTIAL             "feature-tx-gso-partial"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_ROBUST              "feature-tx-gso-robust"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_IPXIP4_SEGMENTATION     "feature-tx-ipxip4-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_IPXIP6_SEGMENTATION     "feature-tx-ipxip6-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_NOCACHE_COPY            "feature-tx-nocache-copy"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_SCATTER_GATHER          "feature-tx-scatter-gather"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_SCATTER_GATHER_FRAGLIST "feature-tx-scatter-gather-fraglist"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_SCTP_SEGMENTATION       "feature-tx-sctp-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP6_SEGMENTATION       "feature-tx-tcp6-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_ECN_SEGMENTATION    "feature-tx-tcp-ecn-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_MANGLEID_SEGMENTATION \
+    "feature-tx-tcp-mangleid-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_SEGMENTATION "feature-tx-tcp-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION \
+    "feature-tx-tunnel-remcsum-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_SEGMENTATION "feature-tx-udp-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION \
+    "feature-tx-udp_tnl-csum-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_TNL_SEGMENTATION "feature-tx-udp_tnl-segmentation"
+#define NM_ETHTOOL_OPTNAME_FEATURE_TX_VLAN_STAG_HW_INSERT  "feature-tx-vlan-stag-hw-insert"
+
+#define NM_ETHTOOL_OPTNAME_COALESCE_ADAPTIVE_RX       "coalesce-adaptive-rx"
+#define NM_ETHTOOL_OPTNAME_COALESCE_ADAPTIVE_TX       "coalesce-adaptive-tx"
+#define NM_ETHTOOL_OPTNAME_COALESCE_PKT_RATE_HIGH     "coalesce-pkt-rate-high"
+#define NM_ETHTOOL_OPTNAME_COALESCE_PKT_RATE_LOW      "coalesce-pkt-rate-low"
+#define NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES         "coalesce-rx-frames"
+#define NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES_HIGH    "coalesce-rx-frames-high"
+#define NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES_IRQ     "coalesce-rx-frames-irq"
+#define NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES_LOW     "coalesce-rx-frames-low"
+#define NM_ETHTOOL_OPTNAME_COALESCE_RX_USECS          "coalesce-rx-usecs"
+#define NM_ETHTOOL_OPTNAME_COALESCE_RX_USECS_HIGH     "coalesce-rx-usecs-high"
+#define NM_ETHTOOL_OPTNAME_COALESCE_RX_USECS_IRQ      "coalesce-rx-usecs-irq"
+#define NM_ETHTOOL_OPTNAME_COALESCE_RX_USECS_LOW      "coalesce-rx-usecs-low"
+#define NM_ETHTOOL_OPTNAME_COALESCE_SAMPLE_INTERVAL   "coalesce-sample-interval"
+#define NM_ETHTOOL_OPTNAME_COALESCE_STATS_BLOCK_USECS "coalesce-stats-block-usecs"
+#define NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES         "coalesce-tx-frames"
+#define NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES_HIGH    "coalesce-tx-frames-high"
+#define NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES_IRQ     "coalesce-tx-frames-irq"
+#define NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES_LOW     "coalesce-tx-frames-low"
+#define NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS          "coalesce-tx-usecs"
+#define NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS_HIGH     "coalesce-tx-usecs-high"
+#define NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS_IRQ      "coalesce-tx-usecs-irq"
+#define NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS_LOW      "coalesce-tx-usecs-low"
+
+#define NM_ETHTOOL_OPTNAME_RING_RX       "ring-rx"
+#define NM_ETHTOOL_OPTNAME_RING_RX_JUMBO "ring-rx-jumbo"
+#define NM_ETHTOOL_OPTNAME_RING_RX_MINI  "ring-rx-mini"
+#define NM_ETHTOOL_OPTNAME_RING_TX       "ring-tx"
+
+/*****************************************************************************/
+
+G_END_DECLS
+
+#endif /* __NM_ETHTOOL_UTILS_H__ */
diff --git a/libnm/nm-ip-config.c b/libnm/nm-ip-config.c
index 5877e212..1663c622 100644
--- a/libnm/nm-ip-config.c
+++ b/libnm/nm-ip-config.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2011 Novell, Inc.
  * Copyright (C) 2008 - 2014 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-ip-config.h"
 
@@ -316,7 +316,7 @@ finalize(GObject *object)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_ip4config = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_IP4_CONFIG,
     nm_ip4_config_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_FCN("AddressData",
                                         PROP_ADDRESSES,
@@ -364,7 +364,7 @@ const NMLDBusMetaIface _nml_dbus_meta_iface_nm_ip4config = NML_DBUS_META_IFACE_I
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_ip6config = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_IP6_CONFIG,
     nm_ip6_config_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_FCN("AddressData",
                                         PROP_ADDRESSES,
diff --git a/libnm/nm-ip-config.h b/libnm/nm-ip-config.h
index 165bcf94..bdfebb6a 100644
--- a/libnm/nm-ip-config.h
+++ b/libnm/nm-ip-config.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2008 - 2014 Red Hat, Inc.
diff --git a/libnm/nm-ip4-config.c b/libnm/nm-ip4-config.c
index 0a2df31a..6c4a4ab3 100644
--- a/libnm/nm-ip4-config.c
+++ b/libnm/nm-ip4-config.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2014 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-ip4-config.h"
 
diff --git a/libnm/nm-ip4-config.h b/libnm/nm-ip4-config.h
index 9c7ece38..b9297dc0 100644
--- a/libnm/nm-ip4-config.h
+++ b/libnm/nm-ip4-config.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2008 Red Hat, Inc.
diff --git a/libnm/nm-ip6-config.c b/libnm/nm-ip6-config.c
index cc0a123b..19c869c6 100644
--- a/libnm/nm-ip6-config.c
+++ b/libnm/nm-ip6-config.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2014 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-ip6-config.h"
 
diff --git a/libnm/nm-ip6-config.h b/libnm/nm-ip6-config.h
index 57087e6a..0c7c2a9f 100644
--- a/libnm/nm-ip6-config.h
+++ b/libnm/nm-ip6-config.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2008 - 2014 Red Hat, Inc.
diff --git a/libnm/nm-libnm-aux/nm-libnm-aux.c b/libnm/nm-libnm-aux/nm-libnm-aux.c
index fca34214..2b8d2c2e 100644
--- a/libnm/nm-libnm-aux/nm-libnm-aux.c
+++ b/libnm/nm-libnm-aux/nm-libnm-aux.c
@@ -1,6 +1,6 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include "nm-default.h"
+#include "libnm/nm-default-client.h"
 
 #include "nm-libnm-aux.h"
 
diff --git a/libnm/nm-libnm-aux/nm-libnm-aux.h b/libnm/nm-libnm-aux/nm-libnm-aux.h
index 0ae5a279..c982eab7 100644
--- a/libnm/nm-libnm-aux/nm-libnm-aux.h
+++ b/libnm/nm-libnm-aux/nm-libnm-aux.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #ifndef __NM_LIBNM_AUX_H__
 #define __NM_LIBNM_AUX_H__
diff --git a/libnm/nm-libnm-utils.c b/libnm/nm-libnm-utils.c
index 9c27f64d..1fb6a47c 100644
--- a/libnm/nm-libnm-utils.c
+++ b/libnm/nm-libnm-utils.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2018 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-libnm-utils.h"
 
@@ -869,3 +869,42 @@ nm_utils_g_param_spec_is_default(const GParamSpec *pspec)
      * strictly asserts and only support argument types that we expect. */
     g_return_val_if_reached(FALSE);
 }
+
+/*****************************************************************************/
+
+/**
+ * nm_utils_print:
+ * @output_mode: if 1 it uses g_print(). If 2, it uses g_printerr().
+ *   If 0, it uses either g_print() or g_printerr(), depending
+ *   on LIBNM_CLIENT_DEBUG (and the "stdout" flag).
+ * @msg: the message to print. The function does not append
+ *   a trailing newline.
+ *
+ * The only purpose of this function is to give access to g_print()
+ * or g_printerr() from pygobject. libnm can do debug logging by
+ * setting LIBNM_CLIENT_DEBUG and uses thereby g_printerr() or
+ * g_print(). A plain "print()" function in python is not in sync
+ * with these functions (it implements additional buffering). By
+ * using nm_utils_print(), the same logging mechanisms can be used.
+ *
+ * Since: 1.30
+ */
+void
+nm_utils_print(int output_mode, const char *msg)
+{
+    gboolean use_stdout;
+
+    g_return_if_fail(msg);
+
+    if (output_mode == 0) {
+        nml_dbus_log_enabled_full(NML_DBUS_LOG_LEVEL_ANY, &use_stdout);
+        output_mode = use_stdout ? 1 : 2;
+    }
+
+    if (output_mode == 1)
+        g_print("%s", msg);
+    else if (output_mode == 2)
+        g_printerr("%s", msg);
+    else
+        g_return_if_reached();
+}
diff --git a/libnm/nm-libnm-utils.h b/libnm/nm-libnm-utils.h
index 9582e1d8..7b9f0e6b 100644
--- a/libnm/nm-libnm-utils.h
+++ b/libnm/nm-libnm-utils.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2017, 2018 Red Hat, Inc.
  */
@@ -7,6 +7,7 @@
 #define __NM_LIBNM_UTILS_H__
 
 #include "c-list/src/c-list.h"
+#include "nm-device.h"
 #include "nm-glib-aux/nm-ref-string.h"
 #include "nm-glib-aux/nm-logging-fwd.h"
 #include "nm-types.h"
@@ -220,11 +221,12 @@ typedef enum {
     /* See comments below for NMLDBusMetaIface.interface_prio.
      *
      * Higher numbers means more important to detect the GObject type. */
-    NML_DBUS_META_INTERFACE_PRIO_NONE             = 0,
-    NML_DBUS_META_INTERFACE_PRIO_NMCLIENT         = 1,
-    NML_DBUS_META_INTERFACE_PRIO_PARENT_TYPE      = 2,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_LOW  = 3,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH = 4,
+    NML_DBUS_META_INTERFACE_PRIO_NONE           = 0,
+    NML_DBUS_META_INTERFACE_PRIO_NMCLIENT       = 1,
+    NML_DBUS_META_INTERFACE_PRIO_PARENT_TYPE    = 2,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_10 = 3,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_20 = 4,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30 = 5,
 } NMLDBusMetaInteracePrio;
 
 /*****************************************************************************/
@@ -514,7 +516,7 @@ struct _NMLDBusMetaIface {
      * NetworkManager's API does not add/remove interfaces after exporting the object the
      * first time, so in practice each D-Bus object is expected to have a suitable D-Bus
      * interface (and only determining interface, which doesn't change). Those interfaces have
-     * priority %NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH.
+     * priority %NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30.
      *
      * (*) note that nothing bad would happen if a faulty NetworkManager would violate that.
      * Of course, something would not work correctly, but the D-Bus interface we find is unexpected
@@ -522,9 +524,15 @@ struct _NMLDBusMetaIface {
      *
      * One exception is "org.freedesktop.NetworkManager.Connection.Active". This can either
      * be a NMActiveConnection or a NMVpnConnection. Hence, this profile has priority
-     * %NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_LOW, and depending on whether there is
+     * %NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_10, and depending on whether there is
      * a "org.freedesktop.NetworkManager.VPN.Connection" (with high priority), we create
      * one or the other type.
+     *
+     * Another exception is "org.freedesktop.NetworkManager.Device.Veth". It is a NMDeviceVeth
+     * and the parent is NMDeviceEthernet. Therefore it contains "org.freedesktop.NetworkManager.Device.Wired"
+     * as it should be registered as NMDeviceVeth, the profile has priority
+     * %NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_20.
+     *
      */
     NMLDBusMetaInteracePrio interface_prio : 3;
 };
@@ -816,6 +824,19 @@ struct _NMDeviceClass {
 
 /*****************************************************************************/
 
+struct _NMDeviceEthernetPrivate;
+
+struct _NMDeviceEthernet {
+    NMDevice                         parent;
+    struct _NMDeviceEthernetPrivate *_priv;
+};
+
+struct _NMDeviceEthernetClass {
+    NMDeviceClass parent;
+};
+
+/*****************************************************************************/
+
 struct _NMActiveConnectionPrivate;
 
 struct _NMActiveConnection {
diff --git a/libnm/nm-object-private.h b/libnm/nm-object-private.h
index e599b2d8..9f78304d 100644
--- a/libnm/nm-object-private.h
+++ b/libnm/nm-object-private.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2008 - 2011 Red Hat, Inc.
  */
diff --git a/libnm/nm-object.c b/libnm/nm-object.c
index 1b12915d..00e520d7 100644
--- a/libnm/nm-object.c
+++ b/libnm/nm-object.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2012 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-object.h"
 
@@ -248,6 +248,10 @@ nm_object_init(NMObject *object)
     self->_priv = priv;
 
     c_list_init(&self->obj_base.queue_notify_lst);
+
+    NML_DBUS_LOG(_NML_NMCLIENT_LOG_LEVEL_COERCE(NML_DBUS_LOG_LEVEL_TRACE),
+                 "nmobj[" NM_HASH_OBFUSCATE_PTR_FMT "]: creating",
+                 NM_HASH_OBFUSCATE_PTR(self));
 }
 
 static void
@@ -256,6 +260,12 @@ dispose(GObject *object)
     NMObject *       self = NM_OBJECT(object);
     NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE(self);
 
+    if (!self->obj_base.is_disposing) {
+        NML_DBUS_LOG(_NML_NMCLIENT_LOG_LEVEL_COERCE(NML_DBUS_LOG_LEVEL_TRACE),
+                     "nmobj[" NM_HASH_OBFUSCATE_PTR_FMT "]: disposing",
+                     NM_HASH_OBFUSCATE_PTR(self));
+    }
+
     self->obj_base.is_disposing = TRUE;
 
     nm_assert(c_list_is_empty(&self->obj_base.queue_notify_lst));
diff --git a/libnm/nm-object.h b/libnm/nm-object.h
index 97c41d69..7b4a3232 100644
--- a/libnm/nm-object.h
+++ b/libnm/nm-object.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2012 Red Hat, Inc.
diff --git a/libnm/nm-property-infos-dbus.xml b/libnm/nm-property-infos-dbus.xml
index f5aac59a..7100140a 100644
--- a/libnm/nm-property-infos-dbus.xml
+++ b/libnm/nm-property-infos-dbus.xml
@@ -33,6 +33,8 @@ bridge&apos;s interface name."/>
 </setting>
 <setting name="gsm">
 </setting>
+<setting name="hostname">
+</setting>
 <setting name="infiniband">
 </setting>
 <setting name="ip-tunnel">
@@ -120,6 +122,8 @@ also exist on some routes."/>
 </setting>
 <setting name="ovs-dpdk">
 </setting>
+<setting name="ovs-external-ids">
+</setting>
 <setting name="ovs-interface">
 </setting>
 <setting name="ovs-patch">
@@ -151,6 +155,8 @@ team&apos;s interface name."/>
 </setting>
 <setting name="user">
 </setting>
+<setting name="veth">
+</setting>
 <setting name="vlan">
 <property name="interface-name" variable="interface-name" format="string" values="" default="" example="" description="Deprecated in favor of connection.interface-name, but can
 be used for backward-compatibility with older daemons, to set the
diff --git a/libnm/nm-property-infos-ifcfg-rh.xml b/libnm/nm-property-infos-ifcfg-rh.xml
index a73544a1..1c6aced2 100644
--- a/libnm/nm-property-infos-ifcfg-rh.xml
+++ b/libnm/nm-property-infos-ifcfg-rh.xml
@@ -17,8 +17,9 @@
 <property name="phase1-peaplabel" variable="IEEE_8021X_PEAP_FORCE_NEW_LABEL(+)" format="" values="yes, no" default="no" example="" description="Use to force the new PEAP label during key derivation."/>
 <property name="phase1-fast-provisioning" variable="IEEE_8021X_FAST_PROVISIONING(+)" format="" values="space-separated list of these values [allow-auth, allow-unauth]" default="" example="IEEE_8021X_FAST_PROVISIONING=&quot;allow-auth allow-unauth&quot;" description="Enable in-line provisioning of EAP-FAST credentials."/>
 <property name="phase1-auth-flags" variable="IEEE_8021X_PHASE1_AUTH_FLAGS(+)" format="" values="space-separated list of authentication flags names" default="" example="IEEE_8021X_PHASE1_AUTH_FLAGS=&quot;tls-1-0-disable tls-1-1-disable&quot;" description="Authentication flags for the supplicant"/>
-<property name="phase2-auth" variable="IEEE_8021X_INNER_AUTH_METHODS(+)" format="" values="&quot;PAP&quot;, &quot;CHAP&quot;, &quot;MSCHAP&quot;, &quot;MSCHAPV2&quot;, &quot;GTC&quot;, &quot;OTP&quot;, &quot;MD5&quot; and &quot;TLS&quot;" default="" example="IEEE_8021X_INNER_AUTH_METHODS=PAP" description="Inner non-EAP authentication methods. IEEE_8021X_INNER_AUTH_METHODS
-can contain values both for &apos;phase2-auth&apos; and &apos;phase2-autheap&apos; properties."/>
+<property name="phase2-auth" variable="IEEE_8021X_INNER_AUTH_METHODS(+)" format="" values="&quot;PAP&quot;, &quot;CHAP&quot;, &quot;MSCHAP&quot;, &quot;MSCHAPV2&quot;, &quot;GTC&quot;, &quot;OTP&quot;, &quot;MD5&quot; and &quot;TLS&quot;" default="" example="IEEE_8021X_INNER_AUTH_METHODS=PAP" description="Inner non-EAP authentication methods for TTLS or the inner EAP
+authentication method for PEAP. IEEE_8021X_INNER_AUTH_METHODS can contain
+values both for &apos;phase2-auth&apos; and &apos;phase2-autheap&apos; properties."/>
 <property name="phase2-autheap" variable="IEEE_8021X_INNER_AUTH_METHODS(+)" format="" values="&quot;EAP-MD5&quot;, &quot;EAP-MSCHAPV2&quot;, &quot;EAP-GTC&quot;, &quot;EAP-OTP&quot; and &quot;EAP-TLS&quot;" default="" example="IEEE_8021X_INNER_AUTH_METHODS=&quot;MSCHAPV2 EAP-TLS&quot;" description="Inner EAP-based authentication methods. Note that
 IEEE_8021X_INNER_AUTH_METHODS is also used for &apos;phase2-auth&apos; values."/>
 <property name="phase2-ca-path" variable="IEEE_8021X_PHASE2_CA_PATH(+)" format="" values="" default="" example="" description="The search path for the certificate."/>
@@ -169,6 +170,14 @@ The sum of the numbers must be 100."/>
 </setting>
 <setting name="gsm">
 </setting>
+<setting name="hostname">
+<property name="priority" variable="HOSTNAME_PRIORITY(+)" format="" values="" default="missing variable means global value or 100" example="HOSTNAME_PRIORITY=50" description="hostname priority"/>
+<property name="from-dhcp" variable="HOSTNAME_FROM_DHCP(+)" format="" values="" default="missing variable means global default or 1" example="HOSTNAME_FROM_DHCP=0,1" description="whether the system hostname can be determined from DHCP"/>
+<property name="from-dhcp" variable="HOSTNAME_FROM_DNS_LOOKUP(+)" format="" values="" default="missing variable means global default or 1" example="HOSTNAME_FROM_DNS_LOOKUP=0,1" description="whether the system hostname can be determined from reverse
+DNS lookup"/>
+<property name="only-best-device" variable="HOSTNAME_ONLY_FROM_DEFAULT(+)" format="" values="" default="missing variable means global default or 1" example="HOSTNAME_ONLY_FROM_DEFAULT=0,1" description="whether the hostname can be determined only from
+devices with the default route"/>
+</setting>
 <setting name="infiniband">
 <property name="mac-address" variable="HWADDR" format="" values="" default="" example="HWADDR=01:02:03:04:05:06:07:08:09:0A:01:02:03:04:05:06:07:08:09:11" description="IBoIP 20-byte hardware address of the device (in traditional
 hex-digits-and-colons notation).
@@ -190,7 +199,7 @@ When PKEY_ID is specified, PHYSDEV and DEVICE also must be specified."/>
 <property name="dns" variable="DNS1, DNS2, ..." format="string" values="" default="" example="DNS1=1.2.3.4 DNS2=10.0.0.254 DNS3=8.8.8.8" description="List of DNS servers. Even if NetworkManager supports many DNS
 servers, initscripts and resolver only care about the first three, usually."/>
 <property name="dns-search" variable="DOMAIN" format="string (space-separated domains)" values="" default="" example="" description="List of DNS search domains."/>
-<property name="addresses" variable="IPADDR, PREFIX, IPADDR1, PREFIX1, ..." format="" values="" default="" example="IPADDR=10.5.5.23 PREFIX=24 IPADDR1=1.1.1.2 PREFIX1=16" description="List of static IP addresses."/>
+<property name="addresses" variable="IPADDR, PREFIX (NETMASK), IPADDR1, PREFIX1 (NETMASK1), ..." format="" values="" default="" example="IPADDR=10.5.5.23 PREFIX=24 IPADDR1=1.1.1.2 PREFIX1=16" description="List of static IP addresses."/>
 <property name="gateway" variable="GATEWAY" format="" values="" default="" example="GATEWAY=10.5.5.1" description="Gateway IP address."/>
 <property name="routes" variable="ADDRESS1, NETMASK1, GATEWAY1, METRIC1, OPTIONS1, ..." format="" values="" default="" example="" description="List of static routes. They are not stored in ifcfg-* file,
 but in route-* file instead."/>
@@ -273,6 +282,8 @@ property ID_PATHS of devices"/>
 </setting>
 <setting name="ovs-dpdk">
 </setting>
+<setting name="ovs-external-ids">
+</setting>
 <setting name="ovs-interface">
 </setting>
 <setting name="ovs-patch">
@@ -317,6 +328,8 @@ uppercase letters with an underscore. A dot is encoded as a double
 underscore. Remaining characters are encoded as underscore followed by a
 3 digit octal representation of the character."/>
 </setting>
+<setting name="veth">
+</setting>
 <setting name="vlan">
 <property name="parent" variable="DEVICE or PHYSDEV" format="" values="" default="" example="" description="Parent interface of the VLAN."/>
 <property name="id" variable="VLAN_ID or DEVICE" format="" values="" default="" example="" description="VLAN identifier."/>
@@ -366,7 +379,7 @@ is listed."/>
 <setting name="wireguard">
 </setting>
 <setting name="802-11-wireless-security">
-<property name="key-mgmt" variable="KEY_MGMT(+)" format="" values="IEEE8021X, WPA-PSK, WPA-EAP" default="" example="" description="Key management menthod."/>
+<property name="key-mgmt" variable="KEY_MGMT(+)" format="" values="IEEE8021X, WPA-PSK, WPA-EAP, WPA-EAP-SUITE-B-192" default="" example="" description="Key management menthod."/>
 <property name="wep-tx-keyidx" variable="DEFAULTKEY" format="" values="1, 2, 3, 4" default="1" example="" description="Index of active WEP key."/>
 <property name="auth-alg" variable="SECURITYMODE(+)" format="" values="restricted, open, leap" default="" example="" description="Authentication algorithm for WEP."/>
 <property name="proto" variable="WPA_ALLOW_WPA(+), WPA_ALLOW_WPA2(+)" format="" values="yes, no" default="no" example="" description="Allowed WPA protocols, WPA and WPA2 (RSN)."/>
diff --git a/libnm/nm-property-infos-keyfile.xml b/libnm/nm-property-infos-keyfile.xml
index 950a7790..0445d943 100644
--- a/libnm/nm-property-infos-keyfile.xml
+++ b/libnm/nm-property-infos-keyfile.xml
@@ -30,6 +30,8 @@ or semicolon separated list of 6 decimal bytes (obsolete)"/>
 </setting>
 <setting name="gsm">
 </setting>
+<setting name="hostname">
+</setting>
 <setting name="infiniband">
 <property name="mac-address" variable="mac-address" format="usual hex-digits-and-colons notation" values="" default="" example="mac-address= 80:00:00:6d:fe:80:00:00:00:00:00:00:00:02:55:00:70:33:cf:01" description="MAC address in traditional hex-digits-and-colons notation, or
 or semicolon separated list of 20 decimal bytes (obsolete)"/>
@@ -61,6 +63,8 @@ route2=7.7.0.0/16" description="List of IP routes."/>
 </setting>
 <setting name="ovs-dpdk">
 </setting>
+<setting name="ovs-external-ids">
+</setting>
 <setting name="ovs-interface">
 </setting>
 <setting name="ovs-patch">
@@ -90,6 +94,8 @@ versions of NetworkManager stored this as an integer: 69 (&apos;E&apos;) for eve
 </setting>
 <setting name="user">
 </setting>
+<setting name="veth">
+</setting>
 <setting name="vlan">
 </setting>
 <setting name="vpn">
diff --git a/libnm/nm-property-infos-nmcli.xml b/libnm/nm-property-infos-nmcli.xml
index a9b3b205..15270a79 100644
--- a/libnm/nm-property-infos-nmcli.xml
+++ b/libnm/nm-property-infos-nmcli.xml
@@ -27,6 +27,8 @@
 </setting>
 <setting name="gsm">
 </setting>
+<setting name="hostname">
+</setting>
 <setting name="infiniband">
 </setting>
 <setting name="ip-tunnel">
@@ -47,6 +49,8 @@
 </setting>
 <setting name="ovs-dpdk">
 </setting>
+<setting name="ovs-external-ids">
+</setting>
 <setting name="ovs-interface">
 </setting>
 <setting name="ovs-patch">
@@ -73,6 +77,8 @@
 </setting>
 <setting name="user">
 </setting>
+<setting name="veth">
+</setting>
 <setting name="vlan">
 </setting>
 <setting name="vpn">
diff --git a/libnm/nm-remote-connection-private.h b/libnm/nm-remote-connection-private.h
index 18921718..3ca934bf 100644
--- a/libnm/nm-remote-connection-private.h
+++ b/libnm/nm-remote-connection-private.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2009 Red Hat, Inc.
  */
diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c
index 63ffbf1a..b5b12bf0 100644
--- a/libnm/nm-remote-connection.c
+++ b/libnm/nm-remote-connection.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2011 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-remote-connection.h"
 
@@ -746,7 +746,7 @@ dispose(GObject *object)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_settings_connection = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
     nm_remote_connection_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_S("Filename",
                                       PROP_FILENAME,
diff --git a/libnm/nm-remote-connection.h b/libnm/nm-remote-connection.h
index f8563514..e29bf073 100644
--- a/libnm/nm-remote-connection.h
+++ b/libnm/nm-remote-connection.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2011 Red Hat, Inc.
diff --git a/libnm/nm-secret-agent-old.c b/libnm/nm-secret-agent-old.c
index a89ea1c5..8f826ed8 100644
--- a/libnm/nm-secret-agent-old.c
+++ b/libnm/nm-secret-agent-old.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2010 - 2011 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-secret-agent-old.h"
 
diff --git a/libnm/nm-secret-agent-old.h b/libnm/nm-secret-agent-old.h
index 12455929..cc33c14a 100644
--- a/libnm/nm-secret-agent-old.h
+++ b/libnm/nm-secret-agent-old.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2010 - 2011 Red Hat, Inc.
  */
diff --git a/libnm/nm-settings-docs-gir.xml b/libnm/nm-settings-docs-gir.xml
index af3f34e7..f71d2bad 100644
--- a/libnm/nm-settings-docs-gir.xml
+++ b/libnm/nm-settings-docs-gir.xml
@@ -59,8 +59,8 @@
     <property name="phase1-peaplabel" name_upper="PHASE1_PEAPLABEL" type="string" description='Forces use of the new PEAP label during key derivation.  Some RADIUS servers may require forcing the new PEAP label to interoperate with PEAPv1.  Set to "1" to force use of the new PEAP label.  See the wpa_supplicant documentation for more details.' />
     <property name="phase1-peapver" name_upper="PHASE1_PEAPVER" type="string" description='Forces which PEAP version is used when PEAP is set as the EAP method in the "eap" property.  When unset, the version reported by the server will be used.  Sometimes when using older RADIUS servers, it is necessary to force the client to use a particular PEAP version.  To do so, this property may be set to "0" or "1" to force that specific PEAP version.' />
     <property name="phase2-altsubject-matches" name_upper="PHASE2_ALTSUBJECT_MATCHES" type="array of string" description="List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner &quot;phase 2&quot; authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed." />
-    <property name="phase2-auth" name_upper="PHASE2_AUTH" type="string" description='Specifies the allowed "phase 2" inner non-EAP authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property.  Recognized non-EAP "phase 2" methods are "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.' />
-    <property name="phase2-autheap" name_upper="PHASE2_AUTHEAP" type="string" description='Specifies the allowed "phase 2" inner EAP-based authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property.  Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.' />
+    <property name="phase2-auth" name_upper="PHASE2_AUTH" type="string" description='Specifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property.  For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method.  For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified.' />
+    <property name="phase2-autheap" name_upper="PHASE2_AUTHEAP" type="string" description='Specifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property.  Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.' />
     <property name="phase2-ca-cert" name_upper="PHASE2_CA_CERT" type="byte array" description="Contains the &quot;phase 2&quot; CA certificate if used by the EAP method specified in the &quot;phase2-auth&quot; or &quot;phase2-autheap&quot; properties. Certificate data is specified using a &quot;scheme&quot;; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string &quot;file://&quot; and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory." />
     <property name="phase2-ca-cert-password" name_upper="PHASE2_CA_CERT_PASSWORD" type="string" description='The password used to access the "phase2" CA certificate stored in "phase2-ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.' />
     <property name="phase2-ca-cert-password-flags" name_upper="PHASE2_CA_CERT_PASSWORD_FLAGS" type="NMSettingSecretFlags (uint32)" description='Flags indicating how to handle the "phase2-ca-cert-password" property.' />
@@ -179,6 +179,12 @@
     <property name="sim-operator-id" name_upper="SIM_OPERATOR_ID" type="string" description='A MCC/MNC string like "310260" or "21601" identifying the specific mobile network operator which this connection applies to.  If given, the connection will apply to any device also allowed by "device-id" and "sim-id" which contains a SIM card provisioned by the given operator.' />
     <property name="username" name_upper="USERNAME" type="string" description="The username used to authenticate with the network, if required.  Many providers do not require a username, or accept any username.  But if a username is required, it is specified here." />
   </setting>
+  <setting name="hostname" description="Hostname settings" name_upper="HOSTNAME" >
+    <property name="from-dhcp" name_upper="FROM_DHCP" type="NMTernary (int32)" description="Whether the system hostname can be determined from DHCP on this connection. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_TRUE (1)." />
+    <property name="from-dns-lookup" name_upper="FROM_DNS_LOOKUP" type="NMTernary (int32)" description="Whether the system hostname can be determined from reverse DNS lookup of addresses on this device. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_TRUE (1)." />
+    <property name="only-from-default" name_upper="ONLY_FROM_DEFAULT" type="NMTernary (int32)" description="If set to NM_TERNARY_TRUE (1), NetworkManager attempts to get the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has the default route for the given address family (IPv4/IPv6). If set to NM_TERNARY_FALSE (0), the hostname can be set from this device even if it doesn't have the default route. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_FALSE (0)." />
+    <property name="priority" name_upper="PRIORITY" type="int32" default="0" description="The relative priority of this connection to determine the system hostname. A lower numerical value is better (higher priority).  A connection with higher priority is considered before connections with lower priority. If the value is zero, it can be overridden by a global value from NetworkManager configuration. If the property doesn't have a value in the global configuration, the value is assumed to be 100. Negative values have the special effect of excluding other connections with a greater numerical priority value; so in presence of at least one negative priority, only connections with the lowest priority value will be used to determine the hostname." />
+  </setting>
   <setting name="infiniband" description="Infiniband Settings" name_upper="INFINIBAND" >
     <property name="mac-address" name_upper="MAC_ADDRESS" type="byte array" description="If specified, this connection will only apply to the IPoIB device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing)." />
     <property name="mtu" name_upper="MTU" type="uint32" default="0" description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." />
@@ -189,7 +195,7 @@
   <setting name="ipv4" description="IPv4 Settings" name_upper="IP4_CONFIG" >
     <property name="addresses" name_upper="ADDRESSES" type="array of array of uint32" description="Array of IP addresses." />
     <property name="dad-timeout" name_upper="DAD_TIMEOUT" type="int32" default="-1" description="Timeout in milliseconds used to check for the presence of duplicate IP addresses on the network.  If an address conflict is detected, the activation will fail.  A zero value means that no duplicate address detection is performed, -1 means the default value (either configuration ipvx.dad-timeout override or zero).  A value greater than zero is a timeout in milliseconds. The property is currently implemented only for IPv4." />
-    <property name="dhcp-client-id" name_upper="DHCP_CLIENT_ID" type="string" description="A string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options. When the property is a hex string ('aa:bb:cc') it is interpreted as a binary client ID, in which case the first byte is assumed to be the 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a MAC address). If the property is not a hex string it is considered as a non-hardware-address client ID and the 'type' field is set to 0. The special values &quot;mac&quot; and &quot;perm-mac&quot; are supported, which use the current or permanent MAC address of the device to generate a client identifier with type ethernet (01). Currently, these options only work for ethernet type of links. The special value &quot;duid&quot; generates a RFC4361-compliant client identifier based on a hash of the interface name as IAID and /etc/machine-id. The special value &quot;stable&quot; is supported to generate a type 0 client identifier based on the stable-id (see connection.stable-id) and a per-host key. If you set the stable-id, you may want to include the &quot;${DEVICE}&quot; or &quot;${MAC}&quot; specifier to get a per-device key. If unset, a globally configured default is used. If still unset, the default depends on the DHCP plugin." />
+    <property name="dhcp-client-id" name_upper="DHCP_CLIENT_ID" type="string" description="A string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options. When the property is a hex string ('aa:bb:cc') it is interpreted as a binary client ID, in which case the first byte is assumed to be the 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a MAC address). If the property is not a hex string it is considered as a non-hardware-address client ID and the 'type' field is set to 0. The special values &quot;mac&quot; and &quot;perm-mac&quot; are supported, which use the current or permanent MAC address of the device to generate a client identifier with type ethernet (01). Currently, these options only work for ethernet type of links. The special value &quot;ipv6-duid&quot; uses the DUID from &quot;ipv6.dhcp-duid&quot; property as an RFC4361-compliant client identifier. As IAID it uses &quot;ipv4.dhcp-iaid&quot; and falls back to &quot;ipv6.dhcp-iaid&quot; if unset. The special value &quot;duid&quot; generates a RFC4361-compliant client identifier based on &quot;ipv4.dhcp-iaid&quot; and uses a DUID generated by hashing /etc/machine-id. The special value &quot;stable&quot; is supported to generate a type 0 client identifier based on the stable-id (see connection.stable-id) and a per-host key. If you set the stable-id, you may want to include the &quot;${DEVICE}&quot; or &quot;${MAC}&quot; specifier to get a per-device key. If unset, a globally configured default is used. If still unset, the default depends on the DHCP plugin." />
     <property name="dhcp-fqdn" name_upper="DHCP_FQDN" type="string" description='If the "dhcp-send-hostname" property is TRUE, then the specified FQDN will be sent to the DHCP server when acquiring a lease. This property and "dhcp-hostname" are mutually exclusive and cannot be set at the same time.' />
     <property name="dhcp-hostname" name_upper="DHCP_HOSTNAME" type="string" description='If the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and "dhcp-fqdn" are mutually exclusive and cannot be set at the same time.' />
     <property name="dhcp-hostname-flags" name_upper="DHCP_HOSTNAME_FLAGS" type="uint32" default="0" description="Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) and NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE (0x4).  When no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is not set, the standard FQDN flags are set in the request: NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) for IPv4 and NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1) for IPv6. When this property is set to the default value NM_DHCP_HOSTNAME_FLAG_NONE (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also NM_DHCP_HOSTNAME_FLAG_NONE (0x0), then the standard FQDN flags described above are sent in the DHCP requests." />
@@ -199,7 +205,7 @@
     <property name="dhcp-timeout" name_upper="DHCP_TIMEOUT" type="int32" default="0" description="A timeout for a DHCP transaction in seconds. If zero (the default), a globally configured default is used. If still unspecified, a device specific timeout is used (usually 45 seconds). Set to 2147483647 (MAXINT32) for infinity." />
     <property name="dhcp-vendor-class-identifier" name_upper="DHCP_VENDOR_CLASS_IDENTIFIER" type="string" description="The Vendor Class Identifier DHCP option (60). Special characters in the data string may be escaped using C-style escapes, nevertheless this property cannot contain nul bytes. If the per-profile value is unspecified (the default), a global connection default gets consulted. If still unspecified, the DHCP option is not sent to the server. Since 1.28" />
     <property name="dns" name_upper="DNS" type="array of uint32" description="Array of IP addresses of DNS servers." />
-    <property name="dns-options" name_upper="DNS_OPTIONS" type="array of string" description='Array of DNS options as described in man 5 resolv.conf. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties. The currently supported options are "attempts", "debug", "edns0", "inet6", "ip6-bytestring", "ip6-dotint", "ndots", "no-check-names", "no-ip6-dotint", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc". The "trust-ad" setting is only honored if the profile contributes name servers to resolv.conf, and if all contributing profiles have "trust-ad" enabled.' />
+    <property name="dns-options" name_upper="DNS_OPTIONS" type="array of string" description='Array of DNS options as described in man 5 resolv.conf. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties. The currently supported options are "attempts", "debug", "edns0", "inet6", "ip6-bytestring", "ip6-dotint", "ndots", "no-check-names", "no-ip6-dotint", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc". The "trust-ad" setting is only honored if the profile contributes name servers to resolv.conf, and if all contributing profiles have "trust-ad" enabled. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added.' />
     <property name="dns-priority" name_upper="DNS_PRIORITY" type="int32" default="0" description="DNS servers priority. The relative priority for DNS servers specified by this setting.  A lower numerical value is better (higher priority). Negative values have the special effect of excluding other configurations with a greater numerical priority value; so in presence of at least one negative priority, only DNS servers from connections with the lowest priority value will be used. To avoid all DNS leaks, set the priority of the profile that should be used to the most negative value of all active connections profiles. Zero selects a globally configured default value. If the latter is missing or zero too, it defaults to 50 for VPNs (including WireGuard) and 100 for other connections. Note that the priority is to order DNS settings for multiple active connections.  It does not disambiguate multiple DNS servers within the same connection profile. When multiple devices have configurations with the same priority, VPNs will be considered first, then devices with the best (lowest metric) default route and then all other devices. When using dns=default, servers with higher priority will be on top of resolv.conf. To prioritize a given server over another one within the same connection, just specify them in the desired order. Note that commonly the resolver tries name servers in /etc/resolv.conf in the order listed, proceeding with the next server in the list on failure. See for example the &quot;rotate&quot; option of the dns-options setting. If there are any negative DNS priorities, then only name servers from the devices with that lowest priority will be considered. When using a DNS resolver that supports Conditional Forwarding or Split DNS (with dns=dnsmasq or dns=systemd-resolved settings), each connection is used to query domains in its search list. The search domains determine which name servers to ask, and the DNS priority is used to prioritize name servers based on the domain.  Queries for domains not present in any search list are routed through connections having the '~.' special wildcard domain, which is added automatically to connections with the default route (or can be added manually).  When multiple connections specify the same domain, the one with the best priority (lowest numerical value) wins.  If a sub domain is configured on another interface it will be accepted regardless the priority, unless parent domain on the other interface has a negative priority, which causes the sub domain to be shadowed. With Split DNS one can avoid undesired DNS leaks by properly configuring DNS priorities and the search domains, so that only name servers of the desired interface are configured." />
     <property name="dns-search" name_upper="DNS_SEARCH" type="array of string" description="Array of DNS search domains. Domains starting with a tilde ('~') are considered 'routing' domains and are used only to decide the interface over which a query must be forwarded; they are not used to complete unqualified host names. When using a DNS plugin that supports Conditional Forwarding or Split DNS, then the search domains specify which name servers to query. This makes the behavior different from running with plain /etc/resolv.conf. For more information see also the dns-priority setting." />
     <property name="gateway" name_upper="GATEWAY" type="string" description="The gateway associated with this configuration. This is only meaningful if &quot;addresses&quot; is also set. The gateway's main purpose is to control the next hop of the standard default route on the device. Hence, the gateway property conflicts with &quot;never-default&quot; and will be automatically dropped if the IP configuration is set to never-default. As an alternative to set the gateway, configure a static default route with /0 as prefix length." />
@@ -224,7 +230,7 @@
     <property name="dhcp-send-hostname" name_upper="DHCP_SEND_HOSTNAME" type="boolean" default="TRUE" description='If TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer.  If the "dhcp-hostname" property is NULL and this property is TRUE, the current persistent hostname of the computer is sent.' />
     <property name="dhcp-timeout" name_upper="DHCP_TIMEOUT" type="int32" default="0" description="A timeout for a DHCP transaction in seconds. If zero (the default), a globally configured default is used. If still unspecified, a device specific timeout is used (usually 45 seconds). Set to 2147483647 (MAXINT32) for infinity." />
     <property name="dns" name_upper="DNS" type="array of byte array" description="Array of IP addresses of DNS servers." />
-    <property name="dns-options" name_upper="DNS_OPTIONS" type="array of string" description='Array of DNS options as described in man 5 resolv.conf. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties. The currently supported options are "attempts", "debug", "edns0", "inet6", "ip6-bytestring", "ip6-dotint", "ndots", "no-check-names", "no-ip6-dotint", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc". The "trust-ad" setting is only honored if the profile contributes name servers to resolv.conf, and if all contributing profiles have "trust-ad" enabled.' />
+    <property name="dns-options" name_upper="DNS_OPTIONS" type="array of string" description='Array of DNS options as described in man 5 resolv.conf. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties. The currently supported options are "attempts", "debug", "edns0", "inet6", "ip6-bytestring", "ip6-dotint", "ndots", "no-check-names", "no-ip6-dotint", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc". The "trust-ad" setting is only honored if the profile contributes name servers to resolv.conf, and if all contributing profiles have "trust-ad" enabled. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added.' />
     <property name="dns-priority" name_upper="DNS_PRIORITY" type="int32" default="0" description="DNS servers priority. The relative priority for DNS servers specified by this setting.  A lower numerical value is better (higher priority). Negative values have the special effect of excluding other configurations with a greater numerical priority value; so in presence of at least one negative priority, only DNS servers from connections with the lowest priority value will be used. To avoid all DNS leaks, set the priority of the profile that should be used to the most negative value of all active connections profiles. Zero selects a globally configured default value. If the latter is missing or zero too, it defaults to 50 for VPNs (including WireGuard) and 100 for other connections. Note that the priority is to order DNS settings for multiple active connections.  It does not disambiguate multiple DNS servers within the same connection profile. When multiple devices have configurations with the same priority, VPNs will be considered first, then devices with the best (lowest metric) default route and then all other devices. When using dns=default, servers with higher priority will be on top of resolv.conf. To prioritize a given server over another one within the same connection, just specify them in the desired order. Note that commonly the resolver tries name servers in /etc/resolv.conf in the order listed, proceeding with the next server in the list on failure. See for example the &quot;rotate&quot; option of the dns-options setting. If there are any negative DNS priorities, then only name servers from the devices with that lowest priority will be considered. When using a DNS resolver that supports Conditional Forwarding or Split DNS (with dns=dnsmasq or dns=systemd-resolved settings), each connection is used to query domains in its search list. The search domains determine which name servers to ask, and the DNS priority is used to prioritize name servers based on the domain.  Queries for domains not present in any search list are routed through connections having the '~.' special wildcard domain, which is added automatically to connections with the default route (or can be added manually).  When multiple connections specify the same domain, the one with the best priority (lowest numerical value) wins.  If a sub domain is configured on another interface it will be accepted regardless the priority, unless parent domain on the other interface has a negative priority, which causes the sub domain to be shadowed. With Split DNS one can avoid undesired DNS leaks by properly configuring DNS priorities and the search domains, so that only name servers of the desired interface are configured." />
     <property name="dns-search" name_upper="DNS_SEARCH" type="array of string" description="Array of DNS search domains. Domains starting with a tilde ('~') are considered 'routing' domains and are used only to decide the interface over which a query must be forwarded; they are not used to complete unqualified host names. When using a DNS plugin that supports Conditional Forwarding or Split DNS, then the search domains specify which name servers to query. This makes the behavior different from running with plain /etc/resolv.conf. For more information see also the dns-priority setting." />
     <property name="gateway" name_upper="GATEWAY" type="string" description="The gateway associated with this configuration. This is only meaningful if &quot;addresses&quot; is also set. The gateway's main purpose is to control the next hop of the standard default route on the device. Hence, the gateway property conflicts with &quot;never-default&quot; and will be automatically dropped if the IP configuration is set to never-default. As an alternative to set the gateway, configure a static default route with /0 as prefix length." />
@@ -293,6 +299,9 @@
   <setting name="ovs-dpdk" description="OvsDpdk Link Settings" name_upper="OVS_DPDK" >
     <property name="devargs" name_upper="DEVARGS" type="string" description="Open vSwitch DPDK device arguments." />
   </setting>
+  <setting name="ovs-external-ids" description="OVS External IDs Settings" name_upper="OVS_EXTERNAL_IDS" >
+    <property name="data" name_upper="DATA" type="dict of string to string" default="{}" description="A dictionary of key/value pairs with exernal-ids for OVS." />
+  </setting>
   <setting name="ovs-interface" description="Open vSwitch Interface Settings" name_upper="OVS_INTERFACE" >
     <property name="type" name_upper="TYPE" type="string" description='The interface type. Either "internal", "system", "patch", "dpdk", or empty.' />
   </setting>
@@ -394,6 +403,9 @@
   <setting name="user" description="General User Profile Settings" name_upper="USER" >
     <property name="data" name_upper="DATA" type="dict of string to string" default="{}" description="A dictionary of key/value pairs with user data. This data is ignored by NetworkManager and can be used at the users discretion. The keys only support a strict ascii format, but the values can be arbitrary UTF8 strings up to a certain length." />
   </setting>
+  <setting name="veth" description="Veth Settings" name_upper="VETH" >
+    <property name="peer" name_upper="PEER" type="string" description="This property specifies the peer interface name of the veth. This property is mandatory." />
+  </setting>
   <setting name="vlan" description="VLAN Settings" name_upper="VLAN" >
     <property name="egress-priority-map" name_upper="EGRESS_PRIORITY_MAP" type="array of string" description='For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities.  The mapping is given in the format "from:to" where both "from" and "to" are unsigned integers, ie "7:3".' />
     <property name="flags" name_upper="FLAGS" type="NMVlanFlags (uint32)" description="One or more flags which control the behavior and features of the VLAN interface.  Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device's operating state). NM_VLAN_FLAG_MVRP (0x8) (use of the MVRP protocol). The default value of this property is NM_VLAN_FLAG_REORDER_HEADERS, but it used to be 0. To preserve backward compatibility, the default-value in the D-Bus API continues to be 0 and a missing property on D-Bus is still considered as 0." />
@@ -489,7 +501,7 @@
     <property name="auth-alg" name_upper="AUTH_ALG" type="string" description='When WEP is used (ie, key-mgmt = "none" or "ieee8021x") indicate the 802.11 authentication algorithm required by the AP here.  One of "open" for Open System, "shared" for Shared Key, or "leap" for Cisco LEAP.  When using Cisco LEAP (ie, key-mgmt = "ieee8021x" and auth-alg = "leap") the "leap-username" and "leap-password" properties must be specified.' />
     <property name="fils" name_upper="FILS" type="int32" default="0" description="Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the connection.  One of NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) (use global default value), NM_SETTING_WIRELESS_SECURITY_FILS_DISABLE (1) (disable FILS), NM_SETTING_WIRELESS_SECURITY_FILS_OPTIONAL (2) (enable FILS if the supplicant and the access point support it) or NM_SETTING_WIRELESS_SECURITY_FILS_REQUIRED (3) (enable FILS and fail if not supported).  When set to NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) and no global default is set, FILS will be optionally enabled." />
     <property name="group" name_upper="GROUP" type="array of string" description='A list of group/broadcast encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list.  For maximum compatibility leave this property empty.  Each list element may be one of "wep40", "wep104", "tkip", or "ccmp".' />
-    <property name="key-mgmt" name_upper="KEY_MGMT" type="string" description='Key management used for the connection.  One of "none" (WEP), "ieee8021x" (Dynamic WEP), "wpa-psk" (infrastructure WPA-PSK), "sae" (SAE), "owe" (Opportunistic Wireless Encryption) or "wpa-eap" (WPA-Enterprise).  This property must be set for any Wi-Fi connection that uses security.' />
+    <property name="key-mgmt" name_upper="KEY_MGMT" type="string" description='Key management used for the connection.  One of "none" (WEP), "ieee8021x" (Dynamic WEP), "wpa-psk" (infrastructure WPA-PSK), "sae" (SAE), "owe" (Opportunistic Wireless Encryption), "wpa-eap" (WPA-Enterprise) or "wpa-eap-suite-b-192" (WPA3-Enterprise Suite B). This property must be set for any Wi-Fi connection that uses security.' />
     <property name="leap-password" name_upper="LEAP_PASSWORD" type="string" description='The login password for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").' />
     <property name="leap-password-flags" name_upper="LEAP_PASSWORD_FLAGS" type="NMSettingSecretFlags (uint32)" description='Flags indicating how to handle the "leap-password" property.' />
     <property name="leap-username" name_upper="LEAP_USERNAME" type="string" description='The login username for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").' />
diff --git a/libnm/nm-types.h b/libnm/nm-types.h
index 099002bd..81ffe790 100644
--- a/libnm/nm-types.h
+++ b/libnm/nm-types.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2014 - 2018 Red Hat, Inc.
  */
@@ -36,6 +36,7 @@ typedef struct _NMDeviceOvsPort      NMDeviceOvsPort;
 typedef struct _NMDevicePpp          NMDevicePpp;
 typedef struct _NMDeviceTeam         NMDeviceTeam;
 typedef struct _NMDeviceTun          NMDeviceTun;
+typedef struct _NMDeviceVeth         NMDeviceVeth;
 typedef struct _NMDeviceVlan         NMDeviceVlan;
 typedef struct _NMDeviceVrf          NMDeviceVrf;
 typedef struct _NMDeviceVxlan        NMDeviceVxlan;
diff --git a/libnm/nm-vpn-connection.c b/libnm/nm-vpn-connection.c
index d41d6749..cdbaefc0 100644
--- a/libnm/nm-vpn-connection.c
+++ b/libnm/nm-vpn-connection.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2012 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-vpn-connection.h"
 
@@ -159,7 +159,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_vpn_connection = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_VPN_CONNECTION,
     nm_vpn_connection_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_S("Banner", PROP_BANNER, NMVpnConnection, _priv.banner),
         NML_DBUS_META_PROPERTY_INIT_U("VpnState",
diff --git a/libnm/nm-vpn-connection.h b/libnm/nm-vpn-connection.h
index c2bd8f97..aac259d5 100644
--- a/libnm/nm-vpn-connection.h
+++ b/libnm/nm-vpn-connection.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2010 Red Hat, Inc.
diff --git a/libnm/nm-vpn-editor.c b/libnm/nm-vpn-editor.c
index 5538454b..e3269588 100644
--- a/libnm/nm-vpn-editor.c
+++ b/libnm/nm-vpn-editor.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2008 - 2010 Red Hat, Inc.
  * Copyright (C) 2008 Novell, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-vpn-editor.h"
 
diff --git a/libnm/nm-vpn-editor.h b/libnm/nm-vpn-editor.h
index a34968ce..8cd7805f 100644
--- a/libnm/nm-vpn-editor.h
+++ b/libnm/nm-vpn-editor.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2008 Novell, Inc.
  * Copyright (C) 2008 - 2015 Red Hat, Inc.
diff --git a/libnm/nm-vpn-plugin-old.c b/libnm/nm-vpn-plugin-old.c
index 1922ebe3..f45d0c09 100644
--- a/libnm/nm-vpn-plugin-old.c
+++ b/libnm/nm-vpn-plugin-old.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2008 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-vpn-plugin-old.h"
 
diff --git a/libnm/nm-vpn-plugin-old.h b/libnm/nm-vpn-plugin-old.h
index 2da27f4d..116b8b90 100644
--- a/libnm/nm-vpn-plugin-old.h
+++ b/libnm/nm-vpn-plugin-old.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2015 Red Hat, Inc.
diff --git a/libnm/nm-vpn-service-plugin.c b/libnm/nm-vpn-service-plugin.c
index 25eea788..34de21b8 100644
--- a/libnm/nm-vpn-service-plugin.c
+++ b/libnm/nm-vpn-service-plugin.c
@@ -1,10 +1,10 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2015 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-vpn-service-plugin.h"
 
diff --git a/libnm/nm-vpn-service-plugin.h b/libnm/nm-vpn-service-plugin.h
index 3fe68f0f..e45622aa 100644
--- a/libnm/nm-vpn-service-plugin.h
+++ b/libnm/nm-vpn-service-plugin.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2007 - 2008 Novell, Inc.
  * Copyright (C) 2007 - 2015 Red Hat, Inc.
diff --git a/libnm/nm-wifi-p2p-peer.c b/libnm/nm-wifi-p2p-peer.c
index c250342e..cab4648e 100644
--- a/libnm/nm-wifi-p2p-peer.c
+++ b/libnm/nm-wifi-p2p-peer.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2018 - 2019 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-wifi-p2p-peer.h"
 
@@ -402,7 +402,7 @@ finalize(GObject *object)
 const NMLDBusMetaIface _nml_dbus_meta_iface_nm_wifip2ppeer = NML_DBUS_META_IFACE_INIT_PROP(
     NM_DBUS_INTERFACE_WIFI_P2P_PEER,
     nm_wifi_p2p_peer_get_type,
-    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+    NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
     NML_DBUS_META_IFACE_DBUS_PROPERTIES(
         NML_DBUS_META_PROPERTY_INIT_U("Flags", PROP_FLAGS, NMWifiP2PPeer, _priv.flags),
         NML_DBUS_META_PROPERTY_INIT_IGNORE("Groups", "as"),
diff --git a/libnm/nm-wifi-p2p-peer.h b/libnm/nm-wifi-p2p-peer.h
index 5de8165f..4ab7c0e6 100644
--- a/libnm/nm-wifi-p2p-peer.h
+++ b/libnm/nm-wifi-p2p-peer.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2018 - 2019 Red Hat, Inc.
  */
diff --git a/libnm/nm-wimax-nsp.c b/libnm/nm-wimax-nsp.c
index ad77f846..421fe9e7 100644
--- a/libnm/nm-wimax-nsp.c
+++ b/libnm/nm-wimax-nsp.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2011 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include "nm-wimax-nsp.h"
 
diff --git a/libnm/nm-wimax-nsp.h b/libnm/nm-wimax-nsp.h
index 6e9145e6..15b8daa0 100644
--- a/libnm/nm-wimax-nsp.h
+++ b/libnm/nm-wimax-nsp.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2011 Red Hat, Inc.
  * Copyright (C) 2009 Novell, Inc.
diff --git a/libnm/tests/meson.build b/libnm/tests/meson.build
index 59fb771d..08eecfbd 100644
--- a/libnm/tests/meson.build
+++ b/libnm/tests/meson.build
@@ -1,35 +1,34 @@
-# SPDX-License-Identifier: LGPL-2.1+
+# SPDX-License-Identifier: LGPL-2.1-or-later
 
 test_units = [
-  ['test-libnm', 30],
-  ['test-nm-client', 90],
-  ['test-remote-settings-client', 90],
-  ['test-secret-agent', 90],
-]
-
-deps = [
-  libnm_core_dep,
-  libnm_nm_default_dep,
-]
-
-c_flags = [
-  '-DNETWORKMANAGER_COMPILATION_TEST',
-  '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM',
+  'test-libnm',
+  'test-nm-client',
+  'test-remote-settings-client',
+  'test-secret-agent',
 ]
 
 foreach test_unit: test_units
   exe = executable(
-    test_unit[0],
-    [test_unit[0] + '.c', nm_test_utils_impl_source, libnm_enum_sources[1]],
-    dependencies: deps,
-    c_args: c_flags,
-    link_with: liblibnm,
+    test_unit,
+    [
+      test_unit + '.c',
+      nm_test_utils_impl_source,
+      libnm_enum_sources[1],
+    ],
+    dependencies: [
+      libnm_core_dep,
+      libnm_nm_default_dep,
+    ],
+    c_args: [
+      '-DG_LOG_DOMAIN="test"',
+    ],
+    link_with: libnm_static,
   )
 
   test(
-    test_unit[0],
+    test_unit,
     test_script,
-    timeout: test_unit[1],
+    timeout: 90,
     args: test_args + [exe.full_path()],
   )
 endforeach
@@ -40,5 +39,7 @@ libnm_vpn_plugin_utils_test = static_library(
   sources: nm_vpn_plugin_utils_source + [libnm_enum_sources[1]],
   include_directories: libnm_inc,
   dependencies: libnm_nm_default_dep,
-  c_args: c_flags,
+  c_args: [
+    '-DG_LOG_DOMAIN="test"',
+  ],
 )
diff --git a/libnm/tests/test-libnm.c b/libnm/tests/test-libnm.c
index 6f89a823..a90acd9b 100644
--- a/libnm/tests/test-libnm.c
+++ b/libnm/tests/test-libnm.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
+/* SPDX-License-Identifier: GPL-2.0-or-later */
 /*
  * Copyright (C) 2017 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #if defined(HAVE_DECL_MEMFD_CREATE) && HAVE_DECL_MEMFD_CREATE
     #include <linux/memfd.h>
@@ -2824,8 +2824,9 @@ test_nml_dbus_meta(void)
         g_assert(NM_IN_SET((NMLDBusMetaInteracePrio) mif->interface_prio,
                            NML_DBUS_META_INTERFACE_PRIO_NMCLIENT,
                            NML_DBUS_META_INTERFACE_PRIO_PARENT_TYPE,
-                           NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_LOW,
-                           NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH));
+                           NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_10,
+                           NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_20,
+                           NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30));
 
         g_assert(mif->get_type_fcn);
         gtype = mif->get_type_fcn();
@@ -2847,22 +2848,85 @@ test_nml_dbus_meta(void)
 
         if (klass) {
             if (NM_IS_OBJECT_CLASS(klass)) {
-                NMObjectClass *                nm_object_class = NM_OBJECT_CLASS(klass);
-                const _NMObjectClassFieldInfo *p_prev;
-                const _NMObjectClassFieldInfo *p;
-
-                p_prev = NULL;
-                for (p = nm_object_class->property_o_info; p; p_prev = p, p = p->parent) {
-                    g_assert(p->num > 0);
-                    g_assert(NM_IS_OBJECT_CLASS(p->klass));
-                    g_assert(g_type_is_a(gtype, G_TYPE_FROM_CLASS(p->klass)));
-                    g_assert(p->klass->property_o_info == p);
-                    if (p_prev) {
-                        g_assert(g_type_is_a(G_TYPE_FROM_CLASS(p_prev->klass),
-                                             G_TYPE_FROM_CLASS(p->klass)));
-                        g_assert(p_prev->klass != p->klass);
+                NMObjectClass *nm_object_class = NM_OBJECT_CLASS(klass);
+
+                if (nm_object_class->property_o_info || nm_object_class->property_ao_info) {
+                    int ii;
+
+                    for (ii = 0; ii < 2; ii++) {
+                        const _NMObjectClassFieldInfo *p_prev = NULL;
+                        const _NMObjectClassFieldInfo *p0     = ii == 0
+                                                                    ? nm_object_class->property_o_info
+                                                                    : nm_object_class->property_ao_info;
+                        const _NMObjectClassFieldInfo *p;
+
+                        for (p = p0; p; p = p->parent) {
+                            GType          parent_gtype;
+                            NMObjectClass *parent_klass;
+
+                            g_assert(p->num > 0);
+                            g_assert(NM_IS_OBJECT_CLASS(p->klass));
+                            g_assert(g_type_is_a(gtype, G_TYPE_FROM_CLASS(p->klass)));
+                            if (ii == 0)
+                                g_assert(p->klass->property_o_info == p);
+                            else
+                                g_assert(p->klass->property_ao_info == p);
+                            g_assert_cmpint(p->klass->priv_ptr_offset, >, 0);
+                            if (p_prev) {
+                                g_assert(g_type_is_a(G_TYPE_FROM_CLASS(p_prev->klass),
+                                                     G_TYPE_FROM_CLASS(p->klass)));
+                                g_assert(p_prev->klass != p->klass);
+                                g_assert_cmpint(p_prev->klass->priv_ptr_offset,
+                                                >,
+                                                p->klass->priv_ptr_offset);
+                                g_assert_cmpint(p->klass->priv_ptr_indirect, ==, TRUE);
+                            }
+
+                            parent_gtype = g_type_parent(G_TYPE_FROM_CLASS(p->klass));
+                            g_assert(g_type_is_a(parent_gtype, NM_TYPE_OBJECT));
+                            parent_klass = g_type_class_peek(parent_gtype);
+                            g_assert(NM_IS_OBJECT_CLASS(parent_klass));
+                            if (parent_gtype == NM_TYPE_OBJECT) {
+                                g_assert_cmpint(parent_klass->priv_ptr_offset, ==, 0);
+                                g_assert_cmpint(parent_klass->priv_ptr_indirect, ==, FALSE);
+                                g_assert(!p->parent);
+                            } else {
+                                if (parent_klass->priv_ptr_offset == 0) {
+                                    g_assert(!parent_klass->property_o_info);
+                                    g_assert(!parent_klass->property_ao_info);
+                                    g_assert_cmpint(parent_klass->priv_ptr_indirect, ==, FALSE);
+                                    g_assert(!p->parent);
+                                } else if (p->klass->priv_ptr_offset
+                                           == parent_klass->priv_ptr_offset) {
+                                    g_assert(p->klass->property_o_info
+                                             == parent_klass->property_o_info);
+                                    g_assert(p->klass->property_ao_info
+                                             == parent_klass->property_ao_info);
+                                    g_assert(p->klass->priv_ptr_indirect
+                                             == parent_klass->priv_ptr_indirect);
+                                } else {
+                                    g_assert_cmpint(parent_klass->priv_ptr_offset, >, 0);
+                                    g_assert_cmpint(parent_klass->priv_ptr_offset,
+                                                    <,
+                                                    p->klass->priv_ptr_offset);
+                                    g_assert_cmpint(parent_klass->priv_ptr_indirect, ==, TRUE);
+                                    g_assert(p->klass->property_o_info
+                                                 != parent_klass->property_o_info
+                                             || p->klass->property_ao_info
+                                                    != parent_klass->property_ao_info);
+                                }
+                            }
+
+                            p_prev = p;
+                        }
                     }
+
+                    g_assert_cmpint(nm_object_class->priv_ptr_offset, >, 0);
+                } else {
+                    g_assert_cmpint(nm_object_class->priv_ptr_offset, ==, 0);
+                    g_assert_cmpint(nm_object_class->priv_ptr_indirect, ==, FALSE);
                 }
+
             } else
                 g_assert(NM_IS_CLIENT_CLASS(klass));
         }
@@ -3128,172 +3192,177 @@ test_dbus_meta_types(void)
         {
             NM_DBUS_INTERFACE_ACCESS_POINT,
             NM_TYPE_ACCESS_POINT,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
             NM_TYPE_ACTIVE_CONNECTION,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_LOW,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_10,
         }, /* otherwise, NM_TYPE_VPN_CONNECTION. */
         {
             NM_DBUS_INTERFACE_DEVICE_6LOWPAN,
             NM_TYPE_DEVICE_6LOWPAN,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_ADSL,
             NM_TYPE_DEVICE_ADSL,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_BOND,
             NM_TYPE_DEVICE_BOND,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_BRIDGE,
             NM_TYPE_DEVICE_BRIDGE,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_BLUETOOTH,
             NM_TYPE_DEVICE_BT,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_DUMMY,
             NM_TYPE_DEVICE_DUMMY,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_WIRED,
             NM_TYPE_DEVICE_ETHERNET,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_20,
+        },
+        {
+            NM_DBUS_INTERFACE_DEVICE_VETH,
+            NM_TYPE_DEVICE_VETH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_GENERIC,
             NM_TYPE_DEVICE_GENERIC,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_INFINIBAND,
             NM_TYPE_DEVICE_INFINIBAND,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_IP_TUNNEL,
             NM_TYPE_DEVICE_IP_TUNNEL,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_MACSEC,
             NM_TYPE_DEVICE_MACSEC,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_MACVLAN,
             NM_TYPE_DEVICE_MACVLAN,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_MODEM,
             NM_TYPE_DEVICE_MODEM,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_OLPC_MESH,
             NM_TYPE_DEVICE_OLPC_MESH,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_OVS_INTERFACE,
             NM_TYPE_DEVICE_OVS_INTERFACE,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_OVS_PORT,
             NM_TYPE_DEVICE_OVS_PORT,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_OVS_BRIDGE,
             NM_TYPE_DEVICE_OVS_BRIDGE,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_WIFI_P2P,
             NM_TYPE_DEVICE_WIFI_P2P,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_PPP,
             NM_TYPE_DEVICE_PPP,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_TEAM,
             NM_TYPE_DEVICE_TEAM,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_TUN,
             NM_TYPE_DEVICE_TUN,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_VLAN,
             NM_TYPE_DEVICE_VLAN,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_WPAN,
             NM_TYPE_DEVICE_WPAN,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_VXLAN,
             NM_TYPE_DEVICE_VXLAN,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_WIRELESS,
             NM_TYPE_DEVICE_WIFI,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DEVICE_WIREGUARD,
             NM_TYPE_DEVICE_WIREGUARD,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DHCP4_CONFIG,
             NM_TYPE_DHCP4_CONFIG,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_DHCP6_CONFIG,
             NM_TYPE_DHCP6_CONFIG,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_IP4_CONFIG,
             NM_TYPE_IP4_CONFIG,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_IP6_CONFIG,
             NM_TYPE_IP6_CONFIG,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_WIFI_P2P_PEER,
             NM_TYPE_WIFI_P2P_PEER,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
             NM_TYPE_REMOTE_CONNECTION,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_SETTINGS,
@@ -3308,12 +3377,12 @@ test_dbus_meta_types(void)
         {
             NM_DBUS_INTERFACE_VPN_CONNECTION,
             NM_TYPE_VPN_CONNECTION,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
         {
             NM_DBUS_INTERFACE_CHECKPOINT,
             NM_TYPE_CHECKPOINT,
-            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH,
+            NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30,
         },
     };
     guint i;
diff --git a/libnm/tests/test-nm-client.c b/libnm/tests/test-nm-client.c
index 6ffef2b0..5452c623 100644
--- a/libnm/tests/test-nm-client.c
+++ b/libnm/tests/test-nm-client.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
+/* SPDX-License-Identifier: GPL-2.0-or-later */
 /*
  * Copyright (C) 2010 - 2014 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include <sys/types.h>
 #include <signal.h>
diff --git a/libnm/tests/test-remote-settings-client.c b/libnm/tests/test-remote-settings-client.c
index 770f074f..0e7b744d 100644
--- a/libnm/tests/test-remote-settings-client.c
+++ b/libnm/tests/test-remote-settings-client.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
+/* SPDX-License-Identifier: GPL-2.0-or-later */
 /*
  * Copyright (C) 2010 - 2011 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include <sys/types.h>
 #include <signal.h>
diff --git a/libnm/tests/test-secret-agent.c b/libnm/tests/test-secret-agent.c
index 0a800788..08c77f8c 100644
--- a/libnm/tests/test-secret-agent.c
+++ b/libnm/tests/test-secret-agent.c
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
+/* SPDX-License-Identifier: GPL-2.0-or-later */
 /*
  * Copyright (C) 2010 - 2014 Red Hat, Inc.
  */
 
-#include "nm-default.h"
+#include "libnm/nm-default-libnm.h"
 
 #include <sys/types.h>
 #include <signal.h>