summary refs log tree commit diff
path: root/src/libnm-core-public
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2021-10-01 23:05:04 +0200
committerMichael Biebl <biebl@debian.org>2021-10-01 23:05:04 +0200
commite74c568b07b50b97873fb4ee1d776dedefbd54d6 (patch)
tree3469f17ea9af91f7ff169b890633bda68b0cf76e /src/libnm-core-public
parentbfe522304da217296e2a61040f58e35ec5d6f3f2 (diff)
New upstream version 1.32.12 upstream/1.32.12
Diffstat (limited to 'src/libnm-core-public')
-rw-r--r--src/libnm-core-public/README.md24
-rw-r--r--src/libnm-core-public/meson.build128
-rw-r--r--src/libnm-core-public/nm-connection.h240
-rw-r--r--src/libnm-core-public/nm-core-types.h73
-rw-r--r--src/libnm-core-public/nm-dbus-interface.h1290
-rw-r--r--src/libnm-core-public/nm-dbus-types.xml2181
-rw-r--r--src/libnm-core-public/nm-errors.h319
-rw-r--r--src/libnm-core-public/nm-keyfile.h165
-rw-r--r--src/libnm-core-public/nm-setting-6lowpan.h44
-rw-r--r--src/libnm-core-public/nm-setting-8021x.h352
-rw-r--r--src/libnm-core-public/nm-setting-adsl.h59
-rw-r--r--src/libnm-core-public/nm-setting-bluetooth.h68
-rw-r--r--src/libnm-core-public/nm-setting-bond.h86
-rw-r--r--src/libnm-core-public/nm-setting-bridge-port.h66
-rw-r--r--src/libnm-core-public/nm-setting-bridge.h183
-rw-r--r--src/libnm-core-public/nm-setting-cdma.h51
-rw-r--r--src/libnm-core-public/nm-setting-connection.h205
-rw-r--r--src/libnm-core-public/nm-setting-dcb.h132
-rw-r--r--src/libnm-core-public/nm-setting-dummy.h38
-rw-r--r--src/libnm-core-public/nm-setting-ethtool.h73
-rw-r--r--src/libnm-core-public/nm-setting-generic.h38
-rw-r--r--src/libnm-core-public/nm-setting-gsm.h79
-rw-r--r--src/libnm-core-public/nm-setting-hostname.h53
-rw-r--r--src/libnm-core-public/nm-setting-infiniband.h52
-rw-r--r--src/libnm-core-public/nm-setting-ip-config.h497
-rw-r--r--src/libnm-core-public/nm-setting-ip-tunnel.h108
-rw-r--r--src/libnm-core-public/nm-setting-ip4-config.h95
-rw-r--r--src/libnm-core-public/nm-setting-ip6-config.h160
-rw-r--r--src/libnm-core-public/nm-setting-macsec.h104
-rw-r--r--src/libnm-core-public/nm-setting-macvlan.h73
-rw-r--r--src/libnm-core-public/nm-setting-match.h107
-rw-r--r--src/libnm-core-public/nm-setting-olpc-mesh.h47
-rw-r--r--src/libnm-core-public/nm-setting-ovs-bridge.h57
-rw-r--r--src/libnm-core-public/nm-setting-ovs-dpdk.h44
-rw-r--r--src/libnm-core-public/nm-setting-ovs-external-ids.h68
-rw-r--r--src/libnm-core-public/nm-setting-ovs-interface.h47
-rw-r--r--src/libnm-core-public/nm-setting-ovs-patch.h44
-rw-r--r--src/libnm-core-public/nm-setting-ovs-port.h59
-rw-r--r--src/libnm-core-public/nm-setting-ppp.h74
-rw-r--r--src/libnm-core-public/nm-setting-pppoe.h50
-rw-r--r--src/libnm-core-public/nm-setting-proxy.h67
-rw-r--r--src/libnm-core-public/nm-setting-serial.h63
-rw-r--r--src/libnm-core-public/nm-setting-sriov.h118
-rw-r--r--src/libnm-core-public/nm-setting-tc-config.h162
-rw-r--r--src/libnm-core-public/nm-setting-team-port.h75
-rw-r--r--src/libnm-core-public/nm-setting-team.h212
-rw-r--r--src/libnm-core-public/nm-setting-tun.h71
-rw-r--r--src/libnm-core-public/nm-setting-user.h55
-rw-r--r--src/libnm-core-public/nm-setting-veth.h41
-rw-r--r--src/libnm-core-public/nm-setting-vlan.h121
-rw-r--r--src/libnm-core-public/nm-setting-vpn.h76
-rw-r--r--src/libnm-core-public/nm-setting-vrf.h38
-rw-r--r--src/libnm-core-public/nm-setting-vxlan.h87
-rw-r--r--src/libnm-core-public/nm-setting-wifi-p2p.h59
-rw-r--r--src/libnm-core-public/nm-setting-wimax.h46
-rw-r--r--src/libnm-core-public/nm-setting-wired.h132
-rw-r--r--src/libnm-core-public/nm-setting-wireguard.h202
-rw-r--r--src/libnm-core-public/nm-setting-wireless-security.h225
-rw-r--r--src/libnm-core-public/nm-setting-wireless.h202
-rw-r--r--src/libnm-core-public/nm-setting-wpan.h57
-rw-r--r--src/libnm-core-public/nm-setting.h263
-rw-r--r--src/libnm-core-public/nm-simple-connection.h40
-rw-r--r--src/libnm-core-public/nm-utils.h259
-rw-r--r--src/libnm-core-public/nm-version-macros.h93
-rw-r--r--src/libnm-core-public/nm-version-macros.h.in93
-rw-r--r--src/libnm-core-public/nm-version.h321
-rw-r--r--src/libnm-core-public/nm-vpn-dbus-interface.h302
-rw-r--r--src/libnm-core-public/nm-vpn-dbus-types.xml246
-rw-r--r--src/libnm-core-public/nm-vpn-editor-plugin.h159
-rw-r--r--src/libnm-core-public/nm-vpn-plugin-info.h105
70 files changed, 11623 insertions, 0 deletions
diff --git a/src/libnm-core-public/README.md b/src/libnm-core-public/README.md
new file mode 100644
index 00000000..0737269d
--- /dev/null
+++ b/src/libnm-core-public/README.md
@@ -0,0 +1,24 @@
+libnm-core-public
+=================
+
+This contains (mostly) header files only, which are also part of
+the public API of [`libnm`](../../libnm).
+
+Also, this API is implemented by the static library [`libnm-core-impl`](../libnm-core-impl),
+which in turn is statically linked into NetworkManager core and [`libnm`](../../libnm).
+
+These headers can be used by anybody who either:
+
+- links (statically) against [`libnm-core-impl`](../libnm-core-impl).
+- links dynamically against [`libnm`](../../libnm).
+
+Note that there is also one source file: `nm-core-enum-types.c`.
+This source file really belongs to [`libnm-core-impl`](../libnm-core-impl) but it is here
+because it's a generated file and so far I couldn't figure out how
+to generate `nm-core-enum-types.h` here while moving `nm-core-enum-types.c`
+to [`libnm-core-impl`](../libnm-core-impl).
+
+Aside `nm-core-enum-types.c`, this directory only provides header files.
+Users should add this directory (both srcdir and builddir) to the include
+search path, because libnm users are used to include these headers unqualified
+(like `#include "nm-setting.h`).
diff --git a/src/libnm-core-public/meson.build b/src/libnm-core-public/meson.build
new file mode 100644
index 00000000..6b8dad0f
--- /dev/null
+++ b/src/libnm-core-public/meson.build
@@ -0,0 +1,128 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+libnm_core_public_inc = include_directories('.')
+
+libnm_core_headers = files(
+  'nm-connection.h',
+  'nm-core-types.h',
+  'nm-dbus-interface.h',
+  'nm-errors.h',
+  'nm-keyfile.h',
+  'nm-setting-6lowpan.h',
+  'nm-setting-8021x.h',
+  'nm-setting-adsl.h',
+  'nm-setting-bluetooth.h',
+  'nm-setting-bond.h',
+  'nm-setting-bridge-port.h',
+  'nm-setting-bridge.h',
+  'nm-setting-cdma.h',
+  'nm-setting-connection.h',
+  'nm-setting-dcb.h',
+  'nm-setting-dummy.h',
+  'nm-setting-ethtool.h',
+  'nm-setting-generic.h',
+  'nm-setting-gsm.h',
+  'nm-setting-hostname.h',
+  'nm-setting-infiniband.h',
+  'nm-setting-ip-config.h',
+  'nm-setting-ip-tunnel.h',
+  'nm-setting-ip4-config.h',
+  'nm-setting-ip6-config.h',
+  'nm-setting-macsec.h',
+  'nm-setting-macvlan.h',
+  'nm-setting-match.h',
+  'nm-setting-olpc-mesh.h',
+  'nm-setting-ovs-bridge.h',
+  'nm-setting-ovs-dpdk.h',
+  'nm-setting-ovs-external-ids.h',
+  'nm-setting-ovs-interface.h',
+  'nm-setting-ovs-patch.h',
+  'nm-setting-ovs-port.h',
+  'nm-setting-ppp.h',
+  'nm-setting-pppoe.h',
+  'nm-setting-proxy.h',
+  'nm-setting-serial.h',
+  'nm-setting-sriov.h',
+  'nm-setting-tc-config.h',
+  'nm-setting-team-port.h',
+  'nm-setting-team.h',
+  'nm-setting-tun.h',
+  'nm-setting-user.h',
+  'nm-setting-veth.h',
+  'nm-setting-vlan.h',
+  'nm-setting-vpn.h',
+  'nm-setting-vrf.h',
+  'nm-setting-vxlan.h',
+  'nm-setting-wifi-p2p.h',
+  'nm-setting-wimax.h',
+  'nm-setting-wired.h',
+  'nm-setting-wireguard.h',
+  'nm-setting-wireless-security.h',
+  'nm-setting-wireless.h',
+  'nm-setting-wpan.h',
+  'nm-setting.h',
+  'nm-simple-connection.h',
+  'nm-utils.h',
+  'nm-version.h',
+  'nm-vpn-dbus-interface.h',
+  'nm-vpn-editor-plugin.h',
+  'nm-vpn-plugin-info.h',
+)
+
+nm_version_macro_header = configure_file(
+  input: 'nm-version-macros.h.in',
+  output: '@BASENAME@',
+  configuration: data_conf,
+)
+
+libnm_core_public_enum_sources = gnome.mkenums_simple(
+  'nm-core-enum-types',
+  sources: libnm_core_headers + [nm_version_macro_header],
+  identifier_prefix: nm_id_prefix,
+  body_prefix: '#include "libnm-core-impl/nm-default-libnm-core.h"',
+  install_header: true,
+  install_dir: libnm_pkgincludedir,
+)
+
+libnm_core_public_dep = declare_dependency(
+  sources: libnm_core_headers + [
+    libnm_core_public_enum_sources[1],
+    nm_version_macro_header,
+  ],
+  include_directories: [
+    libnm_core_public_inc,
+    src_inc,
+    top_inc,
+  ],
+  dependencies: [
+    glib_dep,
+  ],
+)
+
+docbooks = [
+  ['nm-dbus-types',     'nm-dbus-interface.h',     'NetworkManager D-Bus API Types'],
+  ['nm-vpn-dbus-types', 'nm-vpn-dbus-interface.h', 'VPN Plugin D-Bus API Types'],
+]
+
+foreach docbook: docbooks
+  output = docbook[0] + '.xml'
+
+  xml = custom_target(
+    output,
+    input: docbook[1],
+    output: output,
+    capture: true,
+    command: [
+      perl,
+      join_paths(source_root, 'tools', 'enums-to-docbook.pl'),
+      docbook[0],
+      docbook[2],
+      '@INPUT@',
+    ],
+    # FIXME: gtkdoc does not depend directly on this.
+    #        https://github.com/mesonbuild/meson/pull/2806
+    build_by_default: true,
+  )
+
+  content_files += xml.full_path()
+endforeach
diff --git a/src/libnm-core-public/nm-connection.h b/src/libnm-core-public/nm-connection.h
new file mode 100644
index 00000000..44d1568d
--- /dev/null
+++ b/src/libnm-core-public/nm-connection.h
@@ -0,0 +1,240 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2018 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_CONNECTION_H__
+#define __NM_CONNECTION_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-core-types.h"
+#include "nm-setting.h"
+#include "nm-errors.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_CONNECTION    (nm_connection_get_type())
+#define NM_CONNECTION(obj)    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_CONNECTION, NMConnection))
+#define NM_IS_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_CONNECTION))
+#define NM_CONNECTION_GET_INTERFACE(obj) \
+    (G_TYPE_INSTANCE_GET_INTERFACE((obj), NM_TYPE_CONNECTION, NMConnectionClass))
+
+/* Signals */
+#define NM_CONNECTION_SECRETS_UPDATED "secrets-updated"
+#define NM_CONNECTION_SECRETS_CLEARED "secrets-cleared"
+#define NM_CONNECTION_CHANGED         "changed"
+
+/*
+ * NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD: overwrite the ip6 method
+ * when normalizing ip6 configuration. If omitted, this defaults to
+ * @NM_SETTING_IP6_CONFIG_METHOD_AUTO.
+ */
+#define NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD "ip6-config-method"
+
+/**
+ * NMConnection:
+ *
+ * NMConnection is the interface implemented by #NMRemoteConnection on the
+ * client side, and #NMSettingsConnection on the daemon side.
+ */
+
+/**
+ * NMConnectionInterface:
+ * @parent: the parent interface struct
+ * @secrets_updated: emitted when the connection's secrets are updated
+ * @secrets_cleared: emitted when the connection's secrets are cleared
+ * @changed: emitted when any change to the connection's settings occurs
+ */
+typedef struct {
+    GTypeInterface parent;
+
+    /* Signals */
+    void (*secrets_updated)(NMConnection *connection, const char *setting);
+    void (*secrets_cleared)(NMConnection *connection);
+    void (*changed)(NMConnection *connection);
+
+} NMConnectionInterface;
+
+GType nm_connection_get_type(void);
+
+void nm_connection_add_setting(NMConnection *connection, NMSetting *setting);
+
+void nm_connection_remove_setting(NMConnection *connection, GType setting_type);
+
+NMSetting *nm_connection_get_setting(NMConnection *connection, GType setting_type);
+
+NMSetting *nm_connection_get_setting_by_name(NMConnection *connection, const char *name);
+
+/**
+ * NM_VARIANT_TYPE_CONNECTION:
+ *
+ * #GVariantType for a dictionary mapping from setting names to
+ * %NM_VARIANT_TYPE_SETTING variants. This is used to represent an
+ * #NMConnection, and is the type taken by nm_simple_connection_new_from_dbus()
+ * and returned from nm_connection_to_dbus().
+ */
+#define NM_VARIANT_TYPE_CONNECTION (G_VARIANT_TYPE("a{sa{sv}}"))
+
+/**
+ * NM_VARIANT_TYPE_SETTING:
+ *
+ * #GVariantType for a dictionary mapping from property names to values. This is
+ * an alias for %G_VARIANT_TYPE_VARDICT, and is the type of each element of
+ * an %NM_VARIANT_TYPE_CONNECTION dictionary.
+ */
+#define NM_VARIANT_TYPE_SETTING G_VARIANT_TYPE_VARDICT
+
+/**
+ * NMConnectionSerializationFlags:
+ * @NM_CONNECTION_SERIALIZE_ALL: serialize all properties (including secrets)
+ * @NM_CONNECTION_SERIALIZE_WITH_NON_SECRET: serialize properties that are
+ *   not secrets. Since 1.32.
+ * @NM_CONNECTION_SERIALIZE_NO_SECRETS: this is a deprecated alias for
+ *   @NM_CONNECTION_SERIALIZE_WITH_NON_SECRET.
+ * @NM_CONNECTION_SERIALIZE_WITH_SECRETS: serialize all secrets. This flag is
+ *   ignored if any of @NM_CONNECTION_SERIALIZE_WITH_SECRETS_AGENT_OWNED,
+ *   @NM_CONNECTION_SERIALIZE_WITH_SECRETS_SYSTEM_OWNED or
+ *   @NM_CONNECTION_SERIALIZE_WITH_SECRETS_NOT_SAVED is set. Since 1.32.
+ * @NM_CONNECTION_SERIALIZE_ONLY_SECRETS: a deprecated alias for
+ *   @NM_CONNECTION_SERIALIZE_WITH_SECRETS.
+ * @NM_CONNECTION_SERIALIZE_WITH_SECRETS_AGENT_OWNED: serialize agent-owned
+ *   secrets. Since: 1.20.
+ * @NM_CONNECTION_SERIALIZE_WITH_SECRETS_SYSTEM_OWNED: serialize system-owned
+ *   secrets. Since: 1.32.
+ * @NM_CONNECTION_SERIALIZE_WITH_SECRETS_NOT_SAVED: serialize secrets that
+ *   are marked as never saved. Since: 1.32.
+ *
+ * These flags determine which properties are serialized when calling
+ * nm_connection_to_dbus().
+ **/
+typedef enum { /*< flags >*/
+               NM_CONNECTION_SERIALIZE_ALL                       = 0x00000000,
+               NM_CONNECTION_SERIALIZE_WITH_NON_SECRET           = 0x00000001,
+               NM_CONNECTION_SERIALIZE_NO_SECRETS                = 0x00000001,
+               NM_CONNECTION_SERIALIZE_WITH_SECRETS              = 0x00000002,
+               NM_CONNECTION_SERIALIZE_ONLY_SECRETS              = 0x00000002,
+               NM_CONNECTION_SERIALIZE_WITH_SECRETS_AGENT_OWNED  = 0x00000004,
+               NM_CONNECTION_SERIALIZE_WITH_SECRETS_SYSTEM_OWNED = 0x00000008,
+               NM_CONNECTION_SERIALIZE_WITH_SECRETS_NOT_SAVED    = 0x00000010,
+} NMConnectionSerializationFlags;
+
+GVariant *nm_connection_to_dbus(NMConnection *connection, NMConnectionSerializationFlags flags);
+
+gboolean
+nm_connection_replace_settings(NMConnection *connection, GVariant *new_settings, GError **error);
+
+void nm_connection_replace_settings_from_connection(NMConnection *connection,
+                                                    NMConnection *new_connection);
+
+void nm_connection_clear_settings(NMConnection *connection);
+
+gboolean nm_connection_compare(NMConnection *a, NMConnection *b, NMSettingCompareFlags flags);
+
+gboolean nm_connection_diff(NMConnection *        a,
+                            NMConnection *        b,
+                            NMSettingCompareFlags flags,
+                            GHashTable **         out_settings);
+
+gboolean nm_connection_verify(NMConnection *connection, GError **error);
+NM_AVAILABLE_IN_1_2
+gboolean nm_connection_verify_secrets(NMConnection *connection, GError **error);
+gboolean nm_connection_normalize(NMConnection *connection,
+                                 GHashTable *  parameters,
+                                 gboolean *    modified,
+                                 GError **     error);
+
+const char *nm_connection_need_secrets(NMConnection *connection, GPtrArray **hints);
+
+void nm_connection_clear_secrets(NMConnection *connection);
+
+void nm_connection_clear_secrets_with_flags(NMConnection *                   connection,
+                                            NMSettingClearSecretsWithFlagsFn func,
+                                            gpointer                         user_data);
+
+gboolean nm_connection_update_secrets(NMConnection *connection,
+                                      const char *  setting_name,
+                                      GVariant *    secrets,
+                                      GError **     error);
+
+void nm_connection_set_path(NMConnection *connection, const char *path);
+
+const char *nm_connection_get_path(NMConnection *connection);
+
+const char *nm_connection_get_interface_name(NMConnection *connection);
+
+gboolean nm_connection_is_type(NMConnection *connection, const char *type);
+
+void nm_connection_for_each_setting_value(NMConnection *       connection,
+                                          NMSettingValueIterFn func,
+                                          gpointer             user_data);
+
+NM_AVAILABLE_IN_1_10
+NMSetting **nm_connection_get_settings(NMConnection *connection, guint *out_length);
+
+void nm_connection_dump(NMConnection *connection);
+
+/* Helpers */
+const char *nm_connection_get_uuid(NMConnection *connection);
+const char *nm_connection_get_id(NMConnection *connection);
+const char *nm_connection_get_connection_type(NMConnection *connection);
+
+gboolean nm_connection_is_virtual(NMConnection *connection);
+char *   nm_connection_get_virtual_device_description(NMConnection *connection);
+
+NMSetting8021x *     nm_connection_get_setting_802_1x(NMConnection *connection);
+NMSettingBluetooth * nm_connection_get_setting_bluetooth(NMConnection *connection);
+NMSettingBond *      nm_connection_get_setting_bond(NMConnection *connection);
+NMSettingTeam *      nm_connection_get_setting_team(NMConnection *connection);
+NMSettingTeamPort *  nm_connection_get_setting_team_port(NMConnection *connection);
+NMSettingBridge *    nm_connection_get_setting_bridge(NMConnection *connection);
+NMSettingBridgePort *nm_connection_get_setting_bridge_port(NMConnection *connection);
+NMSettingCdma *      nm_connection_get_setting_cdma(NMConnection *connection);
+NMSettingConnection *nm_connection_get_setting_connection(NMConnection *connection);
+NMSettingDcb *       nm_connection_get_setting_dcb(NMConnection *connection);
+NM_AVAILABLE_IN_1_8
+NMSettingDummy *     nm_connection_get_setting_dummy(NMConnection *connection);
+NMSettingGeneric *   nm_connection_get_setting_generic(NMConnection *connection);
+NMSettingGsm *       nm_connection_get_setting_gsm(NMConnection *connection);
+NMSettingInfiniband *nm_connection_get_setting_infiniband(NMConnection *connection);
+NM_AVAILABLE_IN_1_2
+NMSettingIPTunnel *nm_connection_get_setting_ip_tunnel(NMConnection *connection);
+NMSettingIPConfig *nm_connection_get_setting_ip4_config(NMConnection *connection);
+NMSettingIPConfig *nm_connection_get_setting_ip6_config(NMConnection *connection);
+NM_AVAILABLE_IN_1_6
+NMSettingMacsec *nm_connection_get_setting_macsec(NMConnection *connection);
+NM_AVAILABLE_IN_1_2
+NMSettingMacvlan * nm_connection_get_setting_macvlan(NMConnection *connection);
+NMSettingOlpcMesh *nm_connection_get_setting_olpc_mesh(NMConnection *connection);
+NM_AVAILABLE_IN_1_10
+NMSettingOvsBridge *nm_connection_get_setting_ovs_bridge(NMConnection *connection);
+NM_AVAILABLE_IN_1_10
+NMSettingOvsInterface *nm_connection_get_setting_ovs_interface(NMConnection *connection);
+NMSettingOvsPatch *    nm_connection_get_setting_ovs_patch(NMConnection *connection);
+NM_AVAILABLE_IN_1_10
+NMSettingOvsPort *nm_connection_get_setting_ovs_port(NMConnection *connection);
+NMSettingPpp *    nm_connection_get_setting_ppp(NMConnection *connection);
+NMSettingPppoe *  nm_connection_get_setting_pppoe(NMConnection *connection);
+NM_AVAILABLE_IN_1_6
+NMSettingProxy * nm_connection_get_setting_proxy(NMConnection *connection);
+NMSettingSerial *nm_connection_get_setting_serial(NMConnection *connection);
+NM_AVAILABLE_IN_1_12
+NMSettingTCConfig *nm_connection_get_setting_tc_config(NMConnection *connection);
+NM_AVAILABLE_IN_1_2
+NMSettingTun *             nm_connection_get_setting_tun(NMConnection *connection);
+NMSettingVpn *             nm_connection_get_setting_vpn(NMConnection *connection);
+NMSettingWimax *           nm_connection_get_setting_wimax(NMConnection *connection);
+NMSettingAdsl *            nm_connection_get_setting_adsl(NMConnection *connection);
+NMSettingWired *           nm_connection_get_setting_wired(NMConnection *connection);
+NMSettingWireless *        nm_connection_get_setting_wireless(NMConnection *connection);
+NMSettingWirelessSecurity *nm_connection_get_setting_wireless_security(NMConnection *connection);
+NMSettingVlan *            nm_connection_get_setting_vlan(NMConnection *connection);
+NM_AVAILABLE_IN_1_2
+NMSettingVxlan *nm_connection_get_setting_vxlan(NMConnection *connection);
+
+G_END_DECLS
+
+#endif /* __NM_CONNECTION_H__ */
diff --git a/src/libnm-core-public/nm-core-types.h b/src/libnm-core-public/nm-core-types.h
new file mode 100644
index 00000000..bf0c2a99
--- /dev/null
+++ b/src/libnm-core-public/nm-core-types.h
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2014 - 2018 Red Hat, Inc.
+ */
+
+#ifndef __NM_CORE_TYPES_H__
+#define __NM_CORE_TYPES_H__
+
+#include <glib-object.h>
+
+#include "nm-version.h"
+#include "nm-dbus-interface.h"
+#include "nm-core-enum-types.h"
+
+typedef struct _NMConnection              NMConnection;
+typedef struct _NMSetting                 NMSetting;
+typedef struct _NMSetting6Lowpan          NMSetting6Lowpan;
+typedef struct _NMSetting8021x            NMSetting8021x;
+typedef struct _NMSettingAdsl             NMSettingAdsl;
+typedef struct _NMSettingBluetooth        NMSettingBluetooth;
+typedef struct _NMSettingBond             NMSettingBond;
+typedef struct _NMSettingBridge           NMSettingBridge;
+typedef struct _NMSettingBridgePort       NMSettingBridgePort;
+typedef struct _NMSettingCdma             NMSettingCdma;
+typedef struct _NMSettingConnection       NMSettingConnection;
+typedef struct _NMSettingDcb              NMSettingDcb;
+typedef struct _NMSettingDummy            NMSettingDummy;
+typedef struct _NMSettingEthtool          NMSettingEthtool;
+typedef struct _NMSettingGeneric          NMSettingGeneric;
+typedef struct _NMSettingGsm              NMSettingGsm;
+typedef struct _NMSettingHostname         NMSettingHostname;
+typedef struct _NMSettingIP4Config        NMSettingIP4Config;
+typedef struct _NMSettingIP6Config        NMSettingIP6Config;
+typedef struct _NMSettingIPConfig         NMSettingIPConfig;
+typedef struct _NMSettingIPTunnel         NMSettingIPTunnel;
+typedef struct _NMSettingInfiniband       NMSettingInfiniband;
+typedef struct _NMSettingMacsec           NMSettingMacsec;
+typedef struct _NMSettingMacvlan          NMSettingMacvlan;
+typedef struct _NMSettingMatch            NMSettingMatch;
+typedef struct _NMSettingOlpcMesh         NMSettingOlpcMesh;
+typedef struct _NMSettingOvsBridge        NMSettingOvsBridge;
+typedef struct _NMSettingOvsDpdk          NMSettingOvsDpdk;
+typedef struct _NMSettingOvsExternalIDs   NMSettingOvsExternalIDs;
+typedef struct _NMSettingOvsInterface     NMSettingOvsInterface;
+typedef struct _NMSettingOvsPatch         NMSettingOvsPatch;
+typedef struct _NMSettingOvsPort          NMSettingOvsPort;
+typedef struct _NMSettingPpp              NMSettingPpp;
+typedef struct _NMSettingPppoe            NMSettingPppoe;
+typedef struct _NMSettingProxy            NMSettingProxy;
+typedef struct _NMSettingSerial           NMSettingSerial;
+typedef struct _NMSettingSriov            NMSettingSriov;
+typedef struct _NMSettingTCConfig         NMSettingTCConfig;
+typedef struct _NMSettingTeam             NMSettingTeam;
+typedef struct _NMSettingTeamPort         NMSettingTeamPort;
+typedef struct _NMSettingTun              NMSettingTun;
+typedef struct _NMSettingUser             NMSettingUser;
+typedef struct _NMSettingVeth             NMSettingVeth;
+typedef struct _NMSettingVlan             NMSettingVlan;
+typedef struct _NMSettingVpn              NMSettingVpn;
+typedef struct _NMSettingVrf              NMSettingVrf;
+typedef struct _NMSettingVxlan            NMSettingVxlan;
+typedef struct _NMSettingWifiP2P          NMSettingWifiP2P;
+typedef struct _NMSettingWimax            NMSettingWimax;
+typedef struct _NMSettingWired            NMSettingWired;
+typedef struct _NMSettingWireGuard        NMSettingWireGuard;
+typedef struct _NMSettingWireless         NMSettingWireless;
+typedef struct _NMSettingWirelessSecurity NMSettingWirelessSecurity;
+typedef struct _NMSettingWpan             NMSettingWpan;
+typedef struct _NMSimpleConnection        NMSimpleConnection;
+
+typedef gboolean (*NMUtilsPredicateStr)(const char *str);
+
+#endif /* __NM_CORE_TYPES_H__ */
diff --git a/src/libnm-core-public/nm-dbus-interface.h b/src/libnm-core-public/nm-dbus-interface.h
new file mode 100644
index 00000000..626b2006
--- /dev/null
+++ b/src/libnm-core-public/nm-dbus-interface.h
@@ -0,0 +1,1290 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2004 - 2018 Red Hat, Inc.
+ */
+
+/* Definitions related to NetworkManager's D-Bus interfaces.
+ *
+ * Note that although this header is installed as part of libnm, it is also
+ * used by some external code that does not link to libnm.
+ */
+
+#ifndef __NM_DBUS_INTERFACE_H__
+#define __NM_DBUS_INTERFACE_H__
+
+/* This header must not include glib or libnm. */
+
+#ifndef NM_VERSION_H
+    #define NM_AVAILABLE_IN_1_2
+    #define NM_AVAILABLE_IN_1_8
+#endif
+
+/*
+ * dbus services details
+ */
+#define NM_DBUS_SERVICE "org.freedesktop.NetworkManager"
+
+#define NM_DBUS_INTERFACE                      "org.freedesktop.NetworkManager"
+#define NM_DBUS_INTERFACE_ACCESS_POINT         NM_DBUS_INTERFACE ".AccessPoint"
+#define NM_DBUS_INTERFACE_ACTIVE_CONNECTION    NM_DBUS_INTERFACE ".Connection.Active"
+#define NM_DBUS_INTERFACE_CHECKPOINT           NM_DBUS_INTERFACE ".Checkpoint"
+#define NM_DBUS_INTERFACE_DEVICE               NM_DBUS_INTERFACE ".Device"
+#define NM_DBUS_INTERFACE_DEVICE_6LOWPAN       NM_DBUS_INTERFACE_DEVICE ".Lowpan"
+#define NM_DBUS_INTERFACE_DEVICE_ADSL          NM_DBUS_INTERFACE_DEVICE ".Adsl"
+#define NM_DBUS_INTERFACE_DEVICE_BLUETOOTH     NM_DBUS_INTERFACE_DEVICE ".Bluetooth"
+#define NM_DBUS_INTERFACE_DEVICE_BOND          NM_DBUS_INTERFACE_DEVICE ".Bond"
+#define NM_DBUS_INTERFACE_DEVICE_BRIDGE        NM_DBUS_INTERFACE_DEVICE ".Bridge"
+#define NM_DBUS_INTERFACE_DEVICE_DUMMY         NM_DBUS_INTERFACE_DEVICE ".Dummy"
+#define NM_DBUS_INTERFACE_DEVICE_GENERIC       NM_DBUS_INTERFACE_DEVICE ".Generic"
+#define NM_DBUS_INTERFACE_DEVICE_GRE           NM_DBUS_INTERFACE_DEVICE ".Gre"
+#define NM_DBUS_INTERFACE_DEVICE_INFINIBAND    NM_DBUS_INTERFACE_DEVICE ".Infiniband"
+#define NM_DBUS_INTERFACE_DEVICE_IP_TUNNEL     NM_DBUS_INTERFACE_DEVICE ".IPTunnel"
+#define NM_DBUS_INTERFACE_DEVICE_MACSEC        NM_DBUS_INTERFACE_DEVICE ".Macsec"
+#define NM_DBUS_INTERFACE_DEVICE_MACVLAN       NM_DBUS_INTERFACE_DEVICE ".Macvlan"
+#define NM_DBUS_INTERFACE_DEVICE_MODEM         NM_DBUS_INTERFACE_DEVICE ".Modem"
+#define NM_DBUS_INTERFACE_DEVICE_OLPC_MESH     NM_DBUS_INTERFACE_DEVICE ".OlpcMesh"
+#define NM_DBUS_INTERFACE_DEVICE_OVS_BRIDGE    NM_DBUS_INTERFACE_DEVICE ".OvsBridge"
+#define NM_DBUS_INTERFACE_DEVICE_OVS_INTERFACE NM_DBUS_INTERFACE_DEVICE ".OvsInterface"
+#define NM_DBUS_INTERFACE_DEVICE_OVS_PORT      NM_DBUS_INTERFACE_DEVICE ".OvsPort"
+#define NM_DBUS_INTERFACE_DEVICE_PPP           NM_DBUS_INTERFACE_DEVICE ".Ppp"
+#define NM_DBUS_INTERFACE_DEVICE_STATISTICS    NM_DBUS_INTERFACE_DEVICE ".Statistics"
+#define NM_DBUS_INTERFACE_DEVICE_TEAM          NM_DBUS_INTERFACE_DEVICE ".Team"
+#define NM_DBUS_INTERFACE_DEVICE_TUN           NM_DBUS_INTERFACE_DEVICE ".Tun"
+#define NM_DBUS_INTERFACE_DEVICE_VETH          NM_DBUS_INTERFACE_DEVICE ".Veth"
+#define NM_DBUS_INTERFACE_DEVICE_VLAN          NM_DBUS_INTERFACE_DEVICE ".Vlan"
+#define NM_DBUS_INTERFACE_DEVICE_VRF           NM_DBUS_INTERFACE_DEVICE ".Vrf"
+#define NM_DBUS_INTERFACE_DEVICE_VXLAN         NM_DBUS_INTERFACE_DEVICE ".Vxlan"
+#define NM_DBUS_INTERFACE_DEVICE_WIFI_P2P      NM_DBUS_INTERFACE_DEVICE ".WifiP2P"
+#define NM_DBUS_INTERFACE_DEVICE_WIMAX         NM_DBUS_INTERFACE_DEVICE ".WiMax"
+#define NM_DBUS_INTERFACE_DEVICE_WIRED         NM_DBUS_INTERFACE_DEVICE ".Wired"
+#define NM_DBUS_INTERFACE_DEVICE_WIREGUARD     NM_DBUS_INTERFACE_DEVICE ".WireGuard"
+#define NM_DBUS_INTERFACE_DEVICE_WIRELESS      NM_DBUS_INTERFACE_DEVICE ".Wireless"
+#define NM_DBUS_INTERFACE_DEVICE_WPAN          NM_DBUS_INTERFACE_DEVICE ".Wpan"
+#define NM_DBUS_INTERFACE_DHCP4_CONFIG         NM_DBUS_INTERFACE ".DHCP4Config"
+#define NM_DBUS_INTERFACE_DHCP6_CONFIG         NM_DBUS_INTERFACE ".DHCP6Config"
+#define NM_DBUS_INTERFACE_IP4_CONFIG           NM_DBUS_INTERFACE ".IP4Config"
+#define NM_DBUS_INTERFACE_IP6_CONFIG           NM_DBUS_INTERFACE ".IP6Config"
+#define NM_DBUS_INTERFACE_WIFI_P2P_PEER        NM_DBUS_INTERFACE ".WifiP2PPeer"
+#define NM_DBUS_INTERFACE_WIMAX_NSP            NM_DBUS_INTERFACE ".WiMax.Nsp"
+
+#define NM_DBUS_PATH               "/org/freedesktop/NetworkManager"
+#define NM_DBUS_PATH_ACCESS_POINT  NM_DBUS_PATH "/AccessPoint"
+#define NM_DBUS_PATH_WIFI_P2P_PEER NM_DBUS_PATH "/WifiP2PPeer"
+#define NM_DBUS_PATH_WIMAX_NSP     NM_DBUS_PATH "/Nsp"
+
+#define NM_DBUS_INTERFACE_SETTINGS "org.freedesktop.NetworkManager.Settings"
+#define NM_DBUS_PATH_SETTINGS      "/org/freedesktop/NetworkManager/Settings"
+
+#define NM_DBUS_INTERFACE_SETTINGS_CONNECTION "org.freedesktop.NetworkManager.Settings.Connection"
+#define NM_DBUS_PATH_SETTINGS_CONNECTION      "/org/freedesktop/NetworkManager/Settings/Connection"
+#define NM_DBUS_INTERFACE_SETTINGS_CONNECTION_SECRETS \
+    "org.freedesktop.NetworkManager.Settings.Connection.Secrets"
+
+#define NM_DBUS_INTERFACE_AGENT_MANAGER NM_DBUS_INTERFACE ".AgentManager"
+#define NM_DBUS_PATH_AGENT_MANAGER      "/org/freedesktop/NetworkManager/AgentManager"
+
+#define NM_DBUS_INTERFACE_SECRET_AGENT NM_DBUS_INTERFACE ".SecretAgent"
+#define NM_DBUS_PATH_SECRET_AGENT      "/org/freedesktop/NetworkManager/SecretAgent"
+
+#define NM_DBUS_INTERFACE_DNS_MANAGER "org.freedesktop.NetworkManager.DnsManager"
+#define NM_DBUS_PATH_DNS_MANAGER      "/org/freedesktop/NetworkManager/DnsManager"
+
+/**
+ * NMCapability:
+ * @NM_CAPABILITY_TEAM: Teams can be managed. This means the team device plugin
+ *   is loaded.
+ * @NM_CAPABILITY_OVS: OpenVSwitch can be managed. This means the OVS device plugin
+ *   is loaded. Since: 1.24.
+ *
+ * #NMCapability names the numbers in the Capabilities property.
+ * Capabilities are positive numbers. They are part of stable API
+ * and a certain capability number is guaranteed not to change.
+ *
+ * The range 0x7000 - 0x7FFF of capabilities is guaranteed not to be
+ * used by upstream NetworkManager. It could thus be used for downstream
+ * extensions.
+ */
+typedef enum {
+    NM_CAPABILITY_TEAM = 1,
+    NM_CAPABILITY_OVS  = 2,
+} NMCapability;
+
+/**
+ * NMState:
+ * @NM_STATE_UNKNOWN: Networking state is unknown. This indicates a daemon error
+ *    that makes it unable to reasonably assess the state. In such event the
+ *    applications are expected to assume Internet connectivity might be present
+ *    and not disable controls that require network access.
+ *    The graphical shells may hide the network accessibility indicator altogether
+ *    since no meaningful status indication can be provided.
+ * @NM_STATE_ASLEEP: Networking is not enabled, the system is being suspended or
+ *    resumed from suspend.
+ * @NM_STATE_DISCONNECTED: There is no active network connection.
+ *    The graphical shell should indicate  no network connectivity and the
+ *    applications should not attempt to access the network.
+ * @NM_STATE_DISCONNECTING: Network connections are being cleaned up.
+ *    The applications should tear down their network sessions.
+ * @NM_STATE_CONNECTING: A network connection is being started
+ *    The graphical shell should indicate the network is being connected while
+ *    the applications should still make no attempts to connect the network.
+ * @NM_STATE_CONNECTED_LOCAL: There is only local IPv4 and/or IPv6 connectivity,
+ *    but no default route to access the Internet. The graphical shell should
+ *    indicate no network connectivity.
+ * @NM_STATE_CONNECTED_SITE: There is only site-wide IPv4 and/or IPv6 connectivity.
+ *    This means a default route is available, but the Internet connectivity check
+ *    (see "Connectivity" property) did not succeed. The graphical shell should
+ *    indicate limited network connectivity.
+ * @NM_STATE_CONNECTED_GLOBAL: There is global IPv4 and/or IPv6 Internet connectivity
+ *    This means the Internet connectivity check succeeded, the graphical shell should
+ *    indicate full network connectivity.
+ *
+ * #NMState values indicate the current overall networking state.
+ **/
+typedef enum {
+    NM_STATE_UNKNOWN          = 0,
+    NM_STATE_ASLEEP           = 10,
+    NM_STATE_DISCONNECTED     = 20,
+    NM_STATE_DISCONNECTING    = 30,
+    NM_STATE_CONNECTING       = 40,
+    NM_STATE_CONNECTED_LOCAL  = 50,
+    NM_STATE_CONNECTED_SITE   = 60,
+    NM_STATE_CONNECTED_GLOBAL = 70,
+} NMState;
+
+/**
+ * NMConnectivityState:
+ * @NM_CONNECTIVITY_UNKNOWN: Network connectivity is unknown. This means the
+ *   connectivity checks are disabled (e.g. on server installations) or has
+ *   not run yet. The graphical shell should assume the Internet connection
+ *   might be available and not present a captive portal window.
+ * @NM_CONNECTIVITY_NONE: The host is not connected to any network. There's
+ *   no active connection that contains a default route to the internet and
+ *   thus it makes no sense to even attempt a connectivity check. The graphical
+ *   shell should use this state to indicate the network connection is unavailable.
+ * @NM_CONNECTIVITY_PORTAL: The Internet connection is hijacked by a captive
+ *   portal gateway. The graphical shell may open a sandboxed web browser window
+ *   (because the captive portals typically attempt a man-in-the-middle attacks
+ *   against the https connections) for the purpose of authenticating to a gateway
+ *   and retrigger the connectivity check with CheckConnectivity() when the
+ *   browser window is dismissed.
+ * @NM_CONNECTIVITY_LIMITED: The host is connected to a network, does not appear
+ *   to be able to reach the full Internet, but a captive portal has not been
+ *   detected.
+ * @NM_CONNECTIVITY_FULL: The host is connected to a network, and
+ *   appears to be able to reach the full Internet.
+ */
+typedef enum {
+    NM_CONNECTIVITY_UNKNOWN = 0,
+    NM_CONNECTIVITY_NONE    = 1,
+    NM_CONNECTIVITY_PORTAL  = 2,
+    NM_CONNECTIVITY_LIMITED = 3,
+    NM_CONNECTIVITY_FULL    = 4,
+} NMConnectivityState;
+
+/**
+ * NMDeviceType:
+ * @NM_DEVICE_TYPE_UNKNOWN: unknown device
+ * @NM_DEVICE_TYPE_GENERIC: generic support for unrecognized device types
+ * @NM_DEVICE_TYPE_ETHERNET: a wired ethernet device
+ * @NM_DEVICE_TYPE_WIFI: an 802.11 Wi-Fi device
+ * @NM_DEVICE_TYPE_UNUSED1: not used
+ * @NM_DEVICE_TYPE_UNUSED2: not used
+ * @NM_DEVICE_TYPE_BT: a Bluetooth device supporting PAN or DUN access protocols
+ * @NM_DEVICE_TYPE_OLPC_MESH: an OLPC XO mesh networking device
+ * @NM_DEVICE_TYPE_WIMAX: an 802.16e Mobile WiMAX broadband device
+ * @NM_DEVICE_TYPE_MODEM: a modem supporting analog telephone, CDMA/EVDO,
+ * GSM/UMTS, or LTE network access protocols
+ * @NM_DEVICE_TYPE_INFINIBAND: an IP-over-InfiniBand device
+ * @NM_DEVICE_TYPE_BOND: a bond master interface
+ * @NM_DEVICE_TYPE_VLAN: an 802.1Q VLAN interface
+ * @NM_DEVICE_TYPE_ADSL: ADSL modem
+ * @NM_DEVICE_TYPE_BRIDGE: a bridge master interface
+ * @NM_DEVICE_TYPE_TEAM: a team master interface
+ * @NM_DEVICE_TYPE_TUN: a TUN or TAP interface
+ * @NM_DEVICE_TYPE_IP_TUNNEL: a IP tunnel interface
+ * @NM_DEVICE_TYPE_MACVLAN: a MACVLAN interface
+ * @NM_DEVICE_TYPE_VXLAN: a VXLAN interface
+ * @NM_DEVICE_TYPE_VETH: a VETH interface
+ * @NM_DEVICE_TYPE_MACSEC: a MACsec interface
+ * @NM_DEVICE_TYPE_DUMMY: a dummy interface
+ * @NM_DEVICE_TYPE_PPP: a PPP interface
+ * @NM_DEVICE_TYPE_OVS_INTERFACE: a Open vSwitch interface
+ * @NM_DEVICE_TYPE_OVS_PORT: a Open vSwitch port
+ * @NM_DEVICE_TYPE_OVS_BRIDGE: a Open vSwitch bridge
+ * @NM_DEVICE_TYPE_WPAN: a IEEE 802.15.4 (WPAN) MAC Layer Device
+ * @NM_DEVICE_TYPE_6LOWPAN: 6LoWPAN interface
+ * @NM_DEVICE_TYPE_WIREGUARD: a WireGuard interface
+ * @NM_DEVICE_TYPE_WIFI_P2P: an 802.11 Wi-Fi P2P device. Since: 1.16.
+ * @NM_DEVICE_TYPE_VRF: A VRF (Virtual Routing and Forwarding) interface. Since: 1.24.
+ *
+ * #NMDeviceType values indicate the type of hardware represented by a
+ * device object.
+ **/
+typedef enum {
+    NM_DEVICE_TYPE_UNKNOWN       = 0,
+    NM_DEVICE_TYPE_ETHERNET      = 1,
+    NM_DEVICE_TYPE_WIFI          = 2,
+    NM_DEVICE_TYPE_UNUSED1       = 3,
+    NM_DEVICE_TYPE_UNUSED2       = 4,
+    NM_DEVICE_TYPE_BT            = 5, /* Bluetooth */
+    NM_DEVICE_TYPE_OLPC_MESH     = 6,
+    NM_DEVICE_TYPE_WIMAX         = 7,
+    NM_DEVICE_TYPE_MODEM         = 8,
+    NM_DEVICE_TYPE_INFINIBAND    = 9,
+    NM_DEVICE_TYPE_BOND          = 10,
+    NM_DEVICE_TYPE_VLAN          = 11,
+    NM_DEVICE_TYPE_ADSL          = 12,
+    NM_DEVICE_TYPE_BRIDGE        = 13,
+    NM_DEVICE_TYPE_GENERIC       = 14,
+    NM_DEVICE_TYPE_TEAM          = 15,
+    NM_DEVICE_TYPE_TUN           = 16,
+    NM_DEVICE_TYPE_IP_TUNNEL     = 17,
+    NM_DEVICE_TYPE_MACVLAN       = 18,
+    NM_DEVICE_TYPE_VXLAN         = 19,
+    NM_DEVICE_TYPE_VETH          = 20,
+    NM_DEVICE_TYPE_MACSEC        = 21,
+    NM_DEVICE_TYPE_DUMMY         = 22,
+    NM_DEVICE_TYPE_PPP           = 23,
+    NM_DEVICE_TYPE_OVS_INTERFACE = 24,
+    NM_DEVICE_TYPE_OVS_PORT      = 25,
+    NM_DEVICE_TYPE_OVS_BRIDGE    = 26,
+    NM_DEVICE_TYPE_WPAN          = 27,
+    NM_DEVICE_TYPE_6LOWPAN       = 28,
+    NM_DEVICE_TYPE_WIREGUARD     = 29,
+    NM_DEVICE_TYPE_WIFI_P2P      = 30,
+    NM_DEVICE_TYPE_VRF           = 31,
+} NMDeviceType;
+
+/**
+ * NMDeviceCapabilities:
+ * @NM_DEVICE_CAP_NONE: device has no special capabilities
+ * @NM_DEVICE_CAP_NM_SUPPORTED: NetworkManager supports this device
+ * @NM_DEVICE_CAP_CARRIER_DETECT: this device can indicate carrier status
+ * @NM_DEVICE_CAP_IS_SOFTWARE: this device is a software device
+ * @NM_DEVICE_CAP_SRIOV: this device supports single-root I/O virtualization
+ *
+ * General device capability flags.
+ **/
+typedef enum { /*< flags >*/
+               NM_DEVICE_CAP_NONE           = 0x00000000,
+               NM_DEVICE_CAP_NM_SUPPORTED   = 0x00000001,
+               NM_DEVICE_CAP_CARRIER_DETECT = 0x00000002,
+               NM_DEVICE_CAP_IS_SOFTWARE    = 0x00000004,
+               NM_DEVICE_CAP_SRIOV          = 0x00000008,
+} NMDeviceCapabilities;
+
+/**
+ * NMDeviceWifiCapabilities:
+ * @NM_WIFI_DEVICE_CAP_NONE: device has no encryption/authentication capabilities
+ * @NM_WIFI_DEVICE_CAP_CIPHER_WEP40: device supports 40/64-bit WEP encryption
+ * @NM_WIFI_DEVICE_CAP_CIPHER_WEP104: device supports 104/128-bit WEP encryption
+ * @NM_WIFI_DEVICE_CAP_CIPHER_TKIP: device supports TKIP encryption
+ * @NM_WIFI_DEVICE_CAP_CIPHER_CCMP: device supports AES/CCMP encryption
+ * @NM_WIFI_DEVICE_CAP_WPA: device supports WPA1 authentication
+ * @NM_WIFI_DEVICE_CAP_RSN: device supports WPA2/RSN authentication
+ * @NM_WIFI_DEVICE_CAP_AP: device supports Access Point mode
+ * @NM_WIFI_DEVICE_CAP_ADHOC: device supports Ad-Hoc mode
+ * @NM_WIFI_DEVICE_CAP_FREQ_VALID: device reports frequency capabilities
+ * @NM_WIFI_DEVICE_CAP_FREQ_2GHZ: device supports 2.4GHz frequencies
+ * @NM_WIFI_DEVICE_CAP_FREQ_5GHZ: device supports 5GHz frequencies
+ * @NM_WIFI_DEVICE_CAP_MESH: device supports acting as a mesh point. Since: 1.20.
+ * @NM_WIFI_DEVICE_CAP_IBSS_RSN: device supports WPA2/RSN in an IBSS network. Since: 1.22.
+ *
+ * 802.11 specific device encryption and authentication capabilities.
+ **/
+typedef enum { /*< flags >*/
+               NM_WIFI_DEVICE_CAP_NONE          = 0x00000000,
+               NM_WIFI_DEVICE_CAP_CIPHER_WEP40  = 0x00000001,
+               NM_WIFI_DEVICE_CAP_CIPHER_WEP104 = 0x00000002,
+               NM_WIFI_DEVICE_CAP_CIPHER_TKIP   = 0x00000004,
+               NM_WIFI_DEVICE_CAP_CIPHER_CCMP   = 0x00000008,
+               NM_WIFI_DEVICE_CAP_WPA           = 0x00000010,
+               NM_WIFI_DEVICE_CAP_RSN           = 0x00000020,
+               NM_WIFI_DEVICE_CAP_AP            = 0x00000040,
+               NM_WIFI_DEVICE_CAP_ADHOC         = 0x00000080,
+               NM_WIFI_DEVICE_CAP_FREQ_VALID    = 0x00000100,
+               NM_WIFI_DEVICE_CAP_FREQ_2GHZ     = 0x00000200,
+               NM_WIFI_DEVICE_CAP_FREQ_5GHZ     = 0x00000400,
+               NM_WIFI_DEVICE_CAP_MESH          = 0x00001000,
+               NM_WIFI_DEVICE_CAP_IBSS_RSN      = 0x00002000,
+} NMDeviceWifiCapabilities;
+
+/**
+ * NM80211ApFlags:
+ * @NM_802_11_AP_FLAGS_NONE: access point has no special capabilities
+ * @NM_802_11_AP_FLAGS_PRIVACY: access point requires authentication and
+ * encryption (usually means WEP)
+ * @NM_802_11_AP_FLAGS_WPS: access point supports some WPS method
+ * @NM_802_11_AP_FLAGS_WPS_PBC: access point supports push-button WPS
+ * @NM_802_11_AP_FLAGS_WPS_PIN: access point supports PIN-based WPS
+ *
+ * 802.11 access point flags.
+ **/
+typedef enum { /*< underscore_name=nm_802_11_ap_flags, flags >*/
+               NM_802_11_AP_FLAGS_NONE    = 0x00000000,
+               NM_802_11_AP_FLAGS_PRIVACY = 0x00000001,
+               NM_802_11_AP_FLAGS_WPS     = 0x00000002,
+               NM_802_11_AP_FLAGS_WPS_PBC = 0x00000004,
+               NM_802_11_AP_FLAGS_WPS_PIN = 0x00000008,
+} NM80211ApFlags;
+
+/**
+ * NM80211ApSecurityFlags:
+ * @NM_802_11_AP_SEC_NONE: the access point has no special security requirements
+ * @NM_802_11_AP_SEC_PAIR_WEP40: 40/64-bit WEP is supported for
+ * pairwise/unicast encryption
+ * @NM_802_11_AP_SEC_PAIR_WEP104: 104/128-bit WEP is supported for
+ * pairwise/unicast encryption
+ * @NM_802_11_AP_SEC_PAIR_TKIP: TKIP is supported for pairwise/unicast encryption
+ * @NM_802_11_AP_SEC_PAIR_CCMP: AES/CCMP is supported for pairwise/unicast encryption
+ * @NM_802_11_AP_SEC_GROUP_WEP40: 40/64-bit WEP is supported for group/broadcast
+ * encryption
+ * @NM_802_11_AP_SEC_GROUP_WEP104: 104/128-bit WEP is supported for
+ * group/broadcast encryption
+ * @NM_802_11_AP_SEC_GROUP_TKIP: TKIP is supported for group/broadcast encryption
+ * @NM_802_11_AP_SEC_GROUP_CCMP: AES/CCMP is supported for group/broadcast
+ * encryption
+ * @NM_802_11_AP_SEC_KEY_MGMT_PSK: WPA/RSN Pre-Shared Key encryption is
+ * supported
+ * @NM_802_11_AP_SEC_KEY_MGMT_802_1X: 802.1x authentication and key management
+ * is supported
+ * @NM_802_11_AP_SEC_KEY_MGMT_SAE: WPA/RSN Simultaneous Authentication of Equals is
+ * supported
+ * @NM_802_11_AP_SEC_KEY_MGMT_OWE: WPA/RSN Opportunistic Wireless Encryption is
+ * supported
+ * @NM_802_11_AP_SEC_KEY_MGMT_OWE_TM: WPA/RSN Opportunistic Wireless Encryption
+ * transition mode is supported. Since: 1.26.
+ * @NM_802_11_AP_SEC_KEY_MGMT_EAP_SUITE_B_192: WPA3 Enterprise Suite-B 192 bit mode
+ * is supported. Since: 1.30.
+ *
+ * 802.11 access point security and authentication flags.  These flags describe
+ * the current security requirements of an access point as determined from the
+ * access point's beacon.
+ **/
+typedef enum { /*< underscore_name=nm_802_11_ap_security_flags, flags >*/
+               NM_802_11_AP_SEC_NONE                     = 0x00000000,
+               NM_802_11_AP_SEC_PAIR_WEP40               = 0x00000001,
+               NM_802_11_AP_SEC_PAIR_WEP104              = 0x00000002,
+               NM_802_11_AP_SEC_PAIR_TKIP                = 0x00000004,
+               NM_802_11_AP_SEC_PAIR_CCMP                = 0x00000008,
+               NM_802_11_AP_SEC_GROUP_WEP40              = 0x00000010,
+               NM_802_11_AP_SEC_GROUP_WEP104             = 0x00000020,
+               NM_802_11_AP_SEC_GROUP_TKIP               = 0x00000040,
+               NM_802_11_AP_SEC_GROUP_CCMP               = 0x00000080,
+               NM_802_11_AP_SEC_KEY_MGMT_PSK             = 0x00000100,
+               NM_802_11_AP_SEC_KEY_MGMT_802_1X          = 0x00000200,
+               NM_802_11_AP_SEC_KEY_MGMT_SAE             = 0x00000400,
+               NM_802_11_AP_SEC_KEY_MGMT_OWE             = 0x00000800,
+               NM_802_11_AP_SEC_KEY_MGMT_OWE_TM          = 0x00001000,
+               NM_802_11_AP_SEC_KEY_MGMT_EAP_SUITE_B_192 = 0x00002000,
+} NM80211ApSecurityFlags;
+
+/**
+ * NM80211Mode:
+ * @NM_802_11_MODE_UNKNOWN: the device or access point mode is unknown
+ * @NM_802_11_MODE_ADHOC: for both devices and access point objects, indicates
+ *   the object is part of an Ad-Hoc 802.11 network without a central
+ *   coordinating access point.
+ * @NM_802_11_MODE_INFRA: the device or access point is in infrastructure mode.
+ *   For devices, this indicates the device is an 802.11 client/station.  For
+ *   access point objects, this indicates the object is an access point that
+ *   provides connectivity to clients.
+ * @NM_802_11_MODE_AP: the device is an access point/hotspot.  Not valid for
+ *   access point objects; used only for hotspot mode on the local machine.
+ * @NM_802_11_MODE_MESH: the device is a 802.11s mesh point. Since: 1.20.
+ *
+ * Indicates the 802.11 mode an access point or device is currently in.
+ **/
+typedef enum { /*< underscore_name=nm_802_11_mode >*/
+               NM_802_11_MODE_UNKNOWN = 0,
+               NM_802_11_MODE_ADHOC   = 1,
+               NM_802_11_MODE_INFRA   = 2,
+               NM_802_11_MODE_AP      = 3,
+               NM_802_11_MODE_MESH    = 4,
+} NM80211Mode;
+
+/**
+ * NMBluetoothCapabilities:
+ * @NM_BT_CAPABILITY_NONE: device has no usable capabilities
+ * @NM_BT_CAPABILITY_DUN: device provides Dial-Up Networking capability
+ * @NM_BT_CAPABILITY_NAP: device provides Network Access Point capability
+ *
+ * #NMBluetoothCapabilities values indicate the usable capabilities of a
+ * Bluetooth device.
+ **/
+typedef enum { /*< flags >*/
+               NM_BT_CAPABILITY_NONE = 0x00000000,
+               NM_BT_CAPABILITY_DUN  = 0x00000001,
+               NM_BT_CAPABILITY_NAP  = 0x00000002,
+} NMBluetoothCapabilities;
+
+/**
+ * NMDeviceModemCapabilities:
+ * @NM_DEVICE_MODEM_CAPABILITY_NONE: modem has no usable capabilities
+ * @NM_DEVICE_MODEM_CAPABILITY_POTS: modem uses the analog wired telephone
+ * network and is not a wireless/cellular device
+ * @NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO: modem supports at least one of CDMA
+ * 1xRTT, EVDO revision 0, EVDO revision A, or EVDO revision B
+ * @NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS: modem supports at least one of GSM,
+ * GPRS, EDGE, UMTS, HSDPA, HSUPA, or HSPA+ packet switched data capability
+ * @NM_DEVICE_MODEM_CAPABILITY_LTE: modem has LTE data capability
+ *
+ * #NMDeviceModemCapabilities values indicate the generic radio access
+ * technology families a modem device supports.  For more information on the
+ * specific access technologies the device supports use the ModemManager D-Bus
+ * API.
+ **/
+typedef enum { /*< flags >*/
+               NM_DEVICE_MODEM_CAPABILITY_NONE      = 0x00000000,
+               NM_DEVICE_MODEM_CAPABILITY_POTS      = 0x00000001,
+               NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO = 0x00000002,
+               NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS  = 0x00000004,
+               NM_DEVICE_MODEM_CAPABILITY_LTE       = 0x00000008,
+} NMDeviceModemCapabilities;
+
+/**
+ * NMWimaxNspNetworkType:
+ * @NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN: unknown network type
+ * @NM_WIMAX_NSP_NETWORK_TYPE_HOME: home network
+ * @NM_WIMAX_NSP_NETWORK_TYPE_PARTNER: partner network
+ * @NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER: roaming partner network
+ *
+ * WiMAX network type.
+ */
+typedef enum {
+    NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN         = 0,
+    NM_WIMAX_NSP_NETWORK_TYPE_HOME            = 1,
+    NM_WIMAX_NSP_NETWORK_TYPE_PARTNER         = 2,
+    NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER = 3,
+} NMWimaxNspNetworkType;
+
+/**
+ * NMDeviceState:
+ * @NM_DEVICE_STATE_UNKNOWN: the device's state is unknown
+ * @NM_DEVICE_STATE_UNMANAGED: the device is recognized, but not managed by
+ *   NetworkManager
+ * @NM_DEVICE_STATE_UNAVAILABLE: the device is managed by NetworkManager, but
+ *   is not available for use.  Reasons may include the wireless switched off,
+ *   missing firmware, no ethernet carrier, missing supplicant or modem manager,
+ *   etc.
+ * @NM_DEVICE_STATE_DISCONNECTED: the device can be activated, but is currently
+ *   idle and not connected to a network.
+ * @NM_DEVICE_STATE_PREPARE: the device is preparing the connection to the
+ *   network.  This may include operations like changing the MAC address,
+ *   setting physical link properties, and anything else required to connect
+ *   to the requested network.
+ * @NM_DEVICE_STATE_CONFIG: the device is connecting to the requested network.
+ *   This may include operations like associating with the Wi-Fi AP, dialing
+ *   the modem, connecting to the remote Bluetooth device, etc.
+ * @NM_DEVICE_STATE_NEED_AUTH: the device requires more information to continue
+ *   connecting to the requested network.  This includes secrets like WiFi
+ *   passphrases, login passwords, PIN codes, etc.
+ * @NM_DEVICE_STATE_IP_CONFIG: the device is requesting IPv4 and/or IPv6
+ *   addresses and routing information from the network.
+ * @NM_DEVICE_STATE_IP_CHECK: the device is checking whether further action is
+ *   required for the requested network connection.  This may include checking
+ *   whether only local network access is available, whether a captive portal
+ *   is blocking access to the Internet, etc.
+ * @NM_DEVICE_STATE_SECONDARIES: the device is waiting for a secondary
+ *   connection (like a VPN) which must activated before the device can be
+ *   activated
+ * @NM_DEVICE_STATE_ACTIVATED: the device has a network connection, either local
+ *   or global.
+ * @NM_DEVICE_STATE_DEACTIVATING: a disconnection from the current network
+ *   connection was requested, and the device is cleaning up resources used for
+ *   that connection.  The network connection may still be valid.
+ * @NM_DEVICE_STATE_FAILED: the device failed to connect to the requested
+ *   network and is cleaning up the connection request
+ **/
+typedef enum {
+    NM_DEVICE_STATE_UNKNOWN      = 0,
+    NM_DEVICE_STATE_UNMANAGED    = 10,
+    NM_DEVICE_STATE_UNAVAILABLE  = 20,
+    NM_DEVICE_STATE_DISCONNECTED = 30,
+    NM_DEVICE_STATE_PREPARE      = 40,
+    NM_DEVICE_STATE_CONFIG       = 50,
+    NM_DEVICE_STATE_NEED_AUTH    = 60,
+    NM_DEVICE_STATE_IP_CONFIG    = 70,
+    NM_DEVICE_STATE_IP_CHECK     = 80,
+    NM_DEVICE_STATE_SECONDARIES  = 90,
+    NM_DEVICE_STATE_ACTIVATED    = 100,
+    NM_DEVICE_STATE_DEACTIVATING = 110,
+    NM_DEVICE_STATE_FAILED       = 120,
+} NMDeviceState;
+
+/**
+ * NMDeviceStateReason:
+ * @NM_DEVICE_STATE_REASON_NONE: No reason given
+ * @NM_DEVICE_STATE_REASON_UNKNOWN: Unknown error
+ * @NM_DEVICE_STATE_REASON_NOW_MANAGED: Device is now managed
+ * @NM_DEVICE_STATE_REASON_NOW_UNMANAGED: Device is now unmanaged
+ * @NM_DEVICE_STATE_REASON_CONFIG_FAILED: The device could not be readied for configuration
+ * @NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE: IP configuration could not be reserved (no available address, timeout, etc)
+ * @NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED: The IP config is no longer valid
+ * @NM_DEVICE_STATE_REASON_NO_SECRETS: Secrets were required, but not provided
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT: 802.1x supplicant disconnected
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED: 802.1x supplicant configuration failed
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED: 802.1x supplicant failed
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT: 802.1x supplicant took too long to authenticate
+ * @NM_DEVICE_STATE_REASON_PPP_START_FAILED: PPP service failed to start
+ * @NM_DEVICE_STATE_REASON_PPP_DISCONNECT: PPP service disconnected
+ * @NM_DEVICE_STATE_REASON_PPP_FAILED: PPP failed
+ * @NM_DEVICE_STATE_REASON_DHCP_START_FAILED: DHCP client failed to start
+ * @NM_DEVICE_STATE_REASON_DHCP_ERROR: DHCP client error
+ * @NM_DEVICE_STATE_REASON_DHCP_FAILED: DHCP client failed
+ * @NM_DEVICE_STATE_REASON_SHARED_START_FAILED: Shared connection service failed to start
+ * @NM_DEVICE_STATE_REASON_SHARED_FAILED: Shared connection service failed
+ * @NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED: AutoIP service failed to start
+ * @NM_DEVICE_STATE_REASON_AUTOIP_ERROR: AutoIP service error
+ * @NM_DEVICE_STATE_REASON_AUTOIP_FAILED: AutoIP service failed
+ * @NM_DEVICE_STATE_REASON_MODEM_BUSY: The line is busy
+ * @NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE: No dial tone
+ * @NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER: No carrier could be established
+ * @NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT: The dialing request timed out
+ * @NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED: The dialing attempt failed
+ * @NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED: Modem initialization failed
+ * @NM_DEVICE_STATE_REASON_GSM_APN_FAILED: Failed to select the specified APN
+ * @NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING: Not searching for networks
+ * @NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED: Network registration denied
+ * @NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT: Network registration timed out
+ * @NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED: Failed to register with the requested network
+ * @NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED: PIN check failed
+ * @NM_DEVICE_STATE_REASON_FIRMWARE_MISSING: Necessary firmware for the device may be missing
+ * @NM_DEVICE_STATE_REASON_REMOVED: The device was removed
+ * @NM_DEVICE_STATE_REASON_SLEEPING: NetworkManager went to sleep
+ * @NM_DEVICE_STATE_REASON_CONNECTION_REMOVED: The device's active connection disappeared
+ * @NM_DEVICE_STATE_REASON_USER_REQUESTED: Device disconnected by user or client
+ * @NM_DEVICE_STATE_REASON_CARRIER: Carrier/link changed
+ * @NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED: The device's existing connection was assumed
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE: The supplicant is now available
+ * @NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND: The modem could not be found
+ * @NM_DEVICE_STATE_REASON_BT_FAILED: The Bluetooth connection failed or timed out
+ * @NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED: GSM Modem's SIM Card not inserted
+ * @NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED: GSM Modem's SIM Pin required
+ * @NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED: GSM Modem's SIM Puk required
+ * @NM_DEVICE_STATE_REASON_GSM_SIM_WRONG: GSM Modem's SIM wrong
+ * @NM_DEVICE_STATE_REASON_INFINIBAND_MODE: InfiniBand device does not support connected mode
+ * @NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED: A dependency of the connection failed
+ * @NM_DEVICE_STATE_REASON_BR2684_FAILED: Problem with the RFC 2684 Ethernet over ADSL bridge
+ * @NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE: ModemManager not running
+ * @NM_DEVICE_STATE_REASON_SSID_NOT_FOUND: The Wi-Fi network could not be found
+ * @NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED: A secondary connection of the base connection failed
+ * @NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED: DCB or FCoE setup failed
+ * @NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED: teamd control failed
+ * @NM_DEVICE_STATE_REASON_MODEM_FAILED: Modem failed or no longer available
+ * @NM_DEVICE_STATE_REASON_MODEM_AVAILABLE: Modem now ready and available
+ * @NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT: SIM PIN was incorrect
+ * @NM_DEVICE_STATE_REASON_NEW_ACTIVATION: New connection activation was enqueued
+ * @NM_DEVICE_STATE_REASON_PARENT_CHANGED: the device's parent changed
+ * @NM_DEVICE_STATE_REASON_PARENT_MANAGED_CHANGED: the device parent's management changed
+ * @NM_DEVICE_STATE_REASON_OVSDB_FAILED: problem communicating with Open vSwitch database
+ * @NM_DEVICE_STATE_REASON_IP_ADDRESS_DUPLICATE: a duplicate IP address was detected
+ * @NM_DEVICE_STATE_REASON_IP_METHOD_UNSUPPORTED: The selected IP method is not supported
+ * @NM_DEVICE_STATE_REASON_SRIOV_CONFIGURATION_FAILED: configuration of SR-IOV parameters failed
+ * @NM_DEVICE_STATE_REASON_PEER_NOT_FOUND: The Wi-Fi P2P peer could not be found
+ *
+ * Device state change reason codes
+ */
+typedef enum {
+    NM_DEVICE_STATE_REASON_NONE                           = 0,
+    NM_DEVICE_STATE_REASON_UNKNOWN                        = 1,
+    NM_DEVICE_STATE_REASON_NOW_MANAGED                    = 2,
+    NM_DEVICE_STATE_REASON_NOW_UNMANAGED                  = 3,
+    NM_DEVICE_STATE_REASON_CONFIG_FAILED                  = 4,
+    NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE          = 5,
+    NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED              = 6,
+    NM_DEVICE_STATE_REASON_NO_SECRETS                     = 7,
+    NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT          = 8,
+    NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED       = 9,
+    NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED              = 10,
+    NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT             = 11,
+    NM_DEVICE_STATE_REASON_PPP_START_FAILED               = 12,
+    NM_DEVICE_STATE_REASON_PPP_DISCONNECT                 = 13,
+    NM_DEVICE_STATE_REASON_PPP_FAILED                     = 14,
+    NM_DEVICE_STATE_REASON_DHCP_START_FAILED              = 15,
+    NM_DEVICE_STATE_REASON_DHCP_ERROR                     = 16,
+    NM_DEVICE_STATE_REASON_DHCP_FAILED                    = 17,
+    NM_DEVICE_STATE_REASON_SHARED_START_FAILED            = 18,
+    NM_DEVICE_STATE_REASON_SHARED_FAILED                  = 19,
+    NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED            = 20,
+    NM_DEVICE_STATE_REASON_AUTOIP_ERROR                   = 21,
+    NM_DEVICE_STATE_REASON_AUTOIP_FAILED                  = 22,
+    NM_DEVICE_STATE_REASON_MODEM_BUSY                     = 23,
+    NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE             = 24,
+    NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER               = 25,
+    NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT             = 26,
+    NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED              = 27,
+    NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED              = 28,
+    NM_DEVICE_STATE_REASON_GSM_APN_FAILED                 = 29,
+    NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING = 30,
+    NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED        = 31,
+    NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT       = 32,
+    NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED        = 33,
+    NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED           = 34,
+    NM_DEVICE_STATE_REASON_FIRMWARE_MISSING               = 35,
+    NM_DEVICE_STATE_REASON_REMOVED                        = 36,
+    NM_DEVICE_STATE_REASON_SLEEPING                       = 37,
+    NM_DEVICE_STATE_REASON_CONNECTION_REMOVED             = 38,
+    NM_DEVICE_STATE_REASON_USER_REQUESTED                 = 39,
+    NM_DEVICE_STATE_REASON_CARRIER                        = 40,
+    NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED             = 41,
+    NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE           = 42,
+    NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND                = 43,
+    NM_DEVICE_STATE_REASON_BT_FAILED                      = 44,
+    NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED           = 45,
+    NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED           = 46,
+    NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED           = 47,
+    NM_DEVICE_STATE_REASON_GSM_SIM_WRONG                  = 48,
+    NM_DEVICE_STATE_REASON_INFINIBAND_MODE                = 49,
+    NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED              = 50,
+    NM_DEVICE_STATE_REASON_BR2684_FAILED                  = 51,
+    NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE      = 52,
+    NM_DEVICE_STATE_REASON_SSID_NOT_FOUND                 = 53,
+    NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED    = 54,
+    NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED                = 55,
+    NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED           = 56,
+    NM_DEVICE_STATE_REASON_MODEM_FAILED                   = 57,
+    NM_DEVICE_STATE_REASON_MODEM_AVAILABLE                = 58,
+    NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT              = 59,
+    NM_DEVICE_STATE_REASON_NEW_ACTIVATION                 = 60,
+    NM_DEVICE_STATE_REASON_PARENT_CHANGED                 = 61,
+    NM_DEVICE_STATE_REASON_PARENT_MANAGED_CHANGED         = 62,
+    NM_DEVICE_STATE_REASON_OVSDB_FAILED                   = 63,
+    NM_DEVICE_STATE_REASON_IP_ADDRESS_DUPLICATE           = 64,
+    NM_DEVICE_STATE_REASON_IP_METHOD_UNSUPPORTED          = 65,
+    NM_DEVICE_STATE_REASON_SRIOV_CONFIGURATION_FAILED     = 66,
+    NM_DEVICE_STATE_REASON_PEER_NOT_FOUND                 = 67,
+} NMDeviceStateReason;
+
+/**
+ * NMMetered:
+ * @NM_METERED_UNKNOWN:     The metered status is unknown
+ * @NM_METERED_YES:         Metered, the value was explicitly configured
+ * @NM_METERED_NO:          Not metered, the value was explicitly configured
+ * @NM_METERED_GUESS_YES:   Metered, the value was guessed
+ * @NM_METERED_GUESS_NO:    Not metered, the value was guessed
+ *
+ * The NMMetered enum has two different purposes: one is to configure
+ * "connection.metered" setting of a connection profile in #NMSettingConnection, and
+ * the other is to express the actual metered state of the #NMDevice at a given moment.
+ *
+ * For the connection profile only #NM_METERED_UNKNOWN, #NM_METERED_NO
+ * and #NM_METERED_YES are allowed.
+ *
+ * The device's metered state at runtime is determined by the profile
+ * which is currently active. If the profile explicitly specifies #NM_METERED_NO
+ * or #NM_METERED_YES, then the device's metered state is as such.
+ * If the connection profile leaves it undecided at #NM_METERED_UNKNOWN (the default),
+ * then NetworkManager tries to guess the metered state, for example based on the
+ * device type or on DHCP options (like Android devices exposing a "ANDROID_METERED"
+ * DHCP vendor option). This then leads to either #NM_METERED_GUESS_NO or #NM_METERED_GUESS_YES.
+ *
+ * Most applications probably should treat the runtime state #NM_METERED_GUESS_YES
+ * like #NM_METERED_YES, and all other states as not metered.
+ *
+ * Note that the per-device metered states are then combined to a global metered
+ * state. This is basically the metered state of the device with the best default
+ * route. However, that generalization of a global metered state may not be correct
+ * if the default routes for IPv4 and IPv6 are on different devices, or if policy
+ * routing is configured. In general, the global metered state tries to express whether
+ * the traffic is likely metered, but since that depends on the traffic itself,
+ * there is not one answer in all cases. Hence, an application may want to consider
+ * the per-device's metered states.
+ *
+ * Since: 1.2
+ **/
+NM_AVAILABLE_IN_1_2
+typedef enum {
+    NM_METERED_UNKNOWN   = 0,
+    NM_METERED_YES       = 1,
+    NM_METERED_NO        = 2,
+    NM_METERED_GUESS_YES = 3,
+    NM_METERED_GUESS_NO  = 4,
+} NMMetered;
+
+/**
+ * NMConnectionMultiConnect:
+ * @NM_CONNECTION_MULTI_CONNECT_DEFAULT: indicates that the per-connection
+ *   setting is unspecified. In this case, it will fallback to the default
+ *   value, which is %NM_CONNECTION_MULTI_CONNECT_SINGLE.
+ * @NM_CONNECTION_MULTI_CONNECT_SINGLE: the connection profile can only
+ *   be active once at each moment. Activating a profile that is already active,
+ *   will first deactivate it.
+ * @NM_CONNECTION_MULTI_CONNECT_MANUAL_MULTIPLE: the profile can
+ *   be manually activated multiple times on different devices. However,
+ *   regarding autoconnect, the profile will autoconnect only if it is
+ *   currently not connected otherwise.
+ * @NM_CONNECTION_MULTI_CONNECT_MULTIPLE: the profile can autoactivate
+ *   and be manually activated multiple times together.
+ *
+ * Since: 1.14
+ */
+typedef enum {
+    NM_CONNECTION_MULTI_CONNECT_DEFAULT         = 0,
+    NM_CONNECTION_MULTI_CONNECT_SINGLE          = 1,
+    NM_CONNECTION_MULTI_CONNECT_MANUAL_MULTIPLE = 2,
+    NM_CONNECTION_MULTI_CONNECT_MULTIPLE        = 3,
+} NMConnectionMultiConnect;
+
+/**
+ * NMActiveConnectionState:
+ * @NM_ACTIVE_CONNECTION_STATE_UNKNOWN: the state of the connection is unknown
+ * @NM_ACTIVE_CONNECTION_STATE_ACTIVATING: a network connection is being prepared
+ * @NM_ACTIVE_CONNECTION_STATE_ACTIVATED: there is a connection to the network
+ * @NM_ACTIVE_CONNECTION_STATE_DEACTIVATING: the network connection is being
+ *   torn down and cleaned up
+ * @NM_ACTIVE_CONNECTION_STATE_DEACTIVATED: the network connection is disconnected
+ *   and will be removed
+ *
+ * #NMActiveConnectionState values indicate the state of a connection to a
+ * specific network while it is starting, connected, or disconnecting from that
+ * network.
+ **/
+typedef enum {
+    NM_ACTIVE_CONNECTION_STATE_UNKNOWN      = 0,
+    NM_ACTIVE_CONNECTION_STATE_ACTIVATING   = 1,
+    NM_ACTIVE_CONNECTION_STATE_ACTIVATED    = 2,
+    NM_ACTIVE_CONNECTION_STATE_DEACTIVATING = 3,
+    NM_ACTIVE_CONNECTION_STATE_DEACTIVATED  = 4,
+} NMActiveConnectionState;
+
+/**
+ * NMActiveConnectionStateReason:
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_UNKNOWN: The reason for the active connection
+ *   state change is unknown.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_NONE: No reason was given for the active
+ *   connection state change.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_USER_DISCONNECTED: The active connection changed
+ *   state because the user disconnected it.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED: The active connection
+ *   changed state because the device it was using was disconnected.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_SERVICE_STOPPED: The service providing the
+ *   VPN connection was stopped.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_IP_CONFIG_INVALID: The IP config of the active
+ *   connection was invalid.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_CONNECT_TIMEOUT: The connection attempt to
+ *   the VPN service timed out.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT: A timeout occurred
+ *   while starting the service providing the VPN connection.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_SERVICE_START_FAILED: Starting the service
+ *   providing the VPN connection failed.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_NO_SECRETS: Necessary secrets for the
+ *   connection were not provided.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_LOGIN_FAILED: Authentication to the
+ *   server failed.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_CONNECTION_REMOVED: The connection was
+ *   deleted from settings.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_DEPENDENCY_FAILED: Master connection of this
+ *   connection failed to activate.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_REALIZE_FAILED: Could not create the
+ *   software device link.
+ * @NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_REMOVED: The device this connection
+ *   depended on disappeared.
+ *
+ * Active connection state reasons.
+ *
+ * Since: 1.8
+ */
+NM_AVAILABLE_IN_1_8
+typedef enum {
+    NM_ACTIVE_CONNECTION_STATE_REASON_UNKNOWN               = 0,
+    NM_ACTIVE_CONNECTION_STATE_REASON_NONE                  = 1,
+    NM_ACTIVE_CONNECTION_STATE_REASON_USER_DISCONNECTED     = 2,
+    NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED   = 3,
+    NM_ACTIVE_CONNECTION_STATE_REASON_SERVICE_STOPPED       = 4,
+    NM_ACTIVE_CONNECTION_STATE_REASON_IP_CONFIG_INVALID     = 5,
+    NM_ACTIVE_CONNECTION_STATE_REASON_CONNECT_TIMEOUT       = 6,
+    NM_ACTIVE_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT = 7,
+    NM_ACTIVE_CONNECTION_STATE_REASON_SERVICE_START_FAILED  = 8,
+    NM_ACTIVE_CONNECTION_STATE_REASON_NO_SECRETS            = 9,
+    NM_ACTIVE_CONNECTION_STATE_REASON_LOGIN_FAILED          = 10,
+    NM_ACTIVE_CONNECTION_STATE_REASON_CONNECTION_REMOVED    = 11,
+    NM_ACTIVE_CONNECTION_STATE_REASON_DEPENDENCY_FAILED     = 12,
+    NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_REALIZE_FAILED = 13,
+    NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_REMOVED        = 14,
+} NMActiveConnectionStateReason;
+
+/**
+ * NMSecretAgentGetSecretsFlags:
+ * @NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE: no special behavior; by default no
+ *   user interaction is allowed and requests for secrets are fulfilled from
+ *   persistent storage, or if no secrets are available an error is returned.
+ * @NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION: allows the request to
+ *   interact with the user, possibly prompting via UI for secrets if any are
+ *   required, or if none are found in persistent storage.
+ * @NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW: explicitly prompt for new
+ *   secrets from the user.  This flag signals that NetworkManager thinks any
+ *   existing secrets are invalid or wrong.  This flag implies that interaction
+ *   is allowed.
+ * @NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED: set if the request was
+ *   initiated by user-requested action via the D-Bus interface, as opposed to
+ *   automatically initiated by NetworkManager in response to (for example) scan
+ *   results or carrier changes.
+ * @NM_SECRET_AGENT_GET_SECRETS_FLAG_WPS_PBC_ACTIVE: indicates that WPS enrollment
+ *   is active with PBC method. The agent may suggest that the user pushes a button
+ *   on the router instead of supplying a PSK.
+ * @NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM: Internal flag, not part of
+ *   the D-Bus API.
+ * @NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS: Internal flag, not part of
+ *   the D-Bus API.
+ *
+ * #NMSecretAgentGetSecretsFlags values modify the behavior of a GetSecrets request.
+ */
+typedef enum { /*< flags >*/
+               NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE              = 0x0,
+               NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION = 0x1,
+               NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW       = 0x2,
+               NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED    = 0x4,
+               NM_SECRET_AGENT_GET_SECRETS_FLAG_WPS_PBC_ACTIVE    = 0x8,
+
+               /* Internal to NM; not part of the D-Bus API */
+               NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM = 0x80000000,
+               NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS   = 0x40000000,
+} NMSecretAgentGetSecretsFlags;
+
+/**
+ * NMSecretAgentCapabilities:
+ * @NM_SECRET_AGENT_CAPABILITY_NONE: the agent supports no special capabilities
+ * @NM_SECRET_AGENT_CAPABILITY_VPN_HINTS: the agent supports passing hints to
+ * VPN plugin authentication dialogs.
+ * @NM_SECRET_AGENT_CAPABILITY_LAST: bounds checking value; should not be used.
+ *
+ * #NMSecretAgentCapabilities indicate various capabilities of the agent.
+ */
+typedef enum /*< flags >*/ {
+    NM_SECRET_AGENT_CAPABILITY_NONE      = 0x0,
+    NM_SECRET_AGENT_CAPABILITY_VPN_HINTS = 0x1,
+
+    /* boundary value */
+    NM_SECRET_AGENT_CAPABILITY_LAST = NM_SECRET_AGENT_CAPABILITY_VPN_HINTS,
+} NMSecretAgentCapabilities;
+
+#ifndef NM_VERSION_H
+    #undef NM_AVAILABLE_IN_1_2
+    #undef NM_AVAILABLE_IN_1_8
+#endif
+
+#define NM_LLDP_ATTR_RAW                  "raw"
+#define NM_LLDP_ATTR_DESTINATION          "destination"
+#define NM_LLDP_ATTR_CHASSIS_ID_TYPE      "chassis-id-type"
+#define NM_LLDP_ATTR_CHASSIS_ID           "chassis-id"
+#define NM_LLDP_ATTR_PORT_ID_TYPE         "port-id-type"
+#define NM_LLDP_ATTR_PORT_ID              "port-id"
+#define NM_LLDP_ATTR_PORT_DESCRIPTION     "port-description"
+#define NM_LLDP_ATTR_SYSTEM_NAME          "system-name"
+#define NM_LLDP_ATTR_SYSTEM_DESCRIPTION   "system-description"
+#define NM_LLDP_ATTR_SYSTEM_CAPABILITIES  "system-capabilities"
+#define NM_LLDP_ATTR_MANAGEMENT_ADDRESSES "management-addresses"
+
+#define NM_LLDP_ATTR_IEEE_802_1_PVID   "ieee-802-1-pvid"
+#define NM_LLDP_ATTR_IEEE_802_1_VLANS  "ieee-802-1-vlans"
+#define NM_LLDP_ATTR_IEEE_802_1_PPVIDS "ieee-802-1-ppvids"
+
+#define NM_LLDP_ATTR_IEEE_802_3_MAC_PHY_CONF   "ieee-802-3-mac-phy-conf"
+#define NM_LLDP_ATTR_IEEE_802_3_POWER_VIA_MDI  "ieee-802-3-power-via-mdi"
+#define NM_LLDP_ATTR_IEEE_802_3_MAX_FRAME_SIZE "ieee-802-3-max-frame-size"
+
+#define NM_LLDP_ATTR_MUD_URL "mud-url"
+
+/* These are deprecated in favor of NM_LLDP_ATTR_IEEE_802_1_VLANS,
+ * which can report multiple VLANs */
+#define NM_LLDP_ATTR_IEEE_802_1_VID       "ieee-802-1-vid"
+#define NM_LLDP_ATTR_IEEE_802_1_VLAN_NAME "ieee-802-1-vlan-name"
+
+/* These are deprecated in favor of NM_LLDP_ATTR_IEEE_802_1_PPVIDS,
+ * which can report multiple PPVIDs */
+#define NM_LLDP_ATTR_IEEE_802_1_PPVID       "ieee-802-1-ppvid"
+#define NM_LLDP_ATTR_IEEE_802_1_PPVID_FLAGS "ieee-802-1-ppvid-flags"
+
+#define NM_LLDP_DEST_NEAREST_BRIDGE          "nearest-bridge"
+#define NM_LLDP_DEST_NEAREST_NON_TPMR_BRIDGE "nearest-non-tpmr-bridge"
+#define NM_LLDP_DEST_NEAREST_CUSTOMER_BRIDGE "nearest-customer-bridge"
+
+/**
+ * NMIPTunnelMode:
+ * @NM_IP_TUNNEL_MODE_UNKNOWN:   Unknown/unset tunnel mode
+ * @NM_IP_TUNNEL_MODE_IPIP:      IP in IP tunnel
+ * @NM_IP_TUNNEL_MODE_GRE:       GRE tunnel
+ * @NM_IP_TUNNEL_MODE_SIT:       SIT tunnel
+ * @NM_IP_TUNNEL_MODE_ISATAP:    ISATAP tunnel
+ * @NM_IP_TUNNEL_MODE_VTI:       VTI tunnel
+ * @NM_IP_TUNNEL_MODE_IP6IP6:    IPv6 in IPv6 tunnel
+ * @NM_IP_TUNNEL_MODE_IPIP6:     IPv4 in IPv6 tunnel
+ * @NM_IP_TUNNEL_MODE_IP6GRE:    IPv6 GRE tunnel
+ * @NM_IP_TUNNEL_MODE_VTI6:      IPv6 VTI tunnel
+ * @NM_IP_TUNNEL_MODE_GRETAP:    GRETAP tunnel
+ * @NM_IP_TUNNEL_MODE_IP6GRETAP: IPv6 GRETAP tunnel
+ *
+ * The tunneling mode.
+ *
+ * Since: 1.2
+ */
+typedef enum {
+    NM_IP_TUNNEL_MODE_UNKNOWN   = 0,
+    NM_IP_TUNNEL_MODE_IPIP      = 1,
+    NM_IP_TUNNEL_MODE_GRE       = 2,
+    NM_IP_TUNNEL_MODE_SIT       = 3,
+    NM_IP_TUNNEL_MODE_ISATAP    = 4,
+    NM_IP_TUNNEL_MODE_VTI       = 5,
+    NM_IP_TUNNEL_MODE_IP6IP6    = 6,
+    NM_IP_TUNNEL_MODE_IPIP6     = 7,
+    NM_IP_TUNNEL_MODE_IP6GRE    = 8,
+    NM_IP_TUNNEL_MODE_VTI6      = 9,
+    NM_IP_TUNNEL_MODE_GRETAP    = 10,
+    NM_IP_TUNNEL_MODE_IP6GRETAP = 11,
+} NMIPTunnelMode;
+
+/**
+ * NMCheckpointCreateFlags:
+ * @NM_CHECKPOINT_CREATE_FLAG_NONE: no flags
+ * @NM_CHECKPOINT_CREATE_FLAG_DESTROY_ALL: when creating
+ *   a new checkpoint, destroy all existing ones.
+ * @NM_CHECKPOINT_CREATE_FLAG_DELETE_NEW_CONNECTIONS: upon rollback,
+ *   delete any new connection added after the checkpoint. Since: 1.6.
+ * @NM_CHECKPOINT_CREATE_FLAG_DISCONNECT_NEW_DEVICES: upon rollback,
+ *   disconnect any new device appeared after the checkpoint. Since: 1.6.
+ * @NM_CHECKPOINT_CREATE_FLAG_ALLOW_OVERLAPPING: by default, creating
+ *   a checkpoint fails if there are already existing checkoints that
+ *   reference the same devices. With this flag, creation of such
+ *   checkpoints is allowed, however, if an older checkpoint
+ *   that references overlapping devices gets rolled back, it will
+ *   automatically destroy this checkpoint during rollback. This
+ *   allows to create several overlapping checkpoints in parallel,
+ *   and rollback to them at will. With the special case that
+ *   rolling back to an older checkpoint will invalidate all
+ *   overlapping younger checkpoints. This opts-in that the
+ *   checkpoint can be automatically destroyed by the rollback
+ *   of an older checkpoint. Since: 1.12.
+ *
+ * The flags for CheckpointCreate call
+ *
+ * Since: 1.4 (gi flags generated since 1.12)
+ */
+typedef enum { /*< flags >*/
+               NM_CHECKPOINT_CREATE_FLAG_NONE                   = 0,
+               NM_CHECKPOINT_CREATE_FLAG_DESTROY_ALL            = 0x01,
+               NM_CHECKPOINT_CREATE_FLAG_DELETE_NEW_CONNECTIONS = 0x02,
+               NM_CHECKPOINT_CREATE_FLAG_DISCONNECT_NEW_DEVICES = 0x04,
+               NM_CHECKPOINT_CREATE_FLAG_ALLOW_OVERLAPPING      = 0x08,
+} NMCheckpointCreateFlags;
+
+/**
+ * NMRollbackResult:
+ * @NM_ROLLBACK_RESULT_OK: the rollback succeeded.
+ * @NM_ROLLBACK_RESULT_ERR_NO_DEVICE: the device no longer exists.
+ * @NM_ROLLBACK_RESULT_ERR_DEVICE_UNMANAGED: the device is now unmanaged.
+ * @NM_ROLLBACK_RESULT_ERR_FAILED: other errors during rollback.
+ *
+ * The result of a checkpoint Rollback() operation for a specific device.
+ *
+ * Since: 1.4
+ **/
+typedef enum { /*< skip >*/
+               NM_ROLLBACK_RESULT_OK                   = 0,
+               NM_ROLLBACK_RESULT_ERR_NO_DEVICE        = 1,
+               NM_ROLLBACK_RESULT_ERR_DEVICE_UNMANAGED = 2,
+               NM_ROLLBACK_RESULT_ERR_FAILED           = 3,
+} NMRollbackResult;
+
+/**
+ * NMSettingsConnectionFlags:
+ * @NM_SETTINGS_CONNECTION_FLAG_NONE: an alias for numeric zero, no flags set.
+ * @NM_SETTINGS_CONNECTION_FLAG_UNSAVED: the connection is not saved to disk.
+ *   That either means, that the connection is in-memory only and currently
+ *   is not backed by a file. Or, that the connection is backed by a file,
+ *   but has modifications in-memory that were not persisted to disk.
+ * @NM_SETTINGS_CONNECTION_FLAG_NM_GENERATED: A connection is "nm-generated" if
+ *  it was generated by NetworkManger. If the connection gets modified or saved
+ *  by the user, the flag gets cleared. A nm-generated is also unsaved
+ *  and has no backing file as it is in-memory only.
+ * @NM_SETTINGS_CONNECTION_FLAG_VOLATILE: The connection will be deleted
+ *  when it disconnects. That is for in-memory connections (unsaved), which are
+ *  currently active but deleted on disconnect. Volatile connections are
+ *  always unsaved, but they are also no backing file on disk and are entirely
+ *  in-memory only.
+ * @NM_SETTINGS_CONNECTION_FLAG_EXTERNAL: the profile was generated to represent
+ *  an external configuration of a networking device. Since: 1.26.
+ *
+ * Flags describing the current activation state.
+ *
+ * Since: 1.12
+ **/
+typedef enum { /*< flags >*/
+               NM_SETTINGS_CONNECTION_FLAG_NONE         = 0,
+               NM_SETTINGS_CONNECTION_FLAG_UNSAVED      = 0x01,
+               NM_SETTINGS_CONNECTION_FLAG_NM_GENERATED = 0x02,
+               NM_SETTINGS_CONNECTION_FLAG_VOLATILE     = 0x04,
+               NM_SETTINGS_CONNECTION_FLAG_EXTERNAL     = 0x08,
+} NMSettingsConnectionFlags;
+
+/**
+ * NMActivationStateFlags:
+ * @NM_ACTIVATION_STATE_FLAG_NONE: an alias for numeric zero, no flags set.
+ * @NM_ACTIVATION_STATE_FLAG_IS_MASTER: the device is a master.
+ * @NM_ACTIVATION_STATE_FLAG_IS_SLAVE: the device is a slave.
+ * @NM_ACTIVATION_STATE_FLAG_LAYER2_READY: layer2 is activated and ready.
+ * @NM_ACTIVATION_STATE_FLAG_IP4_READY: IPv4 setting is completed.
+ * @NM_ACTIVATION_STATE_FLAG_IP6_READY: IPv6 setting is completed.
+ * @NM_ACTIVATION_STATE_FLAG_MASTER_HAS_SLAVES: The master has any slave devices attached.
+ *   This only makes sense if the device is a master.
+ * @NM_ACTIVATION_STATE_FLAG_LIFETIME_BOUND_TO_PROFILE_VISIBILITY: the lifetime
+ *   of the activation is bound to the visibility of the connection profile,
+ *   which in turn depends on "connection.permissions" and whether a session
+ *   for the user exists. Since: 1.16.
+ * @NM_ACTIVATION_STATE_FLAG_EXTERNAL: the active connection was generated to
+ *  represent an external configuration of a networking device. Since: 1.26.
+ *
+ * Flags describing the current activation state.
+ *
+ * Since: 1.10
+ **/
+typedef enum { /*< flags >*/
+               NM_ACTIVATION_STATE_FLAG_NONE = 0,
+
+               NM_ACTIVATION_STATE_FLAG_IS_MASTER                            = 0x1,
+               NM_ACTIVATION_STATE_FLAG_IS_SLAVE                             = 0x2,
+               NM_ACTIVATION_STATE_FLAG_LAYER2_READY                         = 0x4,
+               NM_ACTIVATION_STATE_FLAG_IP4_READY                            = 0x8,
+               NM_ACTIVATION_STATE_FLAG_IP6_READY                            = 0x10,
+               NM_ACTIVATION_STATE_FLAG_MASTER_HAS_SLAVES                    = 0x20,
+               NM_ACTIVATION_STATE_FLAG_LIFETIME_BOUND_TO_PROFILE_VISIBILITY = 0x40,
+               NM_ACTIVATION_STATE_FLAG_EXTERNAL                             = 0x80,
+} NMActivationStateFlags;
+
+/**
+ * NMSettingsAddConnection2Flags:
+ * @NM_SETTINGS_ADD_CONNECTION2_FLAG_NONE: an alias for numeric zero, no flags set.
+ * @NM_SETTINGS_ADD_CONNECTION2_FLAG_TO_DISK: to persist the connection to disk.
+ * @NM_SETTINGS_ADD_CONNECTION2_FLAG_IN_MEMORY: to make the connection in-memory only.
+ * @NM_SETTINGS_ADD_CONNECTION2_FLAG_BLOCK_AUTOCONNECT: usually, when the connection
+ *   has autoconnect enabled and gets added, it becomes eligible to autoconnect
+ *   right away. Setting this flag, disables autoconnect until the connection
+ *   is manually activated.
+ *
+ * Numeric flags for the "flags" argument of AddConnection2() D-Bus API.
+ *
+ * Since: 1.20
+ */
+typedef enum { /*< flags >*/
+               NM_SETTINGS_ADD_CONNECTION2_FLAG_NONE              = 0,
+               NM_SETTINGS_ADD_CONNECTION2_FLAG_TO_DISK           = 0x1,
+               NM_SETTINGS_ADD_CONNECTION2_FLAG_IN_MEMORY         = 0x2,
+               NM_SETTINGS_ADD_CONNECTION2_FLAG_BLOCK_AUTOCONNECT = 0x20,
+} NMSettingsAddConnection2Flags;
+
+/**
+ * NMSettingsUpdate2Flags:
+ * @NM_SETTINGS_UPDATE2_FLAG_NONE: an alias for numeric zero, no flags set.
+ * @NM_SETTINGS_UPDATE2_FLAG_TO_DISK: to persist the connection to disk.
+ * @NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY: makes the profile in-memory.
+ *   Note that such profiles are stored in keyfile format under /run.
+ *   If the file is already in-memory, the file in /run is updated in-place.
+ *   Otherwise, the previous storage for the profile is left unchanged
+ *   on disk, and the in-memory copy shadows it.
+ *   Note that the original filename of the previous persistent storage (if any)
+ *   is remembered. That means, when later persisting the profile again to disk,
+ *   the file on disk will be overwritten again.
+ *   Likewise, when finally deleting the profile, both the storage from /run
+ *   and persistent storage are deleted (or if the persistent storage does not
+ *   allow deletion, and nmmeta file is written to mark the UUID as deleted).
+ * @NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_DETACHED: this is almost the same
+ *   as %NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY, with one difference: when later deleting
+ *   the profile, the original profile will not be deleted. Instead a nmmeta
+ *   file is written to /run to indicate that the profile is gone.
+ *   Note that if such a nmmeta tombstone file exists and hides a file in persistent
+ *   storage, then when re-adding the profile with the same UUID, then the original
+ *   storage is taken over again.
+ * @NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_ONLY: this is like %NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY,
+ *   but if the connection has a corresponding file on persistent storage, the file
+ *   will be deleted right away. If the profile is later again persisted to disk,
+ *   a new, unused filename will be chosen.
+ * @NM_SETTINGS_UPDATE2_FLAG_VOLATILE: This can be specified with either
+ *   %NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY, %NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_DETACHED
+ *   or %NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_ONLY.
+ *   After making the connection in-memory only, the connection is marked
+ *   as volatile. That means, if the connection is currently not active
+ *   it will be deleted right away. Otherwise, it is marked to for deletion
+ *   once the connection deactivates. A volatile connection cannot autoactivate
+ *   again (because it's about to be deleted), but a manual activation will
+ *   clear the volatile flag.
+ * @NM_SETTINGS_UPDATE2_FLAG_BLOCK_AUTOCONNECT: usually, when the connection
+ *   has autoconnect enabled and is modified, it becomes eligible to autoconnect
+ *   right away. Setting this flag, disables autoconnect until the connection
+ *   is manually activated.
+ * @NM_SETTINGS_UPDATE2_FLAG_NO_REAPPLY: when a profile gets modified that is
+ *   currently active, then these changes don't take effect for the active
+ *   device unless the profile gets reactivated or the configuration reapplied.
+ *   There are two exceptions: by default "connection.zone" and "connection.metered"
+ *   properties take effect immediately. Specify this flag to prevent these
+ *   properties to take effect, so that the change is restricted to modify
+ *   the profile. Since: 1.20.
+ *
+ * Since: 1.12
+ */
+typedef enum { /*< flags >*/
+               NM_SETTINGS_UPDATE2_FLAG_NONE               = 0,
+               NM_SETTINGS_UPDATE2_FLAG_TO_DISK            = 0x1,
+               NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY          = 0x2,
+               NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_DETACHED = 0x4,
+               NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_ONLY     = 0x8,
+               NM_SETTINGS_UPDATE2_FLAG_VOLATILE           = 0x10,
+               NM_SETTINGS_UPDATE2_FLAG_BLOCK_AUTOCONNECT  = 0x20,
+               NM_SETTINGS_UPDATE2_FLAG_NO_REAPPLY         = 0x40,
+} NMSettingsUpdate2Flags;
+
+/**
+ * NMTernary:
+ * @NM_TERNARY_DEFAULT: use the globally-configured default value.
+ * @NM_TERNARY_FALSE: the option is disabled.
+ * @NM_TERNARY_TRUE: the option is enabled.
+ *
+ * An boolean value that can be overridden by a default.
+ *
+ * Since: 1.14
+ **/
+typedef enum {
+    NM_TERNARY_DEFAULT = -1,
+    NM_TERNARY_FALSE   = 0,
+    NM_TERNARY_TRUE    = 1,
+} NMTernary;
+
+/**
+ * NMManagerReloadFlags:
+ * @NM_MANAGER_RELOAD_FLAG_NONE: an alias for numeric zero, no flags set. This
+ *   reloads everything that is supported and is identical to a SIGHUP.
+ * @NM_MANAGER_RELOAD_FLAG_CONF: reload the NetworkManager.conf configuration
+ *   from disk. Note that this does not include connections, which can be
+ *   reloaded via Setting's ReloadConnections().
+ * @NM_MANAGER_RELOAD_FLAG_DNS_RC: update DNS configuration, which usually
+ *   involves writing /etc/resolv.conf anew.
+ * @NM_MANAGER_RELOAD_FLAG_DNS_FULL: means to restart the DNS plugin. This
+ *   is for example useful when using dnsmasq plugin, which uses additional
+ *   configuration in /etc/NetworkManager/dnsmasq.d. If you edit those files,
+ *   you can restart the DNS plugin. This action shortly interrupts name
+ *   resolution.
+ * @NM_MANAGER_RELOAD_FLAG_ALL: all flags.
+ *
+ * Flags for the manager Reload() call.
+ *
+ * Since: 1.22
+ */
+typedef enum {                                      /*< flags >*/
+               NM_MANAGER_RELOAD_FLAG_NONE     = 0, /*< skip >*/
+               NM_MANAGER_RELOAD_FLAG_CONF     = 0x1,
+               NM_MANAGER_RELOAD_FLAG_DNS_RC   = 0x2,
+               NM_MANAGER_RELOAD_FLAG_DNS_FULL = 0x4,
+               NM_MANAGER_RELOAD_FLAG_ALL      = 0x7, /*< skip >*/
+} NMManagerReloadFlags;
+
+/**
+ * NMDeviceInterfaceFlags:
+ * @NM_DEVICE_INTERFACE_FLAG_NONE: an alias for numeric zero, no flags set.
+ * @NM_DEVICE_INTERFACE_FLAG_UP: the interface is enabled from the
+ *   administrative point of view. Corresponds to kernel IFF_UP.
+ * @NM_DEVICE_INTERFACE_FLAG_LOWER_UP: the physical link is up. Corresponds
+ *   to kernel IFF_LOWER_UP.
+ * @NM_DEVICE_INTERFACE_FLAG_PROMISC: receive all packets. Corresponds to
+ *   kernel IFF_PROMISC. Since: 1.32.
+ * @NM_DEVICE_INTERFACE_FLAG_CARRIER: the interface has carrier. In most
+ *   cases this is equal to the value of @NM_DEVICE_INTERFACE_FLAG_LOWER_UP.
+ *   However some devices have a non-standard carrier detection mechanism.
+ * @NM_DEVICE_INTERFACE_FLAG_LLDP_CLIENT_ENABLED: the flag to indicate device
+ *   LLDP status. Since: 1.32.
+ *
+ * Flags for a network interface.
+ *
+ * Since: 1.22
+ */
+typedef enum { /*< flags >*/
+               /* kernel flags */
+               NM_DEVICE_INTERFACE_FLAG_NONE     = 0, /*< skip >*/
+               NM_DEVICE_INTERFACE_FLAG_UP       = 0x1,
+               NM_DEVICE_INTERFACE_FLAG_LOWER_UP = 0x2,
+               NM_DEVICE_INTERFACE_FLAG_PROMISC  = 0x4,
+               /* NM-specific flags */
+               NM_DEVICE_INTERFACE_FLAG_CARRIER             = 0x10000,
+               NM_DEVICE_INTERFACE_FLAG_LLDP_CLIENT_ENABLED = 0x20000,
+} NMDeviceInterfaceFlags;
+
+/**
+ * NMClientPermission:
+ * @NM_CLIENT_PERMISSION_NONE: unknown or no permission
+ * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK: controls whether networking
+ *  can be globally enabled or disabled
+ * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI: controls whether Wi-Fi can be
+ *  globally enabled or disabled
+ * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN: controls whether WWAN (3G) can be
+ *  globally enabled or disabled
+ * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX: controls whether WiMAX can be
+ *  globally enabled or disabled
+ * @NM_CLIENT_PERMISSION_SLEEP_WAKE: controls whether the client can ask
+ *  NetworkManager to sleep and wake
+ * @NM_CLIENT_PERMISSION_NETWORK_CONTROL: controls whether networking connections
+ *  can be started, stopped, and changed
+ * @NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED: controls whether a password
+ *  protected Wi-Fi hotspot can be created
+ * @NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN: controls whether an open Wi-Fi hotspot
+ *  can be created
+ * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM: controls whether connections
+ *  that are available to all users can be modified
+ * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN: controls whether connections
+ *  owned by the current user can be modified
+ * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME: controls whether the
+ *  persistent hostname can be changed
+ * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS: modify persistent global
+ *  DNS configuration
+ * @NM_CLIENT_PERMISSION_RELOAD: controls access to Reload.
+ * @NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK: permission to create checkpoints.
+ * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS: controls whether device
+ *  statistics can be globally enabled or disabled
+ * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK: controls whether
+ *  connectivity check can be enabled or disabled
+ * @NM_CLIENT_PERMISSION_WIFI_SCAN: controls whether wifi scans can be performed
+ * @NM_CLIENT_PERMISSION_LAST: a reserved boundary value
+ *
+ * #NMClientPermission values indicate various permissions that NetworkManager
+ * clients can obtain to perform certain tasks on behalf of the current user.
+ **/
+typedef enum {
+    NM_CLIENT_PERMISSION_NONE                              = 0,
+    NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK            = 1,
+    NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI               = 2,
+    NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN               = 3,
+    NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX              = 4,
+    NM_CLIENT_PERMISSION_SLEEP_WAKE                        = 5,
+    NM_CLIENT_PERMISSION_NETWORK_CONTROL                   = 6,
+    NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED              = 7,
+    NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN                   = 8,
+    NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM            = 9,
+    NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN               = 10,
+    NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME          = 11,
+    NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS        = 12,
+    NM_CLIENT_PERMISSION_RELOAD                            = 13,
+    NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK               = 14,
+    NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS         = 15,
+    NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK = 16,
+    NM_CLIENT_PERMISSION_WIFI_SCAN                         = 17,
+
+    NM_CLIENT_PERMISSION_LAST = 17,
+} NMClientPermission;
+
+/**
+ * NMClientPermissionResult:
+ * @NM_CLIENT_PERMISSION_RESULT_UNKNOWN: unknown or no authorization
+ * @NM_CLIENT_PERMISSION_RESULT_YES: the permission is available
+ * @NM_CLIENT_PERMISSION_RESULT_AUTH: authorization is necessary before the
+ *  permission is available
+ * @NM_CLIENT_PERMISSION_RESULT_NO: permission to perform the operation is
+ *  denied by system policy
+ *
+ * #NMClientPermissionResult values indicate what authorizations and permissions
+ * the user requires to obtain a given #NMClientPermission
+ **/
+typedef enum {
+    NM_CLIENT_PERMISSION_RESULT_UNKNOWN = 0,
+    NM_CLIENT_PERMISSION_RESULT_YES,
+    NM_CLIENT_PERMISSION_RESULT_AUTH,
+    NM_CLIENT_PERMISSION_RESULT_NO
+} NMClientPermissionResult;
+
+#endif /* __NM_DBUS_INTERFACE_H__ */
diff --git a/src/libnm-core-public/nm-dbus-types.xml b/src/libnm-core-public/nm-dbus-types.xml
new file mode 100644
index 00000000..c4b59b45
--- /dev/null
+++ b/src/libnm-core-public/nm-dbus-types.xml
@@ -0,0 +1,2181 @@
+<?xml version='1.0'?>
+<?xml-stylesheet type="text/xsl" href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<refentry id="nm-dbus-types">
+  <refmeta>
+    <refentrytitle role="top_of_page" id="nm-dbus-types.top_of_page">NetworkManager D-Bus API Types</refentrytitle>
+    <manvolnum>3</manvolnum>
+    <refmiscinfo>NetworkManager D-Bus API Types</refmiscinfo>
+  </refmeta>
+  <refnamediv>
+    <refname>NetworkManager D-Bus API Types</refname>
+    <refpurpose></refpurpose>
+  </refnamediv>
+
+  <refsect2 id="NMCapability" role="enum">
+    <title>enum NMCapability</title>
+    <indexterm zone="NMCapability">
+      <primary>NMCapability</primary>
+    </indexterm>
+    <para><para><link linkend="NMCapability">NMCapability</link> names the numbers in the Capabilities property. Capabilities are positive numbers. They are part of stable API and a certain capability number is guaranteed not to change.</para><para>The range 0x7000 - 0x7FFF of capabilities is guaranteed not to be used by upstream NetworkManager. It could thus be used for downstream extensions.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CAPABILITY_TEAM</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Teams can be managed. This means the team device plugin is loaded.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CAPABILITY_OVS</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>OpenVSwitch can be managed. This means the OVS device plugin is loaded. Since: 1.24.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMState" role="enum">
+    <title>enum NMState</title>
+    <indexterm zone="NMState">
+      <primary>NMState</primary>
+    </indexterm>
+    <para><para><link linkend="NMState">NMState</link> values indicate the current overall networking state.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_STATE_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Networking state is unknown. This indicates a daemon error that makes it unable to reasonably assess the state. In such event the applications are expected to assume Internet connectivity might be present and not disable controls that require network access. The graphical shells may hide the network accessibility indicator altogether since no meaningful status indication can be provided.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_STATE_ASLEEP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>10</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Networking is not enabled, the system is being suspended or resumed from suspend.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_STATE_DISCONNECTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>20</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>There is no active network connection. The graphical shell should indicate  no network connectivity and the applications should not attempt to access the network.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_STATE_DISCONNECTING</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>30</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Network connections are being cleaned up. The applications should tear down their network sessions.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_STATE_CONNECTING</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>40</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>A network connection is being started The graphical shell should indicate the network is being connected while the applications should still make no attempts to connect the network.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_STATE_CONNECTED_LOCAL</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>50</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>There is only local IPv4 and/or IPv6 connectivity, but no default route to access the Internet. The graphical shell should indicate no network connectivity.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_STATE_CONNECTED_SITE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>60</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>There is only site-wide IPv4 and/or IPv6 connectivity. This means a default route is available, but the Internet connectivity check (see "Connectivity" property) did not succeed. The graphical shell should indicate limited network connectivity.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_STATE_CONNECTED_GLOBAL</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>70</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>There is global IPv4 and/or IPv6 Internet connectivity This means the Internet connectivity check succeeded, the graphical shell should indicate full network connectivity.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMConnectivityState" role="enum">
+    <title>enum NMConnectivityState</title>
+    <indexterm zone="NMConnectivityState">
+      <primary>NMConnectivityState</primary>
+    </indexterm>
+    <para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CONNECTIVITY_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Network connectivity is unknown. This means the connectivity checks are disabled (e.g. on server installations) or has not run yet. The graphical shell should assume the Internet connection might be available and not present a captive portal window.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CONNECTIVITY_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The host is not connected to any network. There's no active connection that contains a default route to the internet and thus it makes no sense to even attempt a connectivity check. The graphical shell should use this state to indicate the network connection is unavailable.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CONNECTIVITY_PORTAL</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The Internet connection is hijacked by a captive portal gateway. The graphical shell may open a sandboxed web browser window (because the captive portals typically attempt a man-in-the-middle attacks against the https connections) for the purpose of authenticating to a gateway and retrigger the connectivity check with CheckConnectivity() when the browser window is dismissed.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CONNECTIVITY_LIMITED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The host is connected to a network, does not appear to be able to reach the full Internet, but a captive portal has not been detected.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CONNECTIVITY_FULL</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The host is connected to a network, and appears to be able to reach the full Internet.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMDeviceType" role="enum">
+    <title>enum NMDeviceType</title>
+    <indexterm zone="NMDeviceType">
+      <primary>NMDeviceType</primary>
+    </indexterm>
+    <para><para><link linkend="NMDeviceType">NMDeviceType</link> values indicate the type of hardware represented by a device object.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>unknown device</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_GENERIC</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>14</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>generic support for unrecognized device types</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_ETHERNET</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a wired ethernet device</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_WIFI</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>an 802.11 Wi-Fi device</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_UNUSED1</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>not used</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_UNUSED2</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>not used</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_BT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>5</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a Bluetooth device supporting PAN or DUN access protocols</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_OLPC_MESH</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>6</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>an OLPC XO mesh networking device</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_WIMAX</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>7</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>an 802.16e Mobile WiMAX broadband device</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_MODEM</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>8</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a modem supporting analog telephone, CDMA/EVDO, GSM/UMTS, or LTE network access protocols</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_INFINIBAND</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>9</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>an IP-over-InfiniBand device</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_BOND</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>10</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a bond master interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_VLAN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>11</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>an 802.1Q VLAN interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_ADSL</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>12</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>ADSL modem</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_BRIDGE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>13</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a bridge master interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_TEAM</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>15</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a team master interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_TUN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>16</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a TUN or TAP interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_IP_TUNNEL</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>17</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a IP tunnel interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_MACVLAN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>18</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a MACVLAN interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_VXLAN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>19</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a VXLAN interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_VETH</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>20</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a VETH interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_MACSEC</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>21</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a MACsec interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_DUMMY</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>22</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a dummy interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_PPP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>23</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a PPP interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_OVS_INTERFACE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>24</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a Open vSwitch interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_OVS_PORT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>25</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a Open vSwitch port</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_OVS_BRIDGE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>26</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a Open vSwitch bridge</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_WPAN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>27</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a IEEE 802.15.4 (WPAN) MAC Layer Device</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_6LOWPAN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>28</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>6LoWPAN interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_WIREGUARD</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>29</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a WireGuard interface</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_WIFI_P2P</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>30</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>an 802.11 Wi-Fi P2P device. Since: 1.16.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_TYPE_VRF</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>31</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>A VRF (Virtual Routing and Forwarding) interface. Since: 1.24.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMDeviceCapabilities" role="enum">
+    <title>enum NMDeviceCapabilities</title>
+    <indexterm zone="NMDeviceCapabilities">
+      <primary>NMDeviceCapabilities</primary>
+    </indexterm>
+    <para><para>General device capability flags.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_CAP_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device has no special capabilities</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_CAP_NM_SUPPORTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000001</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>NetworkManager supports this device</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_CAP_CARRIER_DETECT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000002</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>this device can indicate carrier status</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_CAP_IS_SOFTWARE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000004</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>this device is a software device</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_CAP_SRIOV</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000008</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>this device supports single-root I/O virtualization</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMDeviceWifiCapabilities" role="enum">
+    <title>enum NMDeviceWifiCapabilities</title>
+    <indexterm zone="NMDeviceWifiCapabilities">
+      <primary>NMDeviceWifiCapabilities</primary>
+    </indexterm>
+    <para><para>802.11 specific device encryption and authentication capabilities.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device has no encryption/authentication capabilities</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_CIPHER_WEP40</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000001</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device supports 40/64-bit WEP encryption</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_CIPHER_WEP104</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000002</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device supports 104/128-bit WEP encryption</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_CIPHER_TKIP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000004</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device supports TKIP encryption</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_CIPHER_CCMP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000008</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device supports AES/CCMP encryption</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_WPA</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000010</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device supports WPA1 authentication</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_RSN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000020</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device supports WPA2/RSN authentication</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_AP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000040</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device supports Access Point mode</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_ADHOC</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000080</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device supports Ad-Hoc mode</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_FREQ_VALID</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000100</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device reports frequency capabilities</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_FREQ_2GHZ</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000200</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device supports 2.4GHz frequencies</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_FREQ_5GHZ</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000400</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device supports 5GHz frequencies</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_MESH</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00001000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device supports acting as a mesh point. Since: 1.20.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIFI_DEVICE_CAP_IBSS_RSN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00002000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device supports WPA2/RSN in an IBSS network. Since: 1.22.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NM80211ApFlags" role="enum">
+    <title>enum NM80211ApFlags</title>
+    <indexterm zone="NM80211ApFlags">
+      <primary>NM80211ApFlags</primary>
+    </indexterm>
+    <para><para>802.11 access point flags.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_FLAGS_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>access point has no special capabilities</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_FLAGS_PRIVACY</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000001</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>access point requires authentication and encryption (usually means WEP)</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_FLAGS_WPS</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000002</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>access point supports some WPS method</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_FLAGS_WPS_PBC</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000004</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>access point supports push-button WPS</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_FLAGS_WPS_PIN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000008</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>access point supports PIN-based WPS</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NM80211ApSecurityFlags" role="enum">
+    <title>enum NM80211ApSecurityFlags</title>
+    <indexterm zone="NM80211ApSecurityFlags">
+      <primary>NM80211ApSecurityFlags</primary>
+    </indexterm>
+    <para><para>802.11 access point security and authentication flags.  These flags describe the current security requirements of an access point as determined from the access point's beacon.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the access point has no special security requirements</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_PAIR_WEP40</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000001</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>40/64-bit WEP is supported for pairwise/unicast encryption</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_PAIR_WEP104</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000002</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>104/128-bit WEP is supported for pairwise/unicast encryption</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_PAIR_TKIP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000004</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>TKIP is supported for pairwise/unicast encryption</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_PAIR_CCMP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000008</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>AES/CCMP is supported for pairwise/unicast encryption</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_GROUP_WEP40</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000010</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>40/64-bit WEP is supported for group/broadcast encryption</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_GROUP_WEP104</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000020</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>104/128-bit WEP is supported for group/broadcast encryption</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_GROUP_TKIP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000040</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>TKIP is supported for group/broadcast encryption</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_GROUP_CCMP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000080</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>AES/CCMP is supported for group/broadcast encryption</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_KEY_MGMT_PSK</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000100</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>WPA/RSN Pre-Shared Key encryption is supported</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_KEY_MGMT_802_1X</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000200</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>802.1x authentication and key management is supported</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_KEY_MGMT_SAE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000400</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>WPA/RSN Simultaneous Authentication of Equals is supported</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_KEY_MGMT_OWE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000800</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>WPA/RSN Opportunistic Wireless Encryption is supported</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_KEY_MGMT_OWE_TM</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00001000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>WPA/RSN Opportunistic Wireless Encryption transition mode is supported. Since: 1.26.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_AP_SEC_KEY_MGMT_EAP_SUITE_B_192</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00002000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>WPA3 Enterprise Suite-B 192 bit mode is supported. Since: 1.30.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NM80211Mode" role="enum">
+    <title>enum NM80211Mode</title>
+    <indexterm zone="NM80211Mode">
+      <primary>NM80211Mode</primary>
+    </indexterm>
+    <para><para>Indicates the 802.11 mode an access point or device is currently in.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_MODE_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device or access point mode is unknown</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_MODE_ADHOC</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>for both devices and access point objects, indicates the object is part of an Ad-Hoc 802.11 network without a central coordinating access point.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_MODE_INFRA</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device or access point is in infrastructure mode. For devices, this indicates the device is an 802.11 client/station.  For access point objects, this indicates the object is an access point that provides connectivity to clients.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_MODE_AP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device is an access point/hotspot.  Not valid for access point objects; used only for hotspot mode on the local machine.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_802_11_MODE_MESH</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device is a 802.11s mesh point. Since: 1.20.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMBluetoothCapabilities" role="enum">
+    <title>enum NMBluetoothCapabilities</title>
+    <indexterm zone="NMBluetoothCapabilities">
+      <primary>NMBluetoothCapabilities</primary>
+    </indexterm>
+    <para><para><link linkend="NMBluetoothCapabilities">NMBluetoothCapabilities</link> values indicate the usable capabilities of a Bluetooth device.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_BT_CAPABILITY_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device has no usable capabilities</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_BT_CAPABILITY_DUN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000001</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device provides Dial-Up Networking capability</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_BT_CAPABILITY_NAP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000002</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>device provides Network Access Point capability</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMDeviceModemCapabilities" role="enum">
+    <title>enum NMDeviceModemCapabilities</title>
+    <indexterm zone="NMDeviceModemCapabilities">
+      <primary>NMDeviceModemCapabilities</primary>
+    </indexterm>
+    <para><para><link linkend="NMDeviceModemCapabilities">NMDeviceModemCapabilities</link> values indicate the generic radio access technology families a modem device supports.  For more information on the specific access technologies the device supports use the ModemManager D-Bus API.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_MODEM_CAPABILITY_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>modem has no usable capabilities</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_MODEM_CAPABILITY_POTS</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000001</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>modem uses the analog wired telephone network and is not a wireless/cellular device</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000002</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>modem supports at least one of CDMA 1xRTT, EVDO revision 0, EVDO revision A, or EVDO revision B</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000004</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>modem supports at least one of GSM, GPRS, EDGE, UMTS, HSDPA, HSUPA, or HSPA+ packet switched data capability</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_MODEM_CAPABILITY_LTE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x00000008</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>modem has LTE data capability</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMWimaxNspNetworkType" role="enum">
+    <title>enum NMWimaxNspNetworkType</title>
+    <indexterm zone="NMWimaxNspNetworkType">
+      <primary>NMWimaxNspNetworkType</primary>
+    </indexterm>
+    <para><para>WiMAX network type.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>unknown network type</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIMAX_NSP_NETWORK_TYPE_HOME</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>home network</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIMAX_NSP_NETWORK_TYPE_PARTNER</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>partner network</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>roaming partner network</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMDeviceState" role="enum">
+    <title>enum NMDeviceState</title>
+    <indexterm zone="NMDeviceState">
+      <primary>NMDeviceState</primary>
+    </indexterm>
+    <para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device's state is unknown</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_UNMANAGED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>10</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device is recognized, but not managed by NetworkManager</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_UNAVAILABLE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>20</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device is managed by NetworkManager, but is not available for use.  Reasons may include the wireless switched off, missing firmware, no ethernet carrier, missing supplicant or modem manager, etc.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_DISCONNECTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>30</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device can be activated, but is currently idle and not connected to a network.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_PREPARE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>40</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device is preparing the connection to the network.  This may include operations like changing the MAC address, setting physical link properties, and anything else required to connect to the requested network.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_CONFIG</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>50</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device is connecting to the requested network. This may include operations like associating with the Wi-Fi AP, dialing the modem, connecting to the remote Bluetooth device, etc.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_NEED_AUTH</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>60</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device requires more information to continue connecting to the requested network.  This includes secrets like WiFi passphrases, login passwords, PIN codes, etc.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_IP_CONFIG</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>70</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device is requesting IPv4 and/or IPv6 addresses and routing information from the network.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_IP_CHECK</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>80</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device is checking whether further action is required for the requested network connection.  This may include checking whether only local network access is available, whether a captive portal is blocking access to the Internet, etc.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_SECONDARIES</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>90</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device is waiting for a secondary connection (like a VPN) which must activated before the device can be activated</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_ACTIVATED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>100</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device has a network connection, either local or global.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_DEACTIVATING</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>110</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a disconnection from the current network connection was requested, and the device is cleaning up resources used for that connection.  The network connection may still be valid.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>120</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device failed to connect to the requested network and is cleaning up the connection request</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMDeviceStateReason" role="enum">
+    <title>enum NMDeviceStateReason</title>
+    <indexterm zone="NMDeviceStateReason">
+      <primary>NMDeviceStateReason</primary>
+    </indexterm>
+    <para><para>Device state change reason codes</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>No reason given</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Unknown error</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_NOW_MANAGED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Device is now managed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_NOW_UNMANAGED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Device is now unmanaged</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_CONFIG_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The device could not be readied for configuration</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>5</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>IP configuration could not be reserved (no available address, timeout, etc)</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>6</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The IP config is no longer valid</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_NO_SECRETS</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>7</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Secrets were required, but not provided</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>8</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>802.1x supplicant disconnected</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>9</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>802.1x supplicant configuration failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>10</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>802.1x supplicant failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>11</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>802.1x supplicant took too long to authenticate</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_PPP_START_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>12</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>PPP service failed to start</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_PPP_DISCONNECT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>13</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>PPP service disconnected</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_PPP_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>14</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>PPP failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_DHCP_START_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>15</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>DHCP client failed to start</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_DHCP_ERROR</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>16</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>DHCP client error</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_DHCP_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>17</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>DHCP client failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_SHARED_START_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>18</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Shared connection service failed to start</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_SHARED_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>19</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Shared connection service failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>20</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>AutoIP service failed to start</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_AUTOIP_ERROR</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>21</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>AutoIP service error</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_AUTOIP_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>22</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>AutoIP service failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_MODEM_BUSY</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>23</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The line is busy</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>24</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>No dial tone</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>25</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>No carrier could be established</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>26</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The dialing request timed out</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>27</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The dialing attempt failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>28</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Modem initialization failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_GSM_APN_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>29</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Failed to select the specified APN</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>30</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Not searching for networks</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>31</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Network registration denied</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>32</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Network registration timed out</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>33</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Failed to register with the requested network</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>34</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>PIN check failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_FIRMWARE_MISSING</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>35</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Necessary firmware for the device may be missing</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_REMOVED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>36</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The device was removed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_SLEEPING</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>37</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>NetworkManager went to sleep</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_CONNECTION_REMOVED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>38</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The device's active connection disappeared</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_USER_REQUESTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>39</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Device disconnected by user or client</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_CARRIER</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>40</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Carrier/link changed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>41</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The device's existing connection was assumed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>42</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The supplicant is now available</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>43</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The modem could not be found</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_BT_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>44</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The Bluetooth connection failed or timed out</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>45</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>GSM Modem's SIM Card not inserted</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>46</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>GSM Modem's SIM Pin required</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>47</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>GSM Modem's SIM Puk required</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_GSM_SIM_WRONG</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>48</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>GSM Modem's SIM wrong</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_INFINIBAND_MODE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>49</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>InfiniBand device does not support connected mode</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>50</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>A dependency of the connection failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_BR2684_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>51</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Problem with the RFC 2684 Ethernet over ADSL bridge</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>52</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>ModemManager not running</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_SSID_NOT_FOUND</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>53</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The Wi-Fi network could not be found</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>54</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>A secondary connection of the base connection failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>55</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>DCB or FCoE setup failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>56</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>teamd control failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_MODEM_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>57</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Modem failed or no longer available</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_MODEM_AVAILABLE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>58</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Modem now ready and available</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>59</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>SIM PIN was incorrect</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_NEW_ACTIVATION</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>60</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>New connection activation was enqueued</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_PARENT_CHANGED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>61</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device's parent changed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_PARENT_MANAGED_CHANGED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>62</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device parent's management changed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_OVSDB_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>63</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>problem communicating with Open vSwitch database</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_IP_ADDRESS_DUPLICATE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>64</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a duplicate IP address was detected</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_IP_METHOD_UNSUPPORTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>65</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The selected IP method is not supported</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_SRIOV_CONFIGURATION_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>66</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>configuration of SR-IOV parameters failed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_STATE_REASON_PEER_NOT_FOUND</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>67</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The Wi-Fi P2P peer could not be found</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMMetered" role="enum">
+    <title>enum NMMetered</title>
+    <indexterm zone="NMMetered">
+      <primary>NMMetered</primary>
+    </indexterm>
+    <para><para>The NMMetered enum has two different purposes: one is to configure "connection.metered" setting of a connection profile in <link linkend="NMSettingConnection,">NMSettingConnection,</link> and the other is to express the actual metered state of the <link linkend="NMDevice">NMDevice</link> at a given moment.</para><para>For the connection profile only <link linkend="NM_METERED_UNKNOWN,">NM_METERED_UNKNOWN,</link> <link linkend="NM_METERED_NO">NM_METERED_NO</link> and <link linkend="NM_METERED_YES">NM_METERED_YES</link> are allowed.</para><para>The device's metered state at runtime is determined by the profile which is currently active. If the profile explicitly specifies <link linkend="NM_METERED_NO">NM_METERED_NO</link> or <link linkend="NM_METERED_YES,">NM_METERED_YES,</link> then the device's metered state is as such. If the connection profile leaves it undecided at <link linkend="NM_METERED_UNKNOWN">NM_METERED_UNKNOWN</link> (the default), then NetworkManager tries to guess the metered state, for example based on the device type or on DHCP options (like Android devices exposing a "ANDROID_METERED" DHCP vendor option). This then leads to either <link linkend="NM_METERED_GUESS_NO">NM_METERED_GUESS_NO</link> or <link linkend="NM_METERED_GUESS_YES">NM_METERED_GUESS_YES</link>.</para><para>Most applications probably should treat the runtime state <link linkend="NM_METERED_GUESS_YES">NM_METERED_GUESS_YES</link> like <link linkend="NM_METERED_YES,">NM_METERED_YES,</link> and all other states as not metered.</para><para>Note that the per-device metered states are then combined to a global metered state. This is basically the metered state of the device with the best default route. However, that generalization of a global metered state may not be correct if the default routes for IPv4 and IPv6 are on different devices, or if policy routing is configured. In general, the global metered state tries to express whether the traffic is likely metered, but since that depends on the traffic itself, there is not one answer in all cases. Hence, an application may want to consider the per-device's metered states.</para><para>Since: 1.2</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_METERED_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The metered status is unknown</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_METERED_YES</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Metered, the value was explicitly configured</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_METERED_NO</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Not metered, the value was explicitly configured</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_METERED_GUESS_YES</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Metered, the value was guessed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_METERED_GUESS_NO</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Not metered, the value was guessed</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMConnectionMultiConnect" role="enum">
+    <title>enum NMConnectionMultiConnect</title>
+    <indexterm zone="NMConnectionMultiConnect">
+      <primary>NMConnectionMultiConnect</primary>
+    </indexterm>
+    <para><para>Since: 1.14</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CONNECTION_MULTI_CONNECT_DEFAULT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>indicates that the per-connection setting is unspecified. In this case, it will fallback to the default value, which is %NM_CONNECTION_MULTI_CONNECT_SINGLE.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CONNECTION_MULTI_CONNECT_SINGLE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the connection profile can only be active once at each moment. Activating a profile that is already active, will first deactivate it.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CONNECTION_MULTI_CONNECT_MANUAL_MULTIPLE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the profile can be manually activated multiple times on different devices. However, regarding autoconnect, the profile will autoconnect only if it is currently not connected otherwise.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CONNECTION_MULTI_CONNECT_MULTIPLE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the profile can autoactivate and be manually activated multiple times together.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMActiveConnectionState" role="enum">
+    <title>enum NMActiveConnectionState</title>
+    <indexterm zone="NMActiveConnectionState">
+      <primary>NMActiveConnectionState</primary>
+    </indexterm>
+    <para><para><link linkend="NMActiveConnectionState">NMActiveConnectionState</link> values indicate the state of a connection to a specific network while it is starting, connected, or disconnecting from that network.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the state of the connection is unknown</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_ACTIVATING</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>a network connection is being prepared</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_ACTIVATED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>there is a connection to the network</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_DEACTIVATING</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the network connection is being torn down and cleaned up</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_DEACTIVATED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the network connection is disconnected and will be removed</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMActiveConnectionStateReason" role="enum">
+    <title>enum NMActiveConnectionStateReason</title>
+    <indexterm zone="NMActiveConnectionStateReason">
+      <primary>NMActiveConnectionStateReason</primary>
+    </indexterm>
+    <para><para>Active connection state reasons.</para><para>Since: 1.8</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The reason for the active connection state change is unknown.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>No reason was given for the active connection state change.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_USER_DISCONNECTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The active connection changed state because the user disconnected it.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The active connection changed state because the device it was using was disconnected.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_SERVICE_STOPPED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The service providing the VPN connection was stopped.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_IP_CONFIG_INVALID</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>5</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The IP config of the active connection was invalid.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_CONNECT_TIMEOUT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>6</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The connection attempt to the VPN service timed out.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>7</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>A timeout occurred while starting the service providing the VPN connection.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_SERVICE_START_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>8</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Starting the service providing the VPN connection failed.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_NO_SECRETS</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>9</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Necessary secrets for the connection were not provided.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_LOGIN_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>10</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Authentication to the server failed.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_CONNECTION_REMOVED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>11</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The connection was deleted from settings.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_DEPENDENCY_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>12</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Master connection of this connection failed to activate.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_REALIZE_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>13</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Could not create the software device link.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_REMOVED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>14</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The device this connection depended on disappeared.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMSecretAgentGetSecretsFlags" role="enum">
+    <title>enum NMSecretAgentGetSecretsFlags</title>
+    <indexterm zone="NMSecretAgentGetSecretsFlags">
+      <primary>NMSecretAgentGetSecretsFlags</primary>
+    </indexterm>
+    <para><para><link linkend="NMSecretAgentGetSecretsFlags">NMSecretAgentGetSecretsFlags</link> values modify the behavior of a GetSecrets request.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>no special behavior; by default no user interaction is allowed and requests for secrets are fulfilled from persistent storage, or if no secrets are available an error is returned.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>allows the request to interact with the user, possibly prompting via UI for secrets if any are required, or if none are found in persistent storage.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>explicitly prompt for new secrets from the user.  This flag signals that NetworkManager thinks any existing secrets are invalid or wrong.  This flag implies that interaction is allowed.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>set if the request was initiated by user-requested action via the D-Bus interface, as opposed to automatically initiated by NetworkManager in response to (for example) scan results or carrier changes.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SECRET_AGENT_GET_SECRETS_FLAG_WPS_PBC_ACTIVE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x8</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>indicates that WPS enrollment is active with PBC method. The agent may suggest that the user pushes a button on the router instead of supplying a PSK.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x80000000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Internal flag, not part of the D-Bus API.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x40000000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Internal flag, not part of the D-Bus API.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMSecretAgentCapabilities" role="enum">
+    <title>enum NMSecretAgentCapabilities</title>
+    <indexterm zone="NMSecretAgentCapabilities">
+      <primary>NMSecretAgentCapabilities</primary>
+    </indexterm>
+    <para><para><link linkend="NMSecretAgentCapabilities">NMSecretAgentCapabilities</link> indicate various capabilities of the agent.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SECRET_AGENT_CAPABILITY_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the agent supports no special capabilities</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SECRET_AGENT_CAPABILITY_VPN_HINTS</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the agent supports passing hints to VPN plugin authentication dialogs.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMIPTunnelMode" role="enum">
+    <title>enum NMIPTunnelMode</title>
+    <indexterm zone="NMIPTunnelMode">
+      <primary>NMIPTunnelMode</primary>
+    </indexterm>
+    <para><para>The tunneling mode.</para><para>Since: 1.2</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_IP_TUNNEL_MODE_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Unknown/unset tunnel mode</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_IP_TUNNEL_MODE_IPIP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>IP in IP tunnel</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_IP_TUNNEL_MODE_GRE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>GRE tunnel</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_IP_TUNNEL_MODE_SIT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>SIT tunnel</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_IP_TUNNEL_MODE_ISATAP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>ISATAP tunnel</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_IP_TUNNEL_MODE_VTI</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>5</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>VTI tunnel</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_IP_TUNNEL_MODE_IP6IP6</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>6</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>IPv6 in IPv6 tunnel</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_IP_TUNNEL_MODE_IPIP6</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>7</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>IPv4 in IPv6 tunnel</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_IP_TUNNEL_MODE_IP6GRE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>8</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>IPv6 GRE tunnel</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_IP_TUNNEL_MODE_VTI6</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>9</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>IPv6 VTI tunnel</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_IP_TUNNEL_MODE_GRETAP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>10</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>GRETAP tunnel</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_IP_TUNNEL_MODE_IP6GRETAP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>11</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>IPv6 GRETAP tunnel</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMCheckpointCreateFlags" role="enum">
+    <title>enum NMCheckpointCreateFlags</title>
+    <indexterm zone="NMCheckpointCreateFlags">
+      <primary>NMCheckpointCreateFlags</primary>
+    </indexterm>
+    <para><para>The flags for CheckpointCreate call</para><para>Since: 1.4 (gi flags generated since 1.12)</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CHECKPOINT_CREATE_FLAG_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>no flags</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CHECKPOINT_CREATE_FLAG_DESTROY_ALL</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x01</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>when creating a new checkpoint, destroy all existing ones.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CHECKPOINT_CREATE_FLAG_DELETE_NEW_CONNECTIONS</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x02</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>upon rollback, delete any new connection added after the checkpoint. Since: 1.6.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CHECKPOINT_CREATE_FLAG_DISCONNECT_NEW_DEVICES</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x04</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>upon rollback, disconnect any new device appeared after the checkpoint. Since: 1.6.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CHECKPOINT_CREATE_FLAG_ALLOW_OVERLAPPING</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x08</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>by default, creating a checkpoint fails if there are already existing checkoints that reference the same devices. With this flag, creation of such checkpoints is allowed, however, if an older checkpoint that references overlapping devices gets rolled back, it will automatically destroy this checkpoint during rollback. This allows to create several overlapping checkpoints in parallel, and rollback to them at will. With the special case that rolling back to an older checkpoint will invalidate all overlapping younger checkpoints. This opts-in that the checkpoint can be automatically destroyed by the rollback of an older checkpoint. Since: 1.12.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMRollbackResult" role="enum">
+    <title>enum NMRollbackResult</title>
+    <indexterm zone="NMRollbackResult">
+      <primary>NMRollbackResult</primary>
+    </indexterm>
+    <para><para>The result of a checkpoint Rollback() operation for a specific device.</para><para>Since: 1.4</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ROLLBACK_RESULT_OK</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the rollback succeeded.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ROLLBACK_RESULT_ERR_NO_DEVICE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device no longer exists.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ROLLBACK_RESULT_ERR_DEVICE_UNMANAGED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device is now unmanaged.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ROLLBACK_RESULT_ERR_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>other errors during rollback.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMSettingsConnectionFlags" role="enum">
+    <title>enum NMSettingsConnectionFlags</title>
+    <indexterm zone="NMSettingsConnectionFlags">
+      <primary>NMSettingsConnectionFlags</primary>
+    </indexterm>
+    <para><para>Flags describing the current activation state.</para><para>Since: 1.12</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_CONNECTION_FLAG_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>an alias for numeric zero, no flags set.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_CONNECTION_FLAG_UNSAVED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x01</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the connection is not saved to disk. That either means, that the connection is in-memory only and currently is not backed by a file. Or, that the connection is backed by a file, but has modifications in-memory that were not persisted to disk.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_CONNECTION_FLAG_NM_GENERATED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x02</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>A connection is "nm-generated" if it was generated by NetworkManger. If the connection gets modified or saved by the user, the flag gets cleared. A nm-generated is also unsaved and has no backing file as it is in-memory only.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_CONNECTION_FLAG_VOLATILE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x04</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The connection will be deleted when it disconnects. That is for in-memory connections (unsaved), which are currently active but deleted on disconnect. Volatile connections are always unsaved, but they are also no backing file on disk and are entirely in-memory only.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_CONNECTION_FLAG_EXTERNAL</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x08</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the profile was generated to represent an external configuration of a networking device. Since: 1.26.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMActivationStateFlags" role="enum">
+    <title>enum NMActivationStateFlags</title>
+    <indexterm zone="NMActivationStateFlags">
+      <primary>NMActivationStateFlags</primary>
+    </indexterm>
+    <para><para>Flags describing the current activation state.</para><para>Since: 1.10</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVATION_STATE_FLAG_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>an alias for numeric zero, no flags set.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVATION_STATE_FLAG_IS_MASTER</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device is a master.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVATION_STATE_FLAG_IS_SLAVE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the device is a slave.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVATION_STATE_FLAG_LAYER2_READY</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>layer2 is activated and ready.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVATION_STATE_FLAG_IP4_READY</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x8</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>IPv4 setting is completed.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVATION_STATE_FLAG_IP6_READY</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x10</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>IPv6 setting is completed.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVATION_STATE_FLAG_MASTER_HAS_SLAVES</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x20</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The master has any slave devices attached. This only makes sense if the device is a master.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVATION_STATE_FLAG_LIFETIME_BOUND_TO_PROFILE_VISIBILITY</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x40</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the lifetime of the activation is bound to the visibility of the connection profile, which in turn depends on "connection.permissions" and whether a session for the user exists. Since: 1.16.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_ACTIVATION_STATE_FLAG_EXTERNAL</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x80</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the active connection was generated to represent an external configuration of a networking device. Since: 1.26.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMSettingsAddConnection2Flags" role="enum">
+    <title>enum NMSettingsAddConnection2Flags</title>
+    <indexterm zone="NMSettingsAddConnection2Flags">
+      <primary>NMSettingsAddConnection2Flags</primary>
+    </indexterm>
+    <para><para>Numeric flags for the "flags" argument of AddConnection2() D-Bus API.</para><para>Since: 1.20</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_ADD_CONNECTION2_FLAG_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>an alias for numeric zero, no flags set.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_ADD_CONNECTION2_FLAG_TO_DISK</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>to persist the connection to disk.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_ADD_CONNECTION2_FLAG_IN_MEMORY</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>to make the connection in-memory only.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_ADD_CONNECTION2_FLAG_BLOCK_AUTOCONNECT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x20</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>usually, when the connection has autoconnect enabled and gets added, it becomes eligible to autoconnect right away. Setting this flag, disables autoconnect until the connection is manually activated.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMSettingsUpdate2Flags" role="enum">
+    <title>enum NMSettingsUpdate2Flags</title>
+    <indexterm zone="NMSettingsUpdate2Flags">
+      <primary>NMSettingsUpdate2Flags</primary>
+    </indexterm>
+    <para><para>Since: 1.12</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_UPDATE2_FLAG_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>an alias for numeric zero, no flags set.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_UPDATE2_FLAG_TO_DISK</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>to persist the connection to disk.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>makes the profile in-memory. Note that such profiles are stored in keyfile format under /run. If the file is already in-memory, the file in /run is updated in-place. Otherwise, the previous storage for the profile is left unchanged on disk, and the in-memory copy shadows it. Note that the original filename of the previous persistent storage (if any) is remembered. That means, when later persisting the profile again to disk, the file on disk will be overwritten again. Likewise, when finally deleting the profile, both the storage from /run and persistent storage are deleted (or if the persistent storage does not allow deletion, and nmmeta file is written to mark the UUID as deleted).</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_DETACHED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>this is almost the same as %NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY, with one difference: when later deleting the profile, the original profile will not be deleted. Instead a nmmeta file is written to /run to indicate that the profile is gone. Note that if such a nmmeta tombstone file exists and hides a file in persistent storage, then when re-adding the profile with the same UUID, then the original storage is taken over again.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_ONLY</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x8</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>this is like %NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY, but if the connection has a corresponding file on persistent storage, the file will be deleted right away. If the profile is later again persisted to disk, a new, unused filename will be chosen.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_UPDATE2_FLAG_VOLATILE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x10</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>This can be specified with either %NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY, %NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_DETACHED or %NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_ONLY. After making the connection in-memory only, the connection is marked as volatile. That means, if the connection is currently not active it will be deleted right away. Otherwise, it is marked to for deletion once the connection deactivates. A volatile connection cannot autoactivate again (because it's about to be deleted), but a manual activation will clear the volatile flag.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_UPDATE2_FLAG_BLOCK_AUTOCONNECT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x20</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>usually, when the connection has autoconnect enabled and is modified, it becomes eligible to autoconnect right away. Setting this flag, disables autoconnect until the connection is manually activated.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_SETTINGS_UPDATE2_FLAG_NO_REAPPLY</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x40</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>when a profile gets modified that is currently active, then these changes don't take effect for the active device unless the profile gets reactivated or the configuration reapplied. There are two exceptions: by default "connection.zone" and "connection.metered" properties take effect immediately. Specify this flag to prevent these properties to take effect, so that the change is restricted to modify the profile. Since: 1.20.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMTernary" role="enum">
+    <title>enum NMTernary</title>
+    <indexterm zone="NMTernary">
+      <primary>NMTernary</primary>
+    </indexterm>
+    <para><para>An boolean value that can be overridden by a default.</para><para>Since: 1.14</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_TERNARY_DEFAULT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>-1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>use the globally-configured default value.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_TERNARY_FALSE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the option is disabled.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_TERNARY_TRUE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the option is enabled.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMManagerReloadFlags" role="enum">
+    <title>enum NMManagerReloadFlags</title>
+    <indexterm zone="NMManagerReloadFlags">
+      <primary>NMManagerReloadFlags</primary>
+    </indexterm>
+    <para><para>Flags for the manager Reload() call.</para><para>Since: 1.22</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_MANAGER_RELOAD_FLAG_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>an alias for numeric zero, no flags set. This reloads everything that is supported and is identical to a SIGHUP.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_MANAGER_RELOAD_FLAG_CONF</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>reload the NetworkManager.conf configuration from disk. Note that this does not include connections, which can be reloaded via Setting's ReloadConnections().</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_MANAGER_RELOAD_FLAG_DNS_RC</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>update DNS configuration, which usually involves writing /etc/resolv.conf anew.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_MANAGER_RELOAD_FLAG_DNS_FULL</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>means to restart the DNS plugin. This is for example useful when using dnsmasq plugin, which uses additional configuration in /etc/NetworkManager/dnsmasq.d. If you edit those files, you can restart the DNS plugin. This action shortly interrupts name resolution.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_MANAGER_RELOAD_FLAG_ALL</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x7</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>all flags.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMDeviceInterfaceFlags" role="enum">
+    <title>enum NMDeviceInterfaceFlags</title>
+    <indexterm zone="NMDeviceInterfaceFlags">
+      <primary>NMDeviceInterfaceFlags</primary>
+    </indexterm>
+    <para><para>Flags for a network interface.</para><para>Since: 1.22</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_INTERFACE_FLAG_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>an alias for numeric zero, no flags set.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_INTERFACE_FLAG_UP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the interface is enabled from the administrative point of view. Corresponds to kernel IFF_UP.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_INTERFACE_FLAG_LOWER_UP</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the physical link is up. Corresponds to kernel IFF_LOWER_UP.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_INTERFACE_FLAG_PROMISC</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>receive all packets. Corresponds to kernel IFF_PROMISC. Since: 1.32.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_INTERFACE_FLAG_CARRIER</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x10000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the interface has carrier. In most cases this is equal to the value of @NM_DEVICE_INTERFACE_FLAG_LOWER_UP. However some devices have a non-standard carrier detection mechanism.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_DEVICE_INTERFACE_FLAG_LLDP_CLIENT_ENABLED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0x20000</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the flag to indicate device LLDP status. Since: 1.32.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMClientPermission" role="enum">
+    <title>enum NMClientPermission</title>
+    <indexterm zone="NMClientPermission">
+      <primary>NMClientPermission</primary>
+    </indexterm>
+    <para><para><link linkend="NMClientPermission">NMClientPermission</link> values indicate various permissions that NetworkManager clients can obtain to perform certain tasks on behalf of the current user.</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>unknown or no permission</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether networking can be globally enabled or disabled</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether Wi-Fi can be globally enabled or disabled</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether WWAN (3G) can be globally enabled or disabled</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether WiMAX can be globally enabled or disabled</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_SLEEP_WAKE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>5</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether the client can ask NetworkManager to sleep and wake</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_NETWORK_CONTROL</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>6</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether networking connections can be started, stopped, and changed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>7</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether a password protected Wi-Fi hotspot can be created</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>8</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether an open Wi-Fi hotspot can be created</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>9</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether connections that are available to all users can be modified</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>10</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether connections owned by the current user can be modified</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>11</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether the persistent hostname can be changed</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>12</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>modify persistent global DNS configuration</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_RELOAD</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>13</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls access to Reload.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>14</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>permission to create checkpoints.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>15</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether device statistics can be globally enabled or disabled</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>16</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether connectivity check can be enabled or disabled</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_WIFI_SCAN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>17</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>controls whether wifi scans can be performed</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMClientPermissionResult" role="enum">
+    <title>enum NMClientPermissionResult</title>
+    <indexterm zone="NMClientPermissionResult">
+      <primary>NMClientPermissionResult</primary>
+    </indexterm>
+    <para><para><link linkend="NMClientPermissionResult">NMClientPermissionResult</link> values indicate what authorizations and permissions the user requires to obtain a given <link linkend="NMClientPermission">NMClientPermission</link></para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_RESULT_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>unknown or no authorization</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_RESULT_YES</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>the permission is available</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_RESULT_AUTH</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>authorization is necessary before the permission is available</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_CLIENT_PERMISSION_RESULT_NO</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>permission to perform the operation is denied by system policy</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+</refentry>
diff --git a/src/libnm-core-public/nm-errors.h b/src/libnm-core-public/nm-errors.h
new file mode 100644
index 00000000..639c508e
--- /dev/null
+++ b/src/libnm-core-public/nm-errors.h
@@ -0,0 +1,319 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2004 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_ERRORS_H__
+#define __NM_ERRORS_H__
+
+/**
+ * NMAgentManagerError:
+ * @NM_AGENT_MANAGER_ERROR_FAILED: unknown or unspecified error
+ * @NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED: The caller does not have permission
+ *   to register a secret agent, or is trying to register the same secret agent
+ *   twice.
+ * @NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER: The identifier is not a valid
+ *   secret agent identifier.
+ * @NM_AGENT_MANAGER_ERROR_NOT_REGISTERED: The caller tried to unregister an agent
+ *   that was not registered.
+ * @NM_AGENT_MANAGER_ERROR_NO_SECRETS: No secret agent returned secrets for this
+ *   request
+ * @NM_AGENT_MANAGER_ERROR_USER_CANCELED: The user canceled the secrets request.
+ *
+ * Errors returned from the secret-agent manager.
+ *
+ * These errors may be returned from operations that could cause secrets to be
+ * requested (such as nm_client_activate_connection()), and correspond to D-Bus
+ * errors in the "org.freedesktop.NetworkManager.AgentManager" namespace.
+ */
+typedef enum {
+    NM_AGENT_MANAGER_ERROR_FAILED = 0,         /*< nick=Failed >*/
+    NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED,  /*< nick=PermissionDenied >*/
+    NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER, /*< nick=InvalidIdentifier >*/
+    NM_AGENT_MANAGER_ERROR_NOT_REGISTERED,     /*< nick=NotRegistered >*/
+    NM_AGENT_MANAGER_ERROR_NO_SECRETS,         /*< nick=NoSecrets >*/
+    NM_AGENT_MANAGER_ERROR_USER_CANCELED,      /*< nick=UserCanceled >*/
+} NMAgentManagerError;
+
+GQuark nm_agent_manager_error_quark(void);
+#define NM_AGENT_MANAGER_ERROR (nm_agent_manager_error_quark())
+
+/**
+ * NMConnectionError:
+ * @NM_CONNECTION_ERROR_FAILED: unknown or unclassified error
+ * @NM_CONNECTION_ERROR_SETTING_NOT_FOUND: the #NMConnection object
+ *   did not contain the specified #NMSetting object
+ * @NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND: the #NMConnection did not contain the
+ *   requested #NMSetting property
+ * @NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET: an operation which requires a secret
+ *   was attempted on a non-secret property
+ * @NM_CONNECTION_ERROR_MISSING_SETTING: the #NMConnection object is missing an
+ *   #NMSetting which is required for its configuration. The error message will
+ *   always be prefixed with "&lt;setting-name>: ", where "&lt;setting-name>" is the
+ *   name of the setting that is missing.
+ * @NM_CONNECTION_ERROR_INVALID_SETTING: the #NMConnection object contains an
+ *   invalid or inappropriate #NMSetting. The error message will always be
+ *   prefixed with "&lt;setting-name>: ", where "&lt;setting-name>" is the name of the
+ *   setting that is invalid.
+ * @NM_CONNECTION_ERROR_MISSING_PROPERTY: the #NMConnection object is invalid
+ *   because it is missing a required property. The error message will always be
+ *   prefixed with "&lt;setting-name>.&lt;property-name>: ", where "&lt;setting-name>" is
+ *   the name of the setting with the missing property, and "&lt;property-name>" is
+ *   the property that is missing.
+ * @NM_CONNECTION_ERROR_INVALID_PROPERTY: the #NMConnection object is invalid
+ *   because a property has an invalid value. The error message will always be
+ *   prefixed with "&lt;setting-name>.&lt;property-name>: ", where "&lt;setting-name>" is
+ *   the name of the setting with the invalid property, and "&lt;property-name>" is
+ *   the property that is invalid.
+ *
+ * Describes errors that may result from operations involving a #NMConnection
+ * or its #NMSettings.
+ *
+ * These errors may be returned directly from #NMConnection and #NMSetting
+ * methods, or may be returned from D-Bus operations (eg on #NMClient or
+ * #NMDevice), where they correspond to errors in the
+ * "org.freedesktop.NetworkManager.Settings.Connection" namespace.
+ */
+typedef enum {
+    NM_CONNECTION_ERROR_FAILED = 0,          /*< nick=Failed >*/
+    NM_CONNECTION_ERROR_SETTING_NOT_FOUND,   /*< nick=SettingNotFound >*/
+    NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND,  /*< nick=PropertyNotFound >*/
+    NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET, /*< nick=PropertyNotSecret >*/
+    NM_CONNECTION_ERROR_MISSING_SETTING,     /*< nick=MissingSetting >*/
+    NM_CONNECTION_ERROR_INVALID_SETTING,     /*< nick=InvalidSetting >*/
+    NM_CONNECTION_ERROR_MISSING_PROPERTY,    /*< nick=MissingProperty >*/
+    NM_CONNECTION_ERROR_INVALID_PROPERTY,    /*< nick=InvalidProperty >*/
+} NMConnectionError;
+
+#define NM_CONNECTION_ERROR nm_connection_error_quark()
+GQuark nm_connection_error_quark(void);
+
+/**
+ * NMCryptoError:
+ * @NM_CRYPTO_ERROR_FAILED: generic failure
+ * @NM_CRYPTO_ERROR_INVALID_DATA: the certificate or key data provided
+ *   was invalid
+ * @NM_CRYPTO_ERROR_INVALID_PASSWORD: the password was invalid
+ * @NM_CRYPTO_ERROR_UNKNOWN_CIPHER: the data uses an unknown cipher
+ * @NM_CRYPTO_ERROR_DECRYPTION_FAILED: decryption failed
+ * @NM_CRYPTO_ERROR_ENCRYPTION_FAILED: encryption failed
+ *
+ * Cryptography-related errors that can be returned from some nm-utils methods,
+ * and some #NMSetting8021x operations.
+ */
+typedef enum {
+    NM_CRYPTO_ERROR_FAILED = 0,
+    NM_CRYPTO_ERROR_INVALID_DATA,
+    NM_CRYPTO_ERROR_INVALID_PASSWORD,
+    NM_CRYPTO_ERROR_UNKNOWN_CIPHER,
+    NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+    NM_CRYPTO_ERROR_ENCRYPTION_FAILED,
+} NMCryptoError;
+
+#define NM_CRYPTO_ERROR nm_crypto_error_quark()
+GQuark nm_crypto_error_quark(void);
+
+/**
+ * NMDeviceError:
+ * @NM_DEVICE_ERROR_FAILED: unknown or unclassified error
+ * @NM_DEVICE_ERROR_CREATION_FAILED: NetworkManager failed to create the device
+ * @NM_DEVICE_ERROR_INVALID_CONNECTION: the specified connection is not valid
+ * @NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION: the specified connection is not
+ *   compatible with this device.
+ * @NM_DEVICE_ERROR_NOT_ACTIVE: the device does not have an active connection
+ * @NM_DEVICE_ERROR_NOT_SOFTWARE: the requested operation is only valid on
+ *   software devices.
+ * @NM_DEVICE_ERROR_NOT_ALLOWED: the requested operation is not allowed at
+ *   this time.
+ * @NM_DEVICE_ERROR_SPECIFIC_OBJECT_NOT_FOUND: the "specific object" in the
+ *   activation request (eg, the #NMAccessPoint or #NMWimaxNsp) was not
+ *   found.
+ * @NM_DEVICE_ERROR_VERSION_ID_MISMATCH: the version id did not match.
+ * @NM_DEVICE_ERROR_MISSING_DEPENDENCIES: the requested operation could not
+ *   be completed due to missing dependencies.
+ * @NM_DEVICE_ERROR_INVALID_ARGUMENT: invalid argument. Since: 1.16.
+ *
+ * Device-related errors.
+ *
+ * These errors may be returned directly from #NMDevice methods, or may be
+ * returned from D-Bus operations (where they correspond to errors in the
+ * "org.freedesktop.NetworkManager.Device" namespace).
+ */
+typedef enum {
+    NM_DEVICE_ERROR_FAILED = 0,                /*< nick=Failed >*/
+    NM_DEVICE_ERROR_CREATION_FAILED,           /*< nick=CreationFailed >*/
+    NM_DEVICE_ERROR_INVALID_CONNECTION,        /*< nick=InvalidConnection >*/
+    NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,   /*< nick=IncompatibleConnection >*/
+    NM_DEVICE_ERROR_NOT_ACTIVE,                /*< nick=NotActive >*/
+    NM_DEVICE_ERROR_NOT_SOFTWARE,              /*< nick=NotSoftware >*/
+    NM_DEVICE_ERROR_NOT_ALLOWED,               /*< nick=NotAllowed >*/
+    NM_DEVICE_ERROR_SPECIFIC_OBJECT_NOT_FOUND, /*< nick=SpecificObjectNotFound >*/
+    NM_DEVICE_ERROR_VERSION_ID_MISMATCH,       /*< nick=VersionIdMismatch >*/
+    NM_DEVICE_ERROR_MISSING_DEPENDENCIES,      /*< nick=MissingDependencies >*/
+    NM_DEVICE_ERROR_INVALID_ARGUMENT,          /*< nick=InvalidArgument >*/
+} NMDeviceError;
+
+#define NM_DEVICE_ERROR nm_device_error_quark()
+GQuark nm_device_error_quark(void);
+
+/**
+ * NMManagerError:
+ * @NM_MANAGER_ERROR_FAILED: unknown or unclassified error
+ * @NM_MANAGER_ERROR_PERMISSION_DENIED: Permission denied.
+ * @NM_MANAGER_ERROR_UNKNOWN_CONNECTION: The requested connection is not known.
+ * @NM_MANAGER_ERROR_UNKNOWN_DEVICE: The requested device is not known.
+ * @NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE: The requested connection cannot be
+ *   activated at this time.
+ * @NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE: The request could not be completed
+ *   because a required connection is not active.
+ * @NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE: The connection to be activated was
+ *   already active on another device.
+ * @NM_MANAGER_ERROR_DEPENDENCY_FAILED: An activation request failed due to a
+ *   dependency being unavailable.
+ * @NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE: The manager is already in the requested
+ *   sleep/wake state.
+ * @NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED: The network is already
+ *   enabled/disabled.
+ * @NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL: Unknown log level in SetLogging
+ * @NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN: Unknown log domain in SetLogging
+ * @NM_MANAGER_ERROR_INVALID_ARGUMENTS: Invalid arguments for D-Bus request
+ * @NM_MANAGER_ERROR_MISSING_PLUGIN: A plug-in was needed to complete the
+ *   activation but is not available.
+ *
+ * Errors related to the main "network management" interface of NetworkManager.
+ * These may be returned from #NMClient methods that invoke D-Bus operations on
+ * the "org.freedesktop.NetworkManager" interface, and correspond to D-Bus
+ * errors in that namespace.
+ */
+typedef enum {
+    NM_MANAGER_ERROR_FAILED = 0,                  /*< nick=Failed >*/
+    NM_MANAGER_ERROR_PERMISSION_DENIED,           /*< nick=PermissionDenied >*/
+    NM_MANAGER_ERROR_UNKNOWN_CONNECTION,          /*< nick=UnknownConnection >*/
+    NM_MANAGER_ERROR_UNKNOWN_DEVICE,              /*< nick=UnknownDevice >*/
+    NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE,    /*< nick=ConnectionNotAvailable >*/
+    NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE,       /*< nick=ConnectionNotActive >*/
+    NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE,   /*< nick=ConnectionAlreadyActive >*/
+    NM_MANAGER_ERROR_DEPENDENCY_FAILED,           /*< nick=DependencyFailed >*/
+    NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE,     /*< nick=AlreadyAsleepOrAwake >*/
+    NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED, /*< nick=AlreadyEnabledOrDisabled >*/
+    NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL,           /*< nick=UnknownLogLevel >*/
+    NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN,          /*< nick=UnknownLogDomain >*/
+    NM_MANAGER_ERROR_INVALID_ARGUMENTS,           /*< nick=InvalidArguments >*/
+    NM_MANAGER_ERROR_MISSING_PLUGIN,              /*< nick=MissingPlugin >*/
+} NMManagerError;
+
+GQuark nm_manager_error_quark(void);
+#define NM_MANAGER_ERROR (nm_manager_error_quark())
+
+/**
+ * NMSecretAgentError:
+ * @NM_SECRET_AGENT_ERROR_FAILED: unknown or unclassified error
+ * @NM_SECRET_AGENT_ERROR_PERMISSION_DENIED: the caller (ie, NetworkManager) is
+ *   not authorized to make this request
+ * @NM_SECRET_AGENT_ERROR_INVALID_CONNECTION: the connection for which secrets
+ *   were requested is invalid
+ * @NM_SECRET_AGENT_ERROR_USER_CANCELED: the request was canceled by the user
+ * @NM_SECRET_AGENT_ERROR_AGENT_CANCELED: the agent canceled the request
+ *   because it was requested to do so by NetworkManager
+ * @NM_SECRET_AGENT_ERROR_NO_SECRETS: the agent cannot find any secrets for this
+ *   connection
+ *
+ * #NMSecretAgentError values are passed by secret agents back to NetworkManager
+ * when they encounter problems retrieving secrets on behalf of NM. They
+ * correspond to errors in the "org.freedesktop.NetworkManager.SecretManager"
+ * namespace.
+ *
+ * Client APIs such as nm_client_activate_connection() will not see these error
+ * codes; instead, the secret agent manager will translate them to the
+ * corresponding #NMAgentManagerError codes.
+ */
+typedef enum {
+    NM_SECRET_AGENT_ERROR_FAILED = 0,         /*< nick=Failed >*/
+    NM_SECRET_AGENT_ERROR_PERMISSION_DENIED,  /*< nick=PermissionDenied >*/
+    NM_SECRET_AGENT_ERROR_INVALID_CONNECTION, /*< nick=InvalidConnection >*/
+    NM_SECRET_AGENT_ERROR_USER_CANCELED,      /*< nick=UserCanceled >*/
+    NM_SECRET_AGENT_ERROR_AGENT_CANCELED,     /*< nick=AgentCanceled >*/
+    NM_SECRET_AGENT_ERROR_NO_SECRETS,         /*< nick=NoSecrets >*/
+} NMSecretAgentError;
+
+GQuark nm_secret_agent_error_quark(void);
+#define NM_SECRET_AGENT_ERROR (nm_secret_agent_error_quark())
+
+/**
+ * NMSettingsError:
+ * @NM_SETTINGS_ERROR_FAILED: unknown or unclassified error
+ * @NM_SETTINGS_ERROR_PERMISSION_DENIED: permission denied
+ * @NM_SETTINGS_ERROR_NOT_SUPPORTED: the requested operation is not supported by any
+ *   active settings backend
+ * @NM_SETTINGS_ERROR_INVALID_CONNECTION: the connection was invalid
+ * @NM_SETTINGS_ERROR_READ_ONLY_CONNECTION: attempted to modify a read-only connection
+ * @NM_SETTINGS_ERROR_UUID_EXISTS: a connection with that UUID already exists
+ * @NM_SETTINGS_ERROR_INVALID_HOSTNAME: attempted to set an invalid hostname
+ * @NM_SETTINGS_ERROR_INVALID_ARGUMENTS: invalid arguments
+ *
+ * Errors related to the settings/persistent configuration interface of
+ * NetworkManager.
+ *
+ * These may be returned from #NMClient methods that invoke D-Bus operations on
+ * the "org.freedesktop.NetworkManager.Settings" interface, and correspond to
+ * D-Bus errors in that namespace.
+ */
+typedef enum {
+    NM_SETTINGS_ERROR_FAILED = 0,           /*< nick=Failed >*/
+    NM_SETTINGS_ERROR_PERMISSION_DENIED,    /*< nick=PermissionDenied >*/
+    NM_SETTINGS_ERROR_NOT_SUPPORTED,        /*< nick=NotSupported >*/
+    NM_SETTINGS_ERROR_INVALID_CONNECTION,   /*< nick=InvalidConnection >*/
+    NM_SETTINGS_ERROR_READ_ONLY_CONNECTION, /*< nick=ReadOnlyConnection >*/
+    NM_SETTINGS_ERROR_UUID_EXISTS,          /*< nick=UuidExists >*/
+    NM_SETTINGS_ERROR_INVALID_HOSTNAME,     /*< nick=InvalidHostname >*/
+    NM_SETTINGS_ERROR_INVALID_ARGUMENTS,    /*< nick=InvalidArguments >*/
+} NMSettingsError;
+
+GQuark nm_settings_error_quark(void);
+#define NM_SETTINGS_ERROR (nm_settings_error_quark())
+
+/**
+ * NMVpnPluginError:
+ * @NM_VPN_PLUGIN_ERROR_FAILED: unknown or unclassified error
+ * @NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS: the plugin is already starting,
+ *   and another connect request was received
+ * @NM_VPN_PLUGIN_ERROR_ALREADY_STARTED: the plugin is already connected, and
+ *   another connect request was received
+ * @NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS: the plugin is already stopping,
+ *   and another stop request was received
+ * @NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED: the plugin is already stopped, and
+ *   another disconnect request was received
+ * @NM_VPN_PLUGIN_ERROR_WRONG_STATE: the operation could not be performed in
+ *   this state
+ * @NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS: the operation could not be performed as
+ *   the request contained malformed arguments, or arguments of unexpected type.
+ *   Usually means that one of the VPN setting data items or secrets was not of
+ *   the expected type (ie int, string, bool, etc).
+ * @NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED: a child process failed to launch
+ * @NM_VPN_PLUGIN_ERROR_INVALID_CONNECTION: the operation could not be performed
+ *   because the connection was invalid.  Usually means that the connection's
+ *   VPN setting was missing some required data item or secret.
+ * @NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED: the operation could not be
+ *   performed as the plugin does not support interactive operations, such as
+ *   ConnectInteractive() or NewSecrets()
+ *
+ * Returned by the VPN service plugin to indicate errors. These codes correspond
+ * to errors in the "org.freedesktop.NetworkManager.VPN.Error" namespace.
+ **/
+typedef enum {
+    NM_VPN_PLUGIN_ERROR_FAILED,                    /*< nick=Failed >*/
+    NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS,      /*< nick=StartingInProgress >*/
+    NM_VPN_PLUGIN_ERROR_ALREADY_STARTED,           /*< nick=AlreadyStarted >*/
+    NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS,      /*< nick=StoppingInProgress >*/
+    NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED,           /*< nick=AlreadyStopped >*/
+    NM_VPN_PLUGIN_ERROR_WRONG_STATE,               /*< nick=WrongState >*/
+    NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,             /*< nick=BadArguments >*/
+    NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED,             /*< nick=LaunchFailed >*/
+    NM_VPN_PLUGIN_ERROR_INVALID_CONNECTION,        /*< nick=InvalidConnection >*/
+    NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED, /*< nick=InteractiveNotSupported >*/
+} NMVpnPluginError;
+
+#define NM_VPN_PLUGIN_ERROR (nm_vpn_plugin_error_quark())
+GQuark nm_vpn_plugin_error_quark(void);
+
+#endif /* __NM_ERRORS_H__ */
diff --git a/src/libnm-core-public/nm-keyfile.h b/src/libnm-core-public/nm-keyfile.h
new file mode 100644
index 00000000..28c052f9
--- /dev/null
+++ b/src/libnm-core-public/nm-keyfile.h
@@ -0,0 +1,165 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#ifndef __NM_KEYFILE_H__
+#define __NM_KEYFILE_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-core-types.h"
+
+G_BEGIN_DECLS
+
+/**
+ * NMKeyfileHandlerFlags:
+ * @NM_KEYFILE_HANDLER_FLAGS_NONE: no flags set.
+ *
+ * Flags for customizing nm_keyfile_read() and nm_keyfile_write().
+ *
+ * Currently no flags are implemented.
+ *
+ * Since: 1.30
+ */
+typedef enum { /*< flags >*/
+               NM_KEYFILE_HANDLER_FLAGS_NONE = 0,
+} NMKeyfileHandlerFlags;
+
+/**
+ * NMKeyfileHandlerType:
+ * @NM_KEYFILE_HANDLER_TYPE_WARN: a warning.
+ * @NM_KEYFILE_HANDLER_TYPE_WRITE_CERT: for handling certificates while writing
+ *   a connection to keyfile.
+ *
+ * The type of the callback for %NMKeyfileReadHandler and %NMKeyfileWriteHandler.
+ * Depending on the type, you can interpret %NMKeyfileHandlerData.
+ *
+ * Since: 1.30
+ */
+typedef enum {
+    NM_KEYFILE_HANDLER_TYPE_WARN       = 1,
+    NM_KEYFILE_HANDLER_TYPE_WRITE_CERT = 2,
+} NMKeyfileHandlerType;
+
+/**
+ * NMKeyfileHandlerData:
+ *
+ * Opaque type with parameters for the callback. The actual content
+ * depends on the %NMKeyfileHandlerType.
+ *
+ * Since: 1.30
+ */
+typedef struct _NMKeyfileHandlerData NMKeyfileHandlerData;
+
+/**
+ * NMKeyfileReadHandler:
+ * @keyfile: the #GKeyFile that is currently read
+ * @connection: the #NMConnection that is being constructed.
+ * @handler_type: the %NMKeyfileHandlerType that indicates which type
+ *   the request is.
+ * @handler_data: the #NMKeyfileHandlerData. What you can do with it
+ *   depends on the @handler_type.
+ * @user_data: the user-data argument to nm_keyfile_read().
+ *
+ * Hook to nm_keyfile_read().
+ *
+ * The callee may abort the reading by setting an error via nm_keyfile_handler_data_fail_with_error().
+ *
+ * Returns: the callee should return TRUE, if the event was handled and/or recognized.
+ *   Otherwise, a default action will be performed that depends on the @type.
+ *   For %NM_KEYFILE_HANDLER_TYPE_WARN type, the default action is doing nothing.
+ *
+ * Since: 1.30
+ */
+typedef gboolean (*NMKeyfileReadHandler)(GKeyFile *            keyfile,
+                                         NMConnection *        connection,
+                                         NMKeyfileHandlerType  handler_type,
+                                         NMKeyfileHandlerData *handler_data,
+                                         void *                user_data);
+
+NM_AVAILABLE_IN_1_30
+NMConnection *nm_keyfile_read(GKeyFile *            keyfile,
+                              const char *          base_dir,
+                              NMKeyfileHandlerFlags handler_flags,
+                              NMKeyfileReadHandler  handler,
+                              void *                user_data,
+                              GError **             error);
+
+/**
+ * NMKeyfileWriteHandler:
+ * @connection: the #NMConnection that is currently written.
+ * @keyfile: the #GKeyFile that is currently constructed.
+ * @handler_type: the %NMKeyfileHandlerType that indicates which type
+ *   the request is.
+ * @handler_data: the #NMKeyfileHandlerData. What you can do with it
+ *   depends on the @handler_type.
+ * @user_data: the user-data argument to nm_keyfile_read().
+ *
+ * This is a hook to tweak the serialization.
+ *
+ * Handler for certain properties or events that are not entirely contained
+ * within the keyfile or that might be serialized differently. The @type and
+ * @handler_data arguments tell which kind of argument we have at hand.
+ *
+ * Currently only the type %NM_KEYFILE_HANDLER_TYPE_WRITE_CERT is supported.
+ *
+ * The callee may call nm_keyfile_handler_data_fail_with_error() to abort
+ * the writing with error.
+ *
+ * Returns: the callee should return %TRUE if the event was handled. If the
+ *   event was unhandled, a default action will be performed that depends on
+ *   the @handler_type.
+ *
+ * Since: 1.30
+ */
+typedef gboolean (*NMKeyfileWriteHandler)(NMConnection *        connection,
+                                          GKeyFile *            keyfile,
+                                          NMKeyfileHandlerType  handler_type,
+                                          NMKeyfileHandlerData *handler_data,
+                                          void *                user_data);
+
+NM_AVAILABLE_IN_1_30
+GKeyFile *nm_keyfile_write(NMConnection *        connection,
+                           NMKeyfileHandlerFlags handler_flags,
+                           NMKeyfileWriteHandler handler,
+                           void *                user_data,
+                           GError **             error);
+
+/*****************************************************************************/
+
+NM_AVAILABLE_IN_1_30
+void nm_keyfile_handler_data_fail_with_error(NMKeyfileHandlerData *handler_data, GError *src);
+
+NM_AVAILABLE_IN_1_30
+void nm_keyfile_handler_data_get_context(const NMKeyfileHandlerData *handler_data,
+                                         const char **               out_kf_group_name,
+                                         const char **               out_kf_key_name,
+                                         NMSetting **                out_cur_setting,
+                                         const char **               out_cur_property_name);
+
+/**
+ * NMKeyfileWarnSeverity:
+ * @NM_KEYFILE_WARN_SEVERITY_DEBUG: debug message
+ * @NM_KEYFILE_WARN_SEVERITY_INFO: info message
+ * @NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE: info message about a missing file
+ * @NM_KEYFILE_WARN_SEVERITY_WARN: a warning message
+ *
+ * The severity level of %NM_KEYFILE_HANDLER_TYPE_WARN events.
+ *
+ * Since: 1.30
+ */
+typedef enum {
+    NM_KEYFILE_WARN_SEVERITY_DEBUG             = 1000,
+    NM_KEYFILE_WARN_SEVERITY_INFO              = 2000,
+    NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE = 2901,
+    NM_KEYFILE_WARN_SEVERITY_WARN              = 3000,
+} NMKeyfileWarnSeverity;
+
+NM_AVAILABLE_IN_1_30
+void nm_keyfile_handler_data_warn_get(const NMKeyfileHandlerData *handler_data,
+                                      const char **               out_message,
+                                      NMKeyfileWarnSeverity *     out_severity);
+
+G_END_DECLS
+
+#endif /* __NM_KEYFILE_H__ */
diff --git a/src/libnm-core-public/nm-setting-6lowpan.h b/src/libnm-core-public/nm-setting-6lowpan.h
new file mode 100644
index 00000000..5a7c3986
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-6lowpan.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2018 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_6LOWPAN_H__
+#define __NM_SETTING_6LOWPAN_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_6LOWPAN (nm_setting_6lowpan_get_type())
+#define NM_SETTING_6LOWPAN(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_6LOWPAN, NMSetting6Lowpan))
+#define NM_SETTING_6LOWPAN_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_6LOWPANCONFIG, NMSetting6LowpanClass))
+#define NM_IS_SETTING_6LOWPAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_6LOWPAN))
+#define NM_IS_SETTING_6LOWPAN_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_6LOWPAN))
+#define NM_SETTING_6LOWPAN_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_6LOWPAN, NMSetting6LowpanClass))
+
+#define NM_SETTING_6LOWPAN_SETTING_NAME "6lowpan"
+
+#define NM_SETTING_6LOWPAN_PARENT "parent"
+
+typedef struct _NMSetting6LowpanClass NMSetting6LowpanClass;
+
+NM_AVAILABLE_IN_1_14
+GType nm_setting_6lowpan_get_type(void);
+NM_AVAILABLE_IN_1_14
+NMSetting *nm_setting_6lowpan_new(void);
+
+NM_AVAILABLE_IN_1_14
+const char *nm_setting_6lowpan_get_parent(NMSetting6Lowpan *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_6LOWPAN_H__ */
diff --git a/src/libnm-core-public/nm-setting-8021x.h b/src/libnm-core-public/nm-setting-8021x.h
new file mode 100644
index 00000000..98e26d12
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-8021x.h
@@ -0,0 +1,352 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2014 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_8021X_H__
+#define __NM_SETTING_8021X_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH   "file://"
+#define NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PKCS11 "pkcs11:"
+
+/**
+ * NMSetting8021xCKFormat:
+ * @NM_SETTING_802_1X_CK_FORMAT_UNKNOWN: unknown file format
+ * @NM_SETTING_802_1X_CK_FORMAT_X509: file contains an X.509 format certificate
+ * @NM_SETTING_802_1X_CK_FORMAT_RAW_KEY: file contains an old-style OpenSSL PEM
+ * or DER private key
+ * @NM_SETTING_802_1X_CK_FORMAT_PKCS12: file contains a PKCS#<!-- -->12 certificate
+ * and private key
+ *
+ * #NMSetting8021xCKFormat values indicate the general type of a certificate
+ * or private key
+ */
+typedef enum { /*< underscore_name=nm_setting_802_1x_ck_format >*/
+               NM_SETTING_802_1X_CK_FORMAT_UNKNOWN = 0,
+               NM_SETTING_802_1X_CK_FORMAT_X509,
+               NM_SETTING_802_1X_CK_FORMAT_RAW_KEY,
+               NM_SETTING_802_1X_CK_FORMAT_PKCS12
+} NMSetting8021xCKFormat;
+
+/**
+ * NMSetting8021xCKScheme:
+ * @NM_SETTING_802_1X_CK_SCHEME_UNKNOWN: unknown certificate or private key
+ * scheme
+ * @NM_SETTING_802_1X_CK_SCHEME_BLOB: certificate or key is stored as the raw
+ * item data
+ * @NM_SETTING_802_1X_CK_SCHEME_PATH: certificate or key is stored as a path
+ * to a file containing the certificate or key data
+ * @NM_SETTING_802_1X_CK_SCHEME_PKCS11: certificate or key is stored as a
+ * URI of an object on a PKCS#11 token
+ *
+ * #NMSetting8021xCKScheme values indicate how a certificate or private key is
+ * stored in the setting properties, either as a blob of the item's data, or as
+ * a path to a certificate or private key file on the filesystem
+ */
+typedef enum { /*< underscore_name=nm_setting_802_1x_ck_scheme >*/
+               NM_SETTING_802_1X_CK_SCHEME_UNKNOWN = 0,
+               NM_SETTING_802_1X_CK_SCHEME_BLOB,
+               NM_SETTING_802_1X_CK_SCHEME_PATH,
+               NM_SETTING_802_1X_CK_SCHEME_PKCS11,
+} NMSetting8021xCKScheme;
+
+/**
+ * NMSetting8021xAuthFlags:
+ * @NM_SETTING_802_1X_AUTH_FLAGS_NONE: No flags
+ * @NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_0_DISABLE: Disable TLSv1.0
+ * @NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_1_DISABLE: Disable TLSv1.1
+ * @NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_2_DISABLE: Disable TLSv1.2
+ * @NM_SETTING_802_1X_AUTH_FLAGS_ALL: All supported flags
+ *
+ * #NMSetting8021xAuthFlags values indicate which authentication settings
+ * should be used.
+ *
+ * Before 1.22, this was wrongly marked as a enum and not as a flags
+ * type.
+ *
+ * Since: 1.8
+ */
+typedef enum { /*< flags, underscore_name=nm_setting_802_1x_auth_flags >*/
+               NM_SETTING_802_1X_AUTH_FLAGS_NONE            = 0,
+               NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_0_DISABLE = 0x1,
+               NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_1_DISABLE = 0x2,
+               NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_2_DISABLE = 0x4,
+
+               NM_SETTING_802_1X_AUTH_FLAGS_ALL = 0x7,
+} NMSetting8021xAuthFlags;
+
+#define NM_TYPE_SETTING_802_1X (nm_setting_802_1x_get_type())
+#define NM_SETTING_802_1X(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_802_1X, NMSetting8021x))
+#define NM_SETTING_802_1X_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_802_1X, NMSetting8021xClass))
+#define NM_IS_SETTING_802_1X(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_802_1X))
+#define NM_IS_SETTING_802_1X_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_802_1X))
+#define NM_SETTING_802_1X_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_802_1X, NMSetting8021xClass))
+
+#define NM_SETTING_802_1X_SETTING_NAME "802-1x"
+
+#define NM_SETTING_802_1X_EAP                               "eap"
+#define NM_SETTING_802_1X_IDENTITY                          "identity"
+#define NM_SETTING_802_1X_ANONYMOUS_IDENTITY                "anonymous-identity"
+#define NM_SETTING_802_1X_PAC_FILE                          "pac-file"
+#define NM_SETTING_802_1X_CA_CERT                           "ca-cert"
+#define NM_SETTING_802_1X_CA_CERT_PASSWORD                  "ca-cert-password"
+#define NM_SETTING_802_1X_CA_CERT_PASSWORD_FLAGS            "ca-cert-password-flags"
+#define NM_SETTING_802_1X_CA_PATH                           "ca-path"
+#define NM_SETTING_802_1X_SUBJECT_MATCH                     "subject-match"
+#define NM_SETTING_802_1X_ALTSUBJECT_MATCHES                "altsubject-matches"
+#define NM_SETTING_802_1X_DOMAIN_SUFFIX_MATCH               "domain-suffix-match"
+#define NM_SETTING_802_1X_DOMAIN_MATCH                      "domain-match"
+#define NM_SETTING_802_1X_CLIENT_CERT                       "client-cert"
+#define NM_SETTING_802_1X_CLIENT_CERT_PASSWORD              "client-cert-password"
+#define NM_SETTING_802_1X_CLIENT_CERT_PASSWORD_FLAGS        "client-cert-password-flags"
+#define NM_SETTING_802_1X_PHASE1_PEAPVER                    "phase1-peapver"
+#define NM_SETTING_802_1X_PHASE1_PEAPLABEL                  "phase1-peaplabel"
+#define NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING          "phase1-fast-provisioning"
+#define NM_SETTING_802_1X_PHASE1_AUTH_FLAGS                 "phase1-auth-flags"
+#define NM_SETTING_802_1X_PHASE2_AUTH                       "phase2-auth"
+#define NM_SETTING_802_1X_PHASE2_AUTHEAP                    "phase2-autheap"
+#define NM_SETTING_802_1X_PHASE2_CA_CERT                    "phase2-ca-cert"
+#define NM_SETTING_802_1X_PHASE2_CA_CERT_PASSWORD           "phase2-ca-cert-password"
+#define NM_SETTING_802_1X_PHASE2_CA_CERT_PASSWORD_FLAGS     "phase2-ca-cert-password-flags"
+#define NM_SETTING_802_1X_PHASE2_CA_PATH                    "phase2-ca-path"
+#define NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH              "phase2-subject-match"
+#define NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES         "phase2-altsubject-matches"
+#define NM_SETTING_802_1X_PHASE2_DOMAIN_SUFFIX_MATCH        "phase2-domain-suffix-match"
+#define NM_SETTING_802_1X_PHASE2_DOMAIN_MATCH               "phase2-domain-match"
+#define NM_SETTING_802_1X_PHASE2_CLIENT_CERT                "phase2-client-cert"
+#define NM_SETTING_802_1X_PHASE2_CLIENT_CERT_PASSWORD       "phase2-client-cert-password"
+#define NM_SETTING_802_1X_PHASE2_CLIENT_CERT_PASSWORD_FLAGS "phase2-client-cert-password-flags"
+#define NM_SETTING_802_1X_PASSWORD                          "password"
+#define NM_SETTING_802_1X_PASSWORD_FLAGS                    "password-flags"
+#define NM_SETTING_802_1X_PASSWORD_RAW                      "password-raw"
+#define NM_SETTING_802_1X_PASSWORD_RAW_FLAGS                "password-raw-flags"
+#define NM_SETTING_802_1X_PRIVATE_KEY                       "private-key"
+#define NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD              "private-key-password"
+#define NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS        "private-key-password-flags"
+#define NM_SETTING_802_1X_PHASE2_PRIVATE_KEY                "phase2-private-key"
+#define NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD       "phase2-private-key-password"
+#define NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS "phase2-private-key-password-flags"
+#define NM_SETTING_802_1X_PIN                               "pin"
+#define NM_SETTING_802_1X_PIN_FLAGS                         "pin-flags"
+#define NM_SETTING_802_1X_SYSTEM_CA_CERTS                   "system-ca-certs"
+#define NM_SETTING_802_1X_AUTH_TIMEOUT                      "auth-timeout"
+#define NM_SETTING_802_1X_OPTIONAL                          "optional"
+
+/* PRIVATE KEY NOTE: when setting PKCS#12 private keys directly via properties
+ * using the "blob" scheme, the data must be passed in PKCS#12 binary format.
+ * In this case, the appropriate "client-cert" (or "phase2-client-cert")
+ * property of the NMSetting8021x object must also contain the exact same
+ * PKCS#12 binary data that the private key does.  This is because the
+ * PKCS#12 file contains both the private key and client certificate, so both
+ * properties need to be set to the same thing.  When using the "path" scheme,
+ * just set both the private-key and client-cert properties to the same path.
+ *
+ * When setting OpenSSL-derived "traditional" format (ie S/MIME style, not
+ * PKCS#8) RSA and DSA keys directly via properties with the "blob" scheme, they
+ * should be passed to NetworkManager in PEM format with the "DEK-Info" and
+ * "Proc-Type" tags intact.  Decrypted private keys should not be used as this
+ * is insecure and could allow unprivileged users to access the decrypted
+ * private key data.
+ *
+ * When using the "path" scheme, just set the private-key and client-cert
+ * properties to the paths to their respective objects.
+ */
+
+typedef struct _NMSetting8021xClass NMSetting8021xClass;
+
+GType nm_setting_802_1x_get_type(void);
+
+NMSetting *nm_setting_802_1x_new(void);
+
+NM_AVAILABLE_IN_1_2
+NMSetting8021xCKScheme
+nm_setting_802_1x_check_cert_scheme(gconstpointer pdata, gsize length, GError **error);
+
+guint32     nm_setting_802_1x_get_num_eap_methods(NMSetting8021x *setting);
+const char *nm_setting_802_1x_get_eap_method(NMSetting8021x *setting, guint32 i);
+gboolean    nm_setting_802_1x_add_eap_method(NMSetting8021x *setting, const char *eap);
+void        nm_setting_802_1x_remove_eap_method(NMSetting8021x *setting, guint32 i);
+gboolean    nm_setting_802_1x_remove_eap_method_by_value(NMSetting8021x *setting, const char *eap);
+void        nm_setting_802_1x_clear_eap_methods(NMSetting8021x *setting);
+
+const char *nm_setting_802_1x_get_identity(NMSetting8021x *setting);
+
+const char *nm_setting_802_1x_get_anonymous_identity(NMSetting8021x *setting);
+
+const char *nm_setting_802_1x_get_pac_file(NMSetting8021x *setting);
+
+gboolean    nm_setting_802_1x_get_system_ca_certs(NMSetting8021x *setting);
+const char *nm_setting_802_1x_get_ca_path(NMSetting8021x *setting);
+const char *nm_setting_802_1x_get_phase2_ca_path(NMSetting8021x *setting);
+
+NMSetting8021xCKScheme nm_setting_802_1x_get_ca_cert_scheme(NMSetting8021x *setting);
+GBytes *               nm_setting_802_1x_get_ca_cert_blob(NMSetting8021x *setting);
+const char *           nm_setting_802_1x_get_ca_cert_path(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_6
+const char *nm_setting_802_1x_get_ca_cert_uri(NMSetting8021x *setting);
+gboolean    nm_setting_802_1x_set_ca_cert(NMSetting8021x *        setting,
+                                          const char *            value,
+                                          NMSetting8021xCKScheme  scheme,
+                                          NMSetting8021xCKFormat *out_format,
+                                          GError **               error);
+
+NM_AVAILABLE_IN_1_8
+const char *nm_setting_802_1x_get_ca_cert_password(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_8
+NMSettingSecretFlags nm_setting_802_1x_get_ca_cert_password_flags(NMSetting8021x *setting);
+
+const char *nm_setting_802_1x_get_subject_match(NMSetting8021x *setting);
+
+guint32     nm_setting_802_1x_get_num_altsubject_matches(NMSetting8021x *setting);
+const char *nm_setting_802_1x_get_altsubject_match(NMSetting8021x *setting, guint32 i);
+gboolean    nm_setting_802_1x_add_altsubject_match(NMSetting8021x *setting,
+                                                   const char *    altsubject_match);
+void        nm_setting_802_1x_remove_altsubject_match(NMSetting8021x *setting, guint32 i);
+gboolean    nm_setting_802_1x_remove_altsubject_match_by_value(NMSetting8021x *setting,
+                                                               const char *    altsubject_match);
+void        nm_setting_802_1x_clear_altsubject_matches(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_802_1x_get_domain_suffix_match(NMSetting8021x *setting);
+
+NM_AVAILABLE_IN_1_24
+const char *nm_setting_802_1x_get_domain_match(NMSetting8021x *setting);
+
+NMSetting8021xCKScheme nm_setting_802_1x_get_client_cert_scheme(NMSetting8021x *setting);
+GBytes *               nm_setting_802_1x_get_client_cert_blob(NMSetting8021x *setting);
+const char *           nm_setting_802_1x_get_client_cert_path(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_6
+const char *nm_setting_802_1x_get_client_cert_uri(NMSetting8021x *setting);
+gboolean    nm_setting_802_1x_set_client_cert(NMSetting8021x *        setting,
+                                              const char *            value,
+                                              NMSetting8021xCKScheme  scheme,
+                                              NMSetting8021xCKFormat *out_format,
+                                              GError **               error);
+
+NM_AVAILABLE_IN_1_8
+const char *nm_setting_802_1x_get_client_cert_password(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_8
+NMSettingSecretFlags nm_setting_802_1x_get_client_cert_password_flags(NMSetting8021x *setting);
+
+const char *nm_setting_802_1x_get_phase1_peapver(NMSetting8021x *setting);
+
+const char *nm_setting_802_1x_get_phase1_peaplabel(NMSetting8021x *setting);
+
+const char *nm_setting_802_1x_get_phase1_fast_provisioning(NMSetting8021x *setting);
+
+const char *nm_setting_802_1x_get_phase2_auth(NMSetting8021x *setting);
+
+const char *nm_setting_802_1x_get_phase2_autheap(NMSetting8021x *setting);
+
+NMSetting8021xCKScheme nm_setting_802_1x_get_phase2_ca_cert_scheme(NMSetting8021x *setting);
+GBytes *               nm_setting_802_1x_get_phase2_ca_cert_blob(NMSetting8021x *setting);
+const char *           nm_setting_802_1x_get_phase2_ca_cert_path(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_6
+const char *nm_setting_802_1x_get_phase2_ca_cert_uri(NMSetting8021x *setting);
+gboolean    nm_setting_802_1x_set_phase2_ca_cert(NMSetting8021x *        setting,
+                                                 const char *            value,
+                                                 NMSetting8021xCKScheme  scheme,
+                                                 NMSetting8021xCKFormat *out_format,
+                                                 GError **               error);
+
+NM_AVAILABLE_IN_1_8
+const char *nm_setting_802_1x_get_phase2_ca_cert_password(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_8
+NMSettingSecretFlags nm_setting_802_1x_get_phase2_ca_cert_password_flags(NMSetting8021x *setting);
+
+const char *nm_setting_802_1x_get_phase2_subject_match(NMSetting8021x *setting);
+
+guint32     nm_setting_802_1x_get_num_phase2_altsubject_matches(NMSetting8021x *setting);
+const char *nm_setting_802_1x_get_phase2_altsubject_match(NMSetting8021x *setting, guint32 i);
+gboolean    nm_setting_802_1x_add_phase2_altsubject_match(NMSetting8021x *setting,
+                                                          const char *    phase2_altsubject_match);
+void        nm_setting_802_1x_remove_phase2_altsubject_match(NMSetting8021x *setting, guint32 i);
+gboolean
+     nm_setting_802_1x_remove_phase2_altsubject_match_by_value(NMSetting8021x *setting,
+                                                               const char *    phase2_altsubject_match);
+void nm_setting_802_1x_clear_phase2_altsubject_matches(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_802_1x_get_phase2_domain_suffix_match(NMSetting8021x *setting);
+
+NM_AVAILABLE_IN_1_24
+const char *nm_setting_802_1x_get_phase2_domain_match(NMSetting8021x *setting);
+
+NMSetting8021xCKScheme nm_setting_802_1x_get_phase2_client_cert_scheme(NMSetting8021x *setting);
+GBytes *               nm_setting_802_1x_get_phase2_client_cert_blob(NMSetting8021x *setting);
+const char *           nm_setting_802_1x_get_phase2_client_cert_path(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_6
+const char *nm_setting_802_1x_get_phase2_client_cert_uri(NMSetting8021x *setting);
+gboolean    nm_setting_802_1x_set_phase2_client_cert(NMSetting8021x *        setting,
+                                                     const char *            value,
+                                                     NMSetting8021xCKScheme  scheme,
+                                                     NMSetting8021xCKFormat *out_format,
+                                                     GError **               error);
+
+NM_AVAILABLE_IN_1_8
+const char *nm_setting_802_1x_get_phase2_client_cert_password(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_8
+NMSettingSecretFlags
+nm_setting_802_1x_get_phase2_client_cert_password_flags(NMSetting8021x *setting);
+
+const char *         nm_setting_802_1x_get_password(NMSetting8021x *setting);
+NMSettingSecretFlags nm_setting_802_1x_get_password_flags(NMSetting8021x *setting);
+GBytes *             nm_setting_802_1x_get_password_raw(NMSetting8021x *setting);
+NMSettingSecretFlags nm_setting_802_1x_get_password_raw_flags(NMSetting8021x *setting);
+
+const char *         nm_setting_802_1x_get_pin(NMSetting8021x *setting);
+NMSettingSecretFlags nm_setting_802_1x_get_pin_flags(NMSetting8021x *setting);
+
+NMSetting8021xCKScheme nm_setting_802_1x_get_private_key_scheme(NMSetting8021x *setting);
+GBytes *               nm_setting_802_1x_get_private_key_blob(NMSetting8021x *setting);
+const char *           nm_setting_802_1x_get_private_key_path(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_6
+const char *         nm_setting_802_1x_get_private_key_uri(NMSetting8021x *setting);
+gboolean             nm_setting_802_1x_set_private_key(NMSetting8021x *        setting,
+                                                       const char *            value,
+                                                       const char *            password,
+                                                       NMSetting8021xCKScheme  scheme,
+                                                       NMSetting8021xCKFormat *out_format,
+                                                       GError **               error);
+const char *         nm_setting_802_1x_get_private_key_password(NMSetting8021x *setting);
+NMSettingSecretFlags nm_setting_802_1x_get_private_key_password_flags(NMSetting8021x *setting);
+
+NMSetting8021xCKFormat nm_setting_802_1x_get_private_key_format(NMSetting8021x *setting);
+
+NMSetting8021xCKScheme nm_setting_802_1x_get_phase2_private_key_scheme(NMSetting8021x *setting);
+GBytes *               nm_setting_802_1x_get_phase2_private_key_blob(NMSetting8021x *setting);
+const char *           nm_setting_802_1x_get_phase2_private_key_path(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_6
+const char *nm_setting_802_1x_get_phase2_private_key_uri(NMSetting8021x *setting);
+gboolean    nm_setting_802_1x_set_phase2_private_key(NMSetting8021x *        setting,
+                                                     const char *            value,
+                                                     const char *            password,
+                                                     NMSetting8021xCKScheme  scheme,
+                                                     NMSetting8021xCKFormat *out_format,
+                                                     GError **               error);
+const char *nm_setting_802_1x_get_phase2_private_key_password(NMSetting8021x *setting);
+NMSettingSecretFlags
+nm_setting_802_1x_get_phase2_private_key_password_flags(NMSetting8021x *setting);
+
+NMSetting8021xCKFormat nm_setting_802_1x_get_phase2_private_key_format(NMSetting8021x *setting);
+
+NM_AVAILABLE_IN_1_8
+NMSetting8021xAuthFlags nm_setting_802_1x_get_phase1_auth_flags(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_8
+int nm_setting_802_1x_get_auth_timeout(NMSetting8021x *setting);
+NM_AVAILABLE_IN_1_22
+gboolean nm_setting_802_1x_get_optional(NMSetting8021x *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_8021X_H__ */
diff --git a/src/libnm-core-public/nm-setting-adsl.h b/src/libnm-core-public/nm-setting-adsl.h
new file mode 100644
index 00000000..c655d74c
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-adsl.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_ADSL_H__
+#define __NM_SETTING_ADSL_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_ADSL (nm_setting_adsl_get_type())
+#define NM_SETTING_ADSL(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_ADSL, NMSettingAdsl))
+#define NM_SETTING_ADSL_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_ADSL, NMSettingAdslClass))
+#define NM_IS_SETTING_ADSL(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_ADSL))
+#define NM_IS_SETTING_ADSL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_ADSL))
+#define NM_SETTING_ADSL_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_ADSL, NMSettingAdslClass))
+
+#define NM_SETTING_ADSL_SETTING_NAME "adsl"
+
+#define NM_SETTING_ADSL_USERNAME       "username"
+#define NM_SETTING_ADSL_PASSWORD       "password"
+#define NM_SETTING_ADSL_PASSWORD_FLAGS "password-flags"
+#define NM_SETTING_ADSL_PROTOCOL       "protocol"
+#define NM_SETTING_ADSL_ENCAPSULATION  "encapsulation"
+#define NM_SETTING_ADSL_VPI            "vpi"
+#define NM_SETTING_ADSL_VCI            "vci"
+
+#define NM_SETTING_ADSL_PROTOCOL_PPPOA  "pppoa"
+#define NM_SETTING_ADSL_PROTOCOL_PPPOE  "pppoe"
+#define NM_SETTING_ADSL_PROTOCOL_IPOATM "ipoatm"
+
+#define NM_SETTING_ADSL_ENCAPSULATION_VCMUX "vcmux"
+#define NM_SETTING_ADSL_ENCAPSULATION_LLC   "llc"
+
+typedef struct _NMSettingAdslClass NMSettingAdslClass;
+
+GType nm_setting_adsl_get_type(void);
+
+NMSetting *          nm_setting_adsl_new(void);
+const char *         nm_setting_adsl_get_username(NMSettingAdsl *setting);
+const char *         nm_setting_adsl_get_password(NMSettingAdsl *setting);
+const char *         nm_setting_adsl_get_protocol(NMSettingAdsl *setting);
+const char *         nm_setting_adsl_get_encapsulation(NMSettingAdsl *setting);
+guint32              nm_setting_adsl_get_vpi(NMSettingAdsl *setting);
+guint32              nm_setting_adsl_get_vci(NMSettingAdsl *setting);
+NMSettingSecretFlags nm_setting_adsl_get_password_flags(NMSettingAdsl *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_ADSL_H__ */
diff --git a/src/libnm-core-public/nm-setting-bluetooth.h b/src/libnm-core-public/nm-setting-bluetooth.h
new file mode 100644
index 00000000..69f921ee
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-bluetooth.h
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2009 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_BLUETOOTH_H__
+#define __NM_SETTING_BLUETOOTH_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_BLUETOOTH (nm_setting_bluetooth_get_type())
+#define NM_SETTING_BLUETOOTH(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_BLUETOOTH, NMSettingBluetooth))
+#define NM_SETTING_BLUETOOTH_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_BLUETOOTH, NMSettingBluetoothClass))
+#define NM_IS_SETTING_BLUETOOTH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_BLUETOOTH))
+#define NM_IS_SETTING_BLUETOOTH_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_BLUETOOTH))
+#define NM_SETTING_BLUETOOTH_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_BLUETOOTH, NMSettingBluetoothClass))
+
+#define NM_SETTING_BLUETOOTH_SETTING_NAME "bluetooth"
+
+#define NM_SETTING_BLUETOOTH_BDADDR "bdaddr"
+#define NM_SETTING_BLUETOOTH_TYPE   "type"
+
+/**
+ * NM_SETTING_BLUETOOTH_TYPE_DUN:
+ *
+ * Connection type describing a connection to devices that support the Bluetooth
+ * DUN profile.
+ */
+#define NM_SETTING_BLUETOOTH_TYPE_DUN "dun"
+
+/**
+ * NM_SETTING_BLUETOOTH_TYPE_PANU:
+ *
+ * Connection type describing PANU connection to a Bluetooth NAP (Network
+ * Access Point).
+ */
+#define NM_SETTING_BLUETOOTH_TYPE_PANU "panu"
+
+/**
+ * NM_SETTING_BLUETOOTH_TYPE_NAP:
+ *
+ * Connection type describing a Bluetooth NAP (Network Access Point),
+ * which accepts PANU clients.
+ */
+#define NM_SETTING_BLUETOOTH_TYPE_NAP "nap"
+
+typedef struct _NMSettingBluetoothClass NMSettingBluetoothClass;
+
+GType nm_setting_bluetooth_get_type(void);
+
+NMSetting * nm_setting_bluetooth_new(void);
+const char *nm_setting_bluetooth_get_bdaddr(NMSettingBluetooth *setting);
+const char *nm_setting_bluetooth_get_connection_type(NMSettingBluetooth *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_BLUETOOTH_H__ */
diff --git a/src/libnm-core-public/nm-setting-bond.h b/src/libnm-core-public/nm-setting-bond.h
new file mode 100644
index 00000000..c869e4c8
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-bond.h
@@ -0,0 +1,86 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2011 - 2013 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_BOND_H__
+#define __NM_SETTING_BOND_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_BOND (nm_setting_bond_get_type())
+#define NM_SETTING_BOND(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_BOND, NMSettingBond))
+#define NM_SETTING_BOND_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_BOND, NMSettingBondClass))
+#define NM_IS_SETTING_BOND(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_BOND))
+#define NM_IS_SETTING_BOND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_BOND))
+#define NM_SETTING_BOND_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_BOND, NMSettingBondClass))
+
+#define NM_SETTING_BOND_SETTING_NAME "bond"
+
+#define NM_SETTING_BOND_OPTIONS "options"
+
+/* Valid options for the 'options' property */
+#define NM_SETTING_BOND_OPTION_MODE              "mode"
+#define NM_SETTING_BOND_OPTION_MIIMON            "miimon"
+#define NM_SETTING_BOND_OPTION_DOWNDELAY         "downdelay"
+#define NM_SETTING_BOND_OPTION_UPDELAY           "updelay"
+#define NM_SETTING_BOND_OPTION_ARP_INTERVAL      "arp_interval"
+#define NM_SETTING_BOND_OPTION_ARP_IP_TARGET     "arp_ip_target"
+#define NM_SETTING_BOND_OPTION_ARP_VALIDATE      "arp_validate"
+#define NM_SETTING_BOND_OPTION_PRIMARY           "primary"
+#define NM_SETTING_BOND_OPTION_PRIMARY_RESELECT  "primary_reselect"
+#define NM_SETTING_BOND_OPTION_FAIL_OVER_MAC     "fail_over_mac"
+#define NM_SETTING_BOND_OPTION_USE_CARRIER       "use_carrier"
+#define NM_SETTING_BOND_OPTION_AD_SELECT         "ad_select"
+#define NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY  "xmit_hash_policy"
+#define NM_SETTING_BOND_OPTION_RESEND_IGMP       "resend_igmp"
+#define NM_SETTING_BOND_OPTION_LACP_RATE         "lacp_rate"
+#define NM_SETTING_BOND_OPTION_ACTIVE_SLAVE      "active_slave"
+#define NM_SETTING_BOND_OPTION_AD_ACTOR_SYS_PRIO "ad_actor_sys_prio"
+#define NM_SETTING_BOND_OPTION_AD_ACTOR_SYSTEM   "ad_actor_system"
+#define NM_SETTING_BOND_OPTION_AD_USER_PORT_KEY  "ad_user_port_key"
+#define NM_SETTING_BOND_OPTION_ALL_SLAVES_ACTIVE "all_slaves_active"
+#define NM_SETTING_BOND_OPTION_ARP_ALL_TARGETS   "arp_all_targets"
+#define NM_SETTING_BOND_OPTION_MIN_LINKS         "min_links"
+#define NM_SETTING_BOND_OPTION_NUM_GRAT_ARP      "num_grat_arp"
+#define NM_SETTING_BOND_OPTION_NUM_UNSOL_NA      "num_unsol_na"
+#define NM_SETTING_BOND_OPTION_PACKETS_PER_SLAVE "packets_per_slave"
+#define NM_SETTING_BOND_OPTION_TLB_DYNAMIC_LB    "tlb_dynamic_lb"
+#define NM_SETTING_BOND_OPTION_LP_INTERVAL       "lp_interval"
+#define NM_SETTING_BOND_OPTION_PEER_NOTIF_DELAY  "peer_notif_delay"
+
+typedef struct _NMSettingBondClass NMSettingBondClass;
+
+GType nm_setting_bond_get_type(void);
+
+NMSetting * nm_setting_bond_new(void);
+guint32     nm_setting_bond_get_num_options(NMSettingBond *setting);
+gboolean    nm_setting_bond_get_option(NMSettingBond *setting,
+                                       guint32        idx,
+                                       const char **  out_name,
+                                       const char **  out_value);
+const char *nm_setting_bond_get_option_by_name(NMSettingBond *setting, const char *name);
+gboolean    nm_setting_bond_add_option(NMSettingBond *setting, const char *name, const char *value);
+gboolean    nm_setting_bond_remove_option(NMSettingBond *setting, const char *name);
+
+gboolean nm_setting_bond_validate_option(const char *name, const char *value);
+
+const char **nm_setting_bond_get_valid_options(NMSettingBond *setting);
+
+const char *nm_setting_bond_get_option_default(NMSettingBond *setting, const char *name);
+
+NM_AVAILABLE_IN_1_24
+const char *nm_setting_bond_get_option_normalized(NMSettingBond *setting, const char *name);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_BOND_H__ */
diff --git a/src/libnm-core-public/nm-setting-bridge-port.h b/src/libnm-core-public/nm-setting-bridge-port.h
new file mode 100644
index 00000000..8e5c2b4a
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-bridge-port.h
@@ -0,0 +1,66 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2012 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_BRIDGE_PORT_H__
+#define __NM_SETTING_BRIDGE_PORT_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+#include "nm-setting-bridge.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_BRIDGE_PORT (nm_setting_bridge_port_get_type())
+#define NM_SETTING_BRIDGE_PORT(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_BRIDGE_PORT, NMSettingBridgePort))
+#define NM_SETTING_BRIDGE_PORT_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_BRIDGE_PORT, NMSettingBridgePortClass))
+#define NM_IS_SETTING_BRIDGE_PORT(obj) \
+    (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_BRIDGE_PORT))
+#define NM_IS_SETTING_BRIDGE_PORT_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_BRIDGE_PORT))
+#define NM_SETTING_BRIDGE_PORT_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_BRIDGE_PORT, NMSettingBridgePortClass))
+
+#define NM_SETTING_BRIDGE_PORT_SETTING_NAME "bridge-port"
+
+#define NM_SETTING_BRIDGE_PORT_PRIORITY     "priority"
+#define NM_SETTING_BRIDGE_PORT_PATH_COST    "path-cost"
+#define NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE "hairpin-mode"
+#define NM_SETTING_BRIDGE_PORT_VLANS        "vlans"
+
+typedef struct _NMSettingBridgePortClass NMSettingBridgePortClass;
+
+GType nm_setting_bridge_port_get_type(void);
+
+NMSetting *nm_setting_bridge_port_new(void);
+
+guint16 nm_setting_bridge_port_get_priority(NMSettingBridgePort *setting);
+
+guint16 nm_setting_bridge_port_get_path_cost(NMSettingBridgePort *setting);
+
+gboolean nm_setting_bridge_port_get_hairpin_mode(NMSettingBridgePort *setting);
+
+NM_AVAILABLE_IN_1_18
+void nm_setting_bridge_port_add_vlan(NMSettingBridgePort *setting, NMBridgeVlan *vlan);
+NM_AVAILABLE_IN_1_18
+guint nm_setting_bridge_port_get_num_vlans(NMSettingBridgePort *setting);
+NM_AVAILABLE_IN_1_18
+NMBridgeVlan *nm_setting_bridge_port_get_vlan(NMSettingBridgePort *setting, guint idx);
+NM_AVAILABLE_IN_1_18
+void nm_setting_bridge_port_remove_vlan(NMSettingBridgePort *setting, guint idx);
+NM_AVAILABLE_IN_1_18
+gboolean nm_setting_bridge_port_remove_vlan_by_vid(NMSettingBridgePort *setting,
+                                                   guint16              vid_start,
+                                                   guint16              vid_end);
+NM_AVAILABLE_IN_1_18
+void nm_setting_bridge_port_clear_vlans(NMSettingBridgePort *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_BRIDGE_PORT_H__ */
diff --git a/src/libnm-core-public/nm-setting-bridge.h b/src/libnm-core-public/nm-setting-bridge.h
new file mode 100644
index 00000000..cda18612
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-bridge.h
@@ -0,0 +1,183 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2011 - 2015 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_BRIDGE_H__
+#define __NM_SETTING_BRIDGE_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_BRIDGE (nm_setting_bridge_get_type())
+#define NM_SETTING_BRIDGE(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_BRIDGE, NMSettingBridge))
+#define NM_SETTING_BRIDGE_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_BRIDGE, NMSettingBridgeClass))
+#define NM_IS_SETTING_BRIDGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_BRIDGE))
+#define NM_IS_SETTING_BRIDGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_BRIDGE))
+#define NM_SETTING_BRIDGE_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_BRIDGE, NMSettingBridgeClass))
+
+#define NM_SETTING_BRIDGE_SETTING_NAME "bridge"
+
+#define NM_SETTING_BRIDGE_MAC_ADDRESS                       "mac-address"
+#define NM_SETTING_BRIDGE_STP                               "stp"
+#define NM_SETTING_BRIDGE_PRIORITY                          "priority"
+#define NM_SETTING_BRIDGE_FORWARD_DELAY                     "forward-delay"
+#define NM_SETTING_BRIDGE_HELLO_TIME                        "hello-time"
+#define NM_SETTING_BRIDGE_MAX_AGE                           "max-age"
+#define NM_SETTING_BRIDGE_AGEING_TIME                       "ageing-time"
+#define NM_SETTING_BRIDGE_GROUP_FORWARD_MASK                "group-forward-mask"
+#define NM_SETTING_BRIDGE_MULTICAST_HASH_MAX                "multicast-hash-max"
+#define NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT       "multicast-last-member-count"
+#define NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL    "multicast-last-member-interval"
+#define NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL     "multicast-membership-interval"
+#define NM_SETTING_BRIDGE_MULTICAST_SNOOPING                "multicast-snooping"
+#define NM_SETTING_BRIDGE_MULTICAST_ROUTER                  "multicast-router"
+#define NM_SETTING_BRIDGE_MULTICAST_QUERIER                 "multicast-querier"
+#define NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL        "multicast-querier-interval"
+#define NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL          "multicast-query-interval"
+#define NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL "multicast-query-response-interval"
+#define NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR        "multicast-query-use-ifaddr"
+#define NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT     "multicast-startup-query-count"
+#define NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL  "multicast-startup-query-interval"
+#define NM_SETTING_BRIDGE_VLAN_FILTERING                    "vlan-filtering"
+#define NM_SETTING_BRIDGE_VLAN_DEFAULT_PVID                 "vlan-default-pvid"
+#define NM_SETTING_BRIDGE_VLANS                             "vlans"
+#define NM_SETTING_BRIDGE_GROUP_ADDRESS                     "group-address"
+#define NM_SETTING_BRIDGE_VLAN_PROTOCOL                     "vlan-protocol"
+#define NM_SETTING_BRIDGE_VLAN_STATS_ENABLED                "vlan-stats-enabled"
+
+#define NM_BRIDGE_VLAN_VID_MIN 1
+#define NM_BRIDGE_VLAN_VID_MAX 4094
+
+typedef struct _NMSettingBridgeClass NMSettingBridgeClass;
+
+typedef struct _NMBridgeVlan NMBridgeVlan;
+
+GType nm_setting_bridge_get_type(void);
+
+NMSetting *nm_setting_bridge_new(void);
+
+const char *nm_setting_bridge_get_mac_address(NMSettingBridge *setting);
+
+gboolean nm_setting_bridge_get_stp(NMSettingBridge *setting);
+
+guint16 nm_setting_bridge_get_priority(NMSettingBridge *setting);
+
+guint16 nm_setting_bridge_get_forward_delay(NMSettingBridge *setting);
+
+guint16 nm_setting_bridge_get_hello_time(NMSettingBridge *setting);
+
+guint16 nm_setting_bridge_get_max_age(NMSettingBridge *setting);
+
+guint32 nm_setting_bridge_get_ageing_time(NMSettingBridge *setting);
+NM_AVAILABLE_IN_1_10
+guint16 nm_setting_bridge_get_group_forward_mask(NMSettingBridge *setting);
+
+gboolean nm_setting_bridge_get_multicast_snooping(NMSettingBridge *setting);
+NM_AVAILABLE_IN_1_18
+gboolean nm_setting_bridge_get_vlan_filtering(NMSettingBridge *setting);
+NM_AVAILABLE_IN_1_18
+guint16 nm_setting_bridge_get_vlan_default_pvid(NMSettingBridge *setting);
+NM_AVAILABLE_IN_1_18
+void nm_setting_bridge_add_vlan(NMSettingBridge *setting, NMBridgeVlan *vlan);
+NM_AVAILABLE_IN_1_18
+guint nm_setting_bridge_get_num_vlans(NMSettingBridge *setting);
+NM_AVAILABLE_IN_1_18
+NMBridgeVlan *nm_setting_bridge_get_vlan(NMSettingBridge *setting, guint idx);
+NM_AVAILABLE_IN_1_18
+void nm_setting_bridge_remove_vlan(NMSettingBridge *setting, guint idx);
+NM_AVAILABLE_IN_1_18
+gboolean
+nm_setting_bridge_remove_vlan_by_vid(NMSettingBridge *setting, guint16 vid_start, guint16 vid_end);
+NM_AVAILABLE_IN_1_18
+void nm_setting_bridge_clear_vlans(NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_18
+GType nm_bridge_vlan_get_type(void);
+NM_AVAILABLE_IN_1_18
+NMBridgeVlan *nm_bridge_vlan_new(guint16 vid_start, guint16 vid_end);
+NM_AVAILABLE_IN_1_18
+NMBridgeVlan *nm_bridge_vlan_ref(NMBridgeVlan *vlan);
+NM_AVAILABLE_IN_1_18
+void nm_bridge_vlan_unref(NMBridgeVlan *vlan);
+NM_AVAILABLE_IN_1_18
+NMBridgeVlan *nm_bridge_vlan_new_clone(const NMBridgeVlan *vlan);
+NM_AVAILABLE_IN_1_18
+int nm_bridge_vlan_cmp(const NMBridgeVlan *a, const NMBridgeVlan *b);
+NM_AVAILABLE_IN_1_18
+void nm_bridge_vlan_seal(NMBridgeVlan *vlan);
+NM_AVAILABLE_IN_1_18
+gboolean nm_bridge_vlan_is_sealed(const NMBridgeVlan *vlan);
+NM_AVAILABLE_IN_1_18
+void nm_bridge_vlan_set_untagged(NMBridgeVlan *vlan, gboolean value);
+NM_AVAILABLE_IN_1_18
+void nm_bridge_vlan_set_pvid(NMBridgeVlan *vlan, gboolean value);
+NM_AVAILABLE_IN_1_18
+gboolean
+nm_bridge_vlan_get_vid_range(const NMBridgeVlan *vlan, guint16 *vid_start, guint16 *vid_end);
+NM_AVAILABLE_IN_1_18
+gboolean nm_bridge_vlan_is_untagged(const NMBridgeVlan *vlan);
+NM_AVAILABLE_IN_1_18
+gboolean nm_bridge_vlan_is_pvid(const NMBridgeVlan *vlan);
+
+NM_AVAILABLE_IN_1_18
+char *nm_bridge_vlan_to_str(const NMBridgeVlan *vlan, GError **error);
+NM_AVAILABLE_IN_1_18
+NMBridgeVlan *nm_bridge_vlan_from_str(const char *str, GError **error);
+
+NM_AVAILABLE_IN_1_24
+const char *nm_setting_bridge_get_group_address(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_24
+const char *nm_setting_bridge_get_vlan_protocol(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_24
+gboolean nm_setting_bridge_get_vlan_stats_enabled(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_24
+const char *nm_setting_bridge_get_multicast_router(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_24
+gboolean nm_setting_bridge_get_multicast_query_use_ifaddr(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_24
+gboolean nm_setting_bridge_get_multicast_querier(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_26
+guint32 nm_setting_bridge_get_multicast_hash_max(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_26
+guint32 nm_setting_bridge_get_multicast_last_member_count(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_26
+guint64 nm_setting_bridge_get_multicast_last_member_interval(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_26
+guint64 nm_setting_bridge_get_multicast_membership_interval(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_26
+guint64 nm_setting_bridge_get_multicast_querier_interval(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_26
+guint64 nm_setting_bridge_get_multicast_query_interval(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_26
+guint64 nm_setting_bridge_get_multicast_query_response_interval(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_26
+guint32 nm_setting_bridge_get_multicast_startup_query_count(const NMSettingBridge *setting);
+
+NM_AVAILABLE_IN_1_26
+guint64 nm_setting_bridge_get_multicast_startup_query_interval(const NMSettingBridge *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_BRIDGE_H__ */
diff --git a/src/libnm-core-public/nm-setting-cdma.h b/src/libnm-core-public/nm-setting-cdma.h
new file mode 100644
index 00000000..9b72a839
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-cdma.h
@@ -0,0 +1,51 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_CDMA_H__
+#define __NM_SETTING_CDMA_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_CDMA (nm_setting_cdma_get_type())
+#define NM_SETTING_CDMA(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_CDMA, NMSettingCdma))
+#define NM_SETTING_CDMA_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_CDMA, NMSettingCdmaClass))
+#define NM_IS_SETTING_CDMA(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_CDMA))
+#define NM_IS_SETTING_CDMA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_CDMA))
+#define NM_SETTING_CDMA_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_CDMA, NMSettingCdmaClass))
+
+#define NM_SETTING_CDMA_SETTING_NAME "cdma"
+
+#define NM_SETTING_CDMA_NUMBER         "number"
+#define NM_SETTING_CDMA_USERNAME       "username"
+#define NM_SETTING_CDMA_PASSWORD       "password"
+#define NM_SETTING_CDMA_PASSWORD_FLAGS "password-flags"
+#define NM_SETTING_CDMA_MTU            "mtu"
+
+typedef struct _NMSettingCdmaClass NMSettingCdmaClass;
+
+GType nm_setting_cdma_get_type(void);
+
+NMSetting *          nm_setting_cdma_new(void);
+const char *         nm_setting_cdma_get_number(NMSettingCdma *setting);
+const char *         nm_setting_cdma_get_username(NMSettingCdma *setting);
+const char *         nm_setting_cdma_get_password(NMSettingCdma *setting);
+NMSettingSecretFlags nm_setting_cdma_get_password_flags(NMSettingCdma *setting);
+
+NM_AVAILABLE_IN_1_8
+guint32 nm_setting_cdma_get_mtu(NMSettingCdma *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_CDMA_H__ */
diff --git a/src/libnm-core-public/nm-setting-connection.h b/src/libnm-core-public/nm-setting-connection.h
new file mode 100644
index 00000000..3b4da44a
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-connection.h
@@ -0,0 +1,205 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2014 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_CONNECTION_H__
+#define __NM_SETTING_CONNECTION_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_CONNECTION (nm_setting_connection_get_type())
+#define NM_SETTING_CONNECTION(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_CONNECTION, NMSettingConnection))
+#define NM_SETTING_CONNECTION_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_CONNECTION, NMSettingConnectionClass))
+#define NM_IS_SETTING_CONNECTION(obj) \
+    (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_CONNECTION))
+#define NM_IS_SETTING_CONNECTION_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_CONNECTION))
+#define NM_SETTING_CONNECTION_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_CONNECTION, NMSettingConnectionClass))
+
+#define NM_SETTING_CONNECTION_SETTING_NAME "connection"
+
+#define NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN     -999
+#define NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX     999
+#define NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT 0
+
+#define NM_SETTING_CONNECTION_ID                   "id"
+#define NM_SETTING_CONNECTION_UUID                 "uuid"
+#define NM_SETTING_CONNECTION_STABLE_ID            "stable-id"
+#define NM_SETTING_CONNECTION_INTERFACE_NAME       "interface-name"
+#define NM_SETTING_CONNECTION_TYPE                 "type"
+#define NM_SETTING_CONNECTION_AUTOCONNECT          "autoconnect"
+#define NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY "autoconnect-priority"
+#define NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES  "autoconnect-retries"
+#define NM_SETTING_CONNECTION_MULTI_CONNECT        "multi-connect"
+#define NM_SETTING_CONNECTION_TIMESTAMP            "timestamp"
+#define NM_SETTING_CONNECTION_READ_ONLY            "read-only"
+#define NM_SETTING_CONNECTION_PERMISSIONS          "permissions"
+#define NM_SETTING_CONNECTION_ZONE                 "zone"
+#define NM_SETTING_CONNECTION_MASTER               "master"
+#define NM_SETTING_CONNECTION_SLAVE_TYPE           "slave-type"
+#define NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES   "autoconnect-slaves"
+#define NM_SETTING_CONNECTION_SECONDARIES          "secondaries"
+#define NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT "gateway-ping-timeout"
+#define NM_SETTING_CONNECTION_METERED              "metered"
+#define NM_SETTING_CONNECTION_LLDP                 "lldp"
+#define NM_SETTING_CONNECTION_AUTH_RETRIES         "auth-retries"
+#define NM_SETTING_CONNECTION_MDNS                 "mdns"
+#define NM_SETTING_CONNECTION_LLMNR                "llmnr"
+#define NM_SETTING_CONNECTION_WAIT_DEVICE_TIMEOUT  "wait-device-timeout"
+#define NM_SETTING_CONNECTION_MUD_URL              "mud-url"
+
+/* Types for property values */
+/**
+ * NMSettingConnectionAutoconnectSlaves:
+ * @NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_DEFAULT: default value
+ * @NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_NO: slaves are not brought up when
+ *   master is activated
+ * @NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_YES: slaves are brought up when
+ *   master is activated
+ *
+ * #NMSettingConnectionAutoconnectSlaves values indicate whether slave connections
+ * should be activated when master is activated.
+ */
+typedef enum {
+    NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_DEFAULT = -1,
+    NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_NO      = 0,
+    NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_YES     = 1,
+} NMSettingConnectionAutoconnectSlaves;
+
+/**
+ * NMSettingConnectionLldp:
+ * @NM_SETTING_CONNECTION_LLDP_DEFAULT: default value
+ * @NM_SETTING_CONNECTION_LLDP_DISABLE: disable LLDP
+ * @NM_SETTING_CONNECTION_LLDP_ENABLE_RX: enable reception of LLDP frames
+ *
+ * #NMSettingConnectionLldp values indicate whether LLDP should be enabled.
+ */
+typedef enum {
+    NM_SETTING_CONNECTION_LLDP_DEFAULT   = -1,
+    NM_SETTING_CONNECTION_LLDP_DISABLE   = 0,
+    NM_SETTING_CONNECTION_LLDP_ENABLE_RX = 1,
+} NMSettingConnectionLldp;
+
+/**
+ * NMSettingConnectionMdns:
+ * @NM_SETTING_CONNECTION_MDNS_DEFAULT: default value
+ * @NM_SETTING_CONNECTION_MDNS_NO: disable mDNS
+ * @NM_SETTING_CONNECTION_MDNS_RESOLVE: support only resolving, do not register hostname
+ * @NM_SETTING_CONNECTION_MDNS_YES: enable mDNS
+ *
+ * #NMSettingConnectionMdns values indicate whether mDNS should be enabled.
+ *
+ * Since: 1.12
+ */
+typedef enum {
+    NM_SETTING_CONNECTION_MDNS_DEFAULT = -1,
+    NM_SETTING_CONNECTION_MDNS_NO      = 0,
+    NM_SETTING_CONNECTION_MDNS_RESOLVE = 1,
+    NM_SETTING_CONNECTION_MDNS_YES     = 2,
+} NMSettingConnectionMdns;
+
+/**
+ * NMSettingConnectionLlmnr:
+ * @NM_SETTING_CONNECTION_LLMNR_DEFAULT: default value
+ * @NM_SETTING_CONNECTION_LLMNR_NO: disable LLMNR
+ * @NM_SETTING_CONNECTION_LLMNR_RESOLVE: support only resolving, do not register hostname
+ * @NM_SETTING_CONNECTION_LLMNR_YES: enable LLMNR
+ *
+ * #NMSettingConnectionLlmnr values indicate whether LLMNR should be enabled.
+ *
+ * Since: 1.14
+ */
+typedef enum {
+    NM_SETTING_CONNECTION_LLMNR_DEFAULT = -1,
+    NM_SETTING_CONNECTION_LLMNR_NO      = 0,
+    NM_SETTING_CONNECTION_LLMNR_RESOLVE = 1,
+    NM_SETTING_CONNECTION_LLMNR_YES     = 2,
+} NMSettingConnectionLlmnr;
+
+typedef struct _NMSettingConnectionClass NMSettingConnectionClass;
+
+GType nm_setting_connection_get_type(void);
+
+NMSetting * nm_setting_connection_new(void);
+const char *nm_setting_connection_get_id(NMSettingConnection *setting);
+const char *nm_setting_connection_get_uuid(NMSettingConnection *setting);
+NM_AVAILABLE_IN_1_4
+const char *nm_setting_connection_get_stable_id(NMSettingConnection *setting);
+const char *nm_setting_connection_get_interface_name(NMSettingConnection *setting);
+const char *nm_setting_connection_get_connection_type(NMSettingConnection *setting);
+gboolean    nm_setting_connection_get_autoconnect(NMSettingConnection *setting);
+int         nm_setting_connection_get_autoconnect_priority(NMSettingConnection *setting);
+NM_AVAILABLE_IN_1_6
+int nm_setting_connection_get_autoconnect_retries(NMSettingConnection *setting);
+NM_AVAILABLE_IN_1_14
+NMConnectionMultiConnect nm_setting_connection_get_multi_connect(NMSettingConnection *setting);
+guint64                  nm_setting_connection_get_timestamp(NMSettingConnection *setting);
+gboolean                 nm_setting_connection_get_read_only(NMSettingConnection *setting);
+
+guint32     nm_setting_connection_get_num_permissions(NMSettingConnection *setting);
+gboolean    nm_setting_connection_get_permission(NMSettingConnection *setting,
+                                                 guint32              idx,
+                                                 const char **        out_ptype,
+                                                 const char **        out_pitem,
+                                                 const char **        out_detail);
+const char *nm_setting_connection_get_zone(NMSettingConnection *setting);
+gboolean    nm_setting_connection_permissions_user_allowed(NMSettingConnection *setting,
+                                                           const char *         uname);
+gboolean    nm_setting_connection_add_permission(NMSettingConnection *setting,
+                                                 const char *         ptype,
+                                                 const char *         pitem,
+                                                 const char *         detail);
+void        nm_setting_connection_remove_permission(NMSettingConnection *setting, guint32 idx);
+gboolean    nm_setting_connection_remove_permission_by_value(NMSettingConnection *setting,
+                                                             const char *         ptype,
+                                                             const char *         pitem,
+                                                             const char *         detail);
+
+const char *nm_setting_connection_get_master(NMSettingConnection *setting);
+gboolean    nm_setting_connection_is_slave_type(NMSettingConnection *setting, const char *type);
+const char *nm_setting_connection_get_slave_type(NMSettingConnection *setting);
+NM_AVAILABLE_IN_1_2
+NMSettingConnectionAutoconnectSlaves
+nm_setting_connection_get_autoconnect_slaves(NMSettingConnection *setting);
+
+guint32     nm_setting_connection_get_num_secondaries(NMSettingConnection *setting);
+const char *nm_setting_connection_get_secondary(NMSettingConnection *setting, guint32 idx);
+gboolean    nm_setting_connection_add_secondary(NMSettingConnection *setting, const char *sec_uuid);
+void        nm_setting_connection_remove_secondary(NMSettingConnection *setting, guint32 idx);
+gboolean    nm_setting_connection_remove_secondary_by_value(NMSettingConnection *setting,
+                                                            const char *         sec_uuid);
+
+guint32 nm_setting_connection_get_gateway_ping_timeout(NMSettingConnection *setting);
+NM_AVAILABLE_IN_1_2
+NMMetered nm_setting_connection_get_metered(NMSettingConnection *setting);
+NM_AVAILABLE_IN_1_2
+NMSettingConnectionLldp nm_setting_connection_get_lldp(NMSettingConnection *setting);
+
+NM_AVAILABLE_IN_1_10
+int nm_setting_connection_get_auth_retries(NMSettingConnection *setting);
+
+NM_AVAILABLE_IN_1_12
+NMSettingConnectionMdns nm_setting_connection_get_mdns(NMSettingConnection *setting);
+NM_AVAILABLE_IN_1_14
+NMSettingConnectionLlmnr nm_setting_connection_get_llmnr(NMSettingConnection *setting);
+
+NM_AVAILABLE_IN_1_20
+gint32 nm_setting_connection_get_wait_device_timeout(NMSettingConnection *setting);
+
+NM_AVAILABLE_IN_1_26
+const char *nm_setting_connection_get_mud_url(NMSettingConnection *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_CONNECTION_H__ */
diff --git a/src/libnm-core-public/nm-setting-dcb.h b/src/libnm-core-public/nm-setting-dcb.h
new file mode 100644
index 00000000..b342c465
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-dcb.h
@@ -0,0 +1,132 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_DCB_H__
+#define __NM_SETTING_DCB_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_DCB (nm_setting_dcb_get_type())
+#define NM_SETTING_DCB(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_DCB, NMSettingDcb))
+#define NM_SETTING_DCB_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_DCB, NMSettingDcbClass))
+#define NM_IS_SETTING_DCB(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_DCB))
+#define NM_IS_SETTING_DCB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_DCB))
+#define NM_SETTING_DCB_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_DCB, NMSettingDcbClass))
+
+#define NM_SETTING_DCB_SETTING_NAME "dcb"
+
+/**
+ * NMSettingDcbFlags:
+ * @NM_SETTING_DCB_FLAG_NONE: no flag
+ * @NM_SETTING_DCB_FLAG_ENABLE: the feature is enabled
+ * @NM_SETTING_DCB_FLAG_ADVERTISE: the feature is advertised
+ * @NM_SETTING_DCB_FLAG_WILLING: the feature is willing to change based on
+ * peer configuration advertisements
+ *
+ * DCB feature flags.
+ **/
+typedef enum { /*< flags >*/
+               NM_SETTING_DCB_FLAG_NONE      = 0x00000000,
+               NM_SETTING_DCB_FLAG_ENABLE    = 0x00000001,
+               NM_SETTING_DCB_FLAG_ADVERTISE = 0x00000002,
+               NM_SETTING_DCB_FLAG_WILLING   = 0x00000004
+} NMSettingDcbFlags;
+
+/**
+ * NM_SETTING_DCB_FCOE_MODE_FABRIC:
+ *
+ * Indicates that the FCoE controller should use "fabric" mode (default)
+ */
+#define NM_SETTING_DCB_FCOE_MODE_FABRIC "fabric"
+
+/**
+ * NM_SETTING_DCB_FCOE_MODE_VN2VN:
+ *
+ * Indicates that the FCoE controller should use "VN2VN" mode.
+ */
+#define NM_SETTING_DCB_FCOE_MODE_VN2VN "vn2vn"
+
+/* Properties */
+#define NM_SETTING_DCB_APP_FCOE_FLAGS    "app-fcoe-flags"
+#define NM_SETTING_DCB_APP_FCOE_PRIORITY "app-fcoe-priority"
+#define NM_SETTING_DCB_APP_FCOE_MODE     "app-fcoe-mode"
+
+#define NM_SETTING_DCB_APP_ISCSI_FLAGS    "app-iscsi-flags"
+#define NM_SETTING_DCB_APP_ISCSI_PRIORITY "app-iscsi-priority"
+
+#define NM_SETTING_DCB_APP_FIP_FLAGS    "app-fip-flags"
+#define NM_SETTING_DCB_APP_FIP_PRIORITY "app-fip-priority"
+
+#define NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS "priority-flow-control-flags"
+#define NM_SETTING_DCB_PRIORITY_FLOW_CONTROL       "priority-flow-control"
+
+#define NM_SETTING_DCB_PRIORITY_GROUP_FLAGS      "priority-group-flags"
+#define NM_SETTING_DCB_PRIORITY_GROUP_ID         "priority-group-id"
+#define NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH  "priority-group-bandwidth"
+#define NM_SETTING_DCB_PRIORITY_BANDWIDTH        "priority-bandwidth"
+#define NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH "priority-strict-bandwidth"
+#define NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS    "priority-traffic-class"
+
+typedef struct _NMSettingDcbClass NMSettingDcbClass;
+
+GType nm_setting_dcb_get_type(void);
+
+NMSetting *nm_setting_dcb_new(void);
+
+NMSettingDcbFlags nm_setting_dcb_get_app_fcoe_flags(NMSettingDcb *setting);
+int               nm_setting_dcb_get_app_fcoe_priority(NMSettingDcb *setting);
+const char *      nm_setting_dcb_get_app_fcoe_mode(NMSettingDcb *setting);
+
+NMSettingDcbFlags nm_setting_dcb_get_app_iscsi_flags(NMSettingDcb *setting);
+int               nm_setting_dcb_get_app_iscsi_priority(NMSettingDcb *setting);
+
+NMSettingDcbFlags nm_setting_dcb_get_app_fip_flags(NMSettingDcb *setting);
+int               nm_setting_dcb_get_app_fip_priority(NMSettingDcb *setting);
+
+/* Priority Flow Control */
+NMSettingDcbFlags nm_setting_dcb_get_priority_flow_control_flags(NMSettingDcb *setting);
+gboolean nm_setting_dcb_get_priority_flow_control(NMSettingDcb *setting, guint user_priority);
+void     nm_setting_dcb_set_priority_flow_control(NMSettingDcb *setting,
+                                                  guint         user_priority,
+                                                  gboolean      enabled);
+
+/* Priority Groups */
+NMSettingDcbFlags nm_setting_dcb_get_priority_group_flags(NMSettingDcb *setting);
+
+guint nm_setting_dcb_get_priority_group_id(NMSettingDcb *setting, guint user_priority);
+void
+nm_setting_dcb_set_priority_group_id(NMSettingDcb *setting, guint user_priority, guint group_id);
+
+guint nm_setting_dcb_get_priority_group_bandwidth(NMSettingDcb *setting, guint group_id);
+void  nm_setting_dcb_set_priority_group_bandwidth(NMSettingDcb *setting,
+                                                  guint         group_id,
+                                                  guint         bandwidth_percent);
+
+guint nm_setting_dcb_get_priority_bandwidth(NMSettingDcb *setting, guint user_priority);
+void  nm_setting_dcb_set_priority_bandwidth(NMSettingDcb *setting,
+                                            guint         user_priority,
+                                            guint         bandwidth_percent);
+
+gboolean nm_setting_dcb_get_priority_strict_bandwidth(NMSettingDcb *setting, guint user_priority);
+void     nm_setting_dcb_set_priority_strict_bandwidth(NMSettingDcb *setting,
+                                                      guint         user_priority,
+                                                      gboolean      strict);
+
+guint nm_setting_dcb_get_priority_traffic_class(NMSettingDcb *setting, guint user_priority);
+void  nm_setting_dcb_set_priority_traffic_class(NMSettingDcb *setting,
+                                                guint         user_priority,
+                                                guint         traffic_class);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_DCB_H__ */
diff --git a/src/libnm-core-public/nm-setting-dummy.h b/src/libnm-core-public/nm-setting-dummy.h
new file mode 100644
index 00000000..2231ea17
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-dummy.h
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2017 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_DUMMY_H__
+#define __NM_SETTING_DUMMY_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_DUMMY (nm_setting_dummy_get_type())
+#define NM_SETTING_DUMMY(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_DUMMY, NMSettingDummy))
+#define NM_SETTING_DUMMY_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_DUMMYCONFIG, NMSettingDummyClass))
+#define NM_IS_SETTING_DUMMY(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_DUMMY))
+#define NM_IS_SETTING_DUMMY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_DUMMY))
+#define NM_SETTING_DUMMY_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_DUMMY, NMSettingDummyClass))
+
+#define NM_SETTING_DUMMY_SETTING_NAME "dummy"
+
+typedef struct _NMSettingDummyClass NMSettingDummyClass;
+
+NM_AVAILABLE_IN_1_8
+GType nm_setting_dummy_get_type(void);
+NM_AVAILABLE_IN_1_8
+NMSetting *nm_setting_dummy_new(void);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_DUMMY_H__ */
diff --git a/src/libnm-core-public/nm-setting-ethtool.h b/src/libnm-core-public/nm-setting-ethtool.h
new file mode 100644
index 00000000..eab447af
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-ethtool.h
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2018 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_ETHTOOL_H__
+#define __NM_SETTING_ETHTOOL_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+NM_AVAILABLE_IN_1_20
+gboolean nm_ethtool_optname_is_feature(const char *optname);
+
+NM_AVAILABLE_IN_1_26
+gboolean nm_ethtool_optname_is_coalesce(const char *optname);
+
+NM_AVAILABLE_IN_1_26
+gboolean nm_ethtool_optname_is_ring(const char *optname);
+
+NM_AVAILABLE_IN_1_32
+gboolean nm_ethtool_optname_is_pause(const char *optname);
+
+/*****************************************************************************/
+
+#define NM_TYPE_SETTING_ETHTOOL (nm_setting_ethtool_get_type())
+#define NM_SETTING_ETHTOOL(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_ETHTOOL, NMSettingEthtool))
+#define NM_SETTING_ETHTOOL_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_ETHTOOL, NMSettingEthtoolClass))
+#define NM_IS_SETTING_ETHTOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_ETHTOOL))
+#define NM_IS_SETTING_ETHTOOL_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_ETHTOOL))
+#define NM_SETTING_ETHTOOL_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_ETHTOOL, NMSettingEthtoolClass))
+
+#define NM_SETTING_ETHTOOL_SETTING_NAME "ethtool"
+
+/*****************************************************************************/
+
+typedef struct _NMSettingEthtoolClass NMSettingEthtoolClass;
+
+NM_AVAILABLE_IN_1_14
+GType nm_setting_ethtool_get_type(void);
+
+NM_AVAILABLE_IN_1_14
+NMSetting *nm_setting_ethtool_new(void);
+
+/*****************************************************************************/
+
+NM_AVAILABLE_IN_1_20
+NM_DEPRECATED_IN_1_26
+const char **nm_setting_ethtool_get_optnames(NMSettingEthtool *setting, guint *out_length);
+
+NM_AVAILABLE_IN_1_14
+NM_DEPRECATED_IN_1_26
+NMTernary nm_setting_ethtool_get_feature(NMSettingEthtool *setting, const char *optname);
+NM_AVAILABLE_IN_1_14
+NM_DEPRECATED_IN_1_26
+void
+nm_setting_ethtool_set_feature(NMSettingEthtool *setting, const char *optname, NMTernary value);
+NM_AVAILABLE_IN_1_14
+NM_DEPRECATED_IN_1_26
+void nm_setting_ethtool_clear_features(NMSettingEthtool *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_ETHTOOL_H__ */
diff --git a/src/libnm-core-public/nm-setting-generic.h b/src/libnm-core-public/nm-setting-generic.h
new file mode 100644
index 00000000..b5346abb
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-generic.h
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2013 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_GENERIC_H__
+#define __NM_SETTING_GENERIC_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_GENERIC (nm_setting_generic_get_type())
+#define NM_SETTING_GENERIC(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_GENERIC, NMSettingGeneric))
+#define NM_SETTING_GENERIC_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_GENERIC, NMSettingGenericClass))
+#define NM_IS_SETTING_GENERIC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_GENERIC))
+#define NM_IS_SETTING_GENERIC_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_GENERIC))
+#define NM_SETTING_GENERIC_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_GENERIC, NMSettingGenericClass))
+
+#define NM_SETTING_GENERIC_SETTING_NAME "generic"
+
+typedef struct _NMSettingGenericClass NMSettingGenericClass;
+
+GType nm_setting_generic_get_type(void);
+
+NMSetting *nm_setting_generic_new(void);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_GENERIC_H__ */
diff --git a/src/libnm-core-public/nm-setting-gsm.h b/src/libnm-core-public/nm-setting-gsm.h
new file mode 100644
index 00000000..59703c3c
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-gsm.h
@@ -0,0 +1,79 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_GSM_H__
+#define __NM_SETTING_GSM_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_GSM (nm_setting_gsm_get_type())
+#define NM_SETTING_GSM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_GSM, NMSettingGsm))
+#define NM_SETTING_GSM_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_GSM, NMSettingGsmClass))
+#define NM_IS_SETTING_GSM(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_GSM))
+#define NM_IS_SETTING_GSM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_GSM))
+#define NM_SETTING_GSM_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_GSM, NMSettingGsmClass))
+
+#define NM_SETTING_GSM_SETTING_NAME "gsm"
+
+#define NM_SETTING_GSM_AUTO_CONFIG     "auto-config"
+#define NM_SETTING_GSM_USERNAME        "username"
+#define NM_SETTING_GSM_PASSWORD        "password"
+#define NM_SETTING_GSM_PASSWORD_FLAGS  "password-flags"
+#define NM_SETTING_GSM_APN             "apn"
+#define NM_SETTING_GSM_NETWORK_ID      "network-id"
+#define NM_SETTING_GSM_PIN             "pin"
+#define NM_SETTING_GSM_PIN_FLAGS       "pin-flags"
+#define NM_SETTING_GSM_HOME_ONLY       "home-only"
+#define NM_SETTING_GSM_DEVICE_ID       "device-id"
+#define NM_SETTING_GSM_SIM_ID          "sim-id"
+#define NM_SETTING_GSM_SIM_OPERATOR_ID "sim-operator-id"
+#define NM_SETTING_GSM_MTU             "mtu"
+
+/* Deprecated */
+#define NM_SETTING_GSM_NUMBER "number"
+
+typedef struct _NMSettingGsmClass NMSettingGsmClass;
+
+GType nm_setting_gsm_get_type(void);
+
+NMSetting *nm_setting_gsm_new(void);
+
+NM_AVAILABLE_IN_1_22
+gboolean nm_setting_gsm_get_auto_config(NMSettingGsm *setting);
+
+const char *nm_setting_gsm_get_username(NMSettingGsm *setting);
+const char *nm_setting_gsm_get_password(NMSettingGsm *setting);
+const char *nm_setting_gsm_get_apn(NMSettingGsm *setting);
+const char *nm_setting_gsm_get_network_id(NMSettingGsm *setting);
+const char *nm_setting_gsm_get_pin(NMSettingGsm *setting);
+gboolean    nm_setting_gsm_get_home_only(NMSettingGsm *setting);
+
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_gsm_get_device_id(NMSettingGsm *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_gsm_get_sim_id(NMSettingGsm *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_gsm_get_sim_operator_id(NMSettingGsm *setting);
+NM_AVAILABLE_IN_1_8
+guint32 nm_setting_gsm_get_mtu(NMSettingGsm *setting);
+
+NM_DEPRECATED_IN_1_16
+const char *nm_setting_gsm_get_number(NMSettingGsm *setting);
+
+NMSettingSecretFlags nm_setting_gsm_get_pin_flags(NMSettingGsm *setting);
+NMSettingSecretFlags nm_setting_gsm_get_password_flags(NMSettingGsm *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_GSM_H__ */
diff --git a/src/libnm-core-public/nm-setting-hostname.h b/src/libnm-core-public/nm-setting-hostname.h
new file mode 100644
index 00000000..02b4e373
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-hostname.h
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2020 Red Hat, Inc.
+ */
+
+#ifndef NM_SETTING_HOSTNAME_H
+#define NM_SETTING_HOSTNAME_H
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_HOSTNAME (nm_setting_hostname_get_type())
+#define NM_SETTING_HOSTNAME(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_HOSTNAME, NMSettingHostname))
+#define NM_SETTING_HOSTNAME_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_HOSTNAME, NMSettingHostnameClass))
+#define NM_IS_SETTING_HOSTNAME(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_HOSTNAME))
+#define NM_IS_SETTING_HOSTNAME_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_HOSTNAME))
+#define NM_SETTING_HOSTNAME_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_HOSTNAME, NMSettingHostnameClass))
+
+#define NM_SETTING_HOSTNAME_SETTING_NAME "hostname"
+
+#define NM_SETTING_HOSTNAME_PRIORITY          "priority"
+#define NM_SETTING_HOSTNAME_FROM_DHCP         "from-dhcp"
+#define NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP   "from-dns-lookup"
+#define NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT "only-from-default"
+
+typedef struct _NMSettingHostnameClass NMSettingHostnameClass;
+
+NM_AVAILABLE_IN_1_30
+GType nm_setting_hostname_get_type(void);
+NM_AVAILABLE_IN_1_30
+NMSetting *nm_setting_hostname_new(void);
+
+NM_AVAILABLE_IN_1_30
+int nm_setting_hostname_get_priority(NMSettingHostname *setting);
+NM_AVAILABLE_IN_1_30
+NMTernary nm_setting_hostname_get_from_dhcp(NMSettingHostname *setting);
+NM_AVAILABLE_IN_1_30
+NMTernary nm_setting_hostname_get_from_dns_lookup(NMSettingHostname *setting);
+NM_AVAILABLE_IN_1_30
+NMTernary nm_setting_hostname_get_only_from_default(NMSettingHostname *setting);
+
+G_END_DECLS
+
+#endif /* NM_SETTING_HOSTNAME_H */
diff --git a/src/libnm-core-public/nm-setting-infiniband.h b/src/libnm-core-public/nm-setting-infiniband.h
new file mode 100644
index 00000000..3d422133
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-infiniband.h
@@ -0,0 +1,52 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2011 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_INFINIBAND_H__
+#define __NM_SETTING_INFINIBAND_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_INFINIBAND (nm_setting_infiniband_get_type())
+#define NM_SETTING_INFINIBAND(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_INFINIBAND, NMSettingInfiniband))
+#define NM_SETTING_INFINIBAND_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_INFINIBAND, NMSettingInfinibandClass))
+#define NM_IS_SETTING_INFINIBAND(obj) \
+    (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_INFINIBAND))
+#define NM_IS_SETTING_INFINIBAND_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_INFINIBAND))
+#define NM_SETTING_INFINIBAND_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_INFINIBAND, NMSettingInfinibandClass))
+
+#define NM_SETTING_INFINIBAND_SETTING_NAME "infiniband"
+
+#define NM_SETTING_INFINIBAND_MAC_ADDRESS    "mac-address"
+#define NM_SETTING_INFINIBAND_MTU            "mtu"
+#define NM_SETTING_INFINIBAND_TRANSPORT_MODE "transport-mode"
+#define NM_SETTING_INFINIBAND_P_KEY          "p-key"
+#define NM_SETTING_INFINIBAND_PARENT         "parent"
+
+typedef struct _NMSettingInfinibandClass NMSettingInfinibandClass;
+
+GType nm_setting_infiniband_get_type(void);
+
+NMSetting * nm_setting_infiniband_new(void);
+const char *nm_setting_infiniband_get_mac_address(NMSettingInfiniband *setting);
+guint32     nm_setting_infiniband_get_mtu(NMSettingInfiniband *setting);
+const char *nm_setting_infiniband_get_transport_mode(NMSettingInfiniband *setting);
+int         nm_setting_infiniband_get_p_key(NMSettingInfiniband *setting);
+const char *nm_setting_infiniband_get_parent(NMSettingInfiniband *setting);
+
+const char *nm_setting_infiniband_get_virtual_interface_name(NMSettingInfiniband *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_INFINIBAND_H__ */
diff --git a/src/libnm-core-public/nm-setting-ip-config.h b/src/libnm-core-public/nm-setting-ip-config.h
new file mode 100644
index 00000000..9a745cb2
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-ip-config.h
@@ -0,0 +1,497 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2014 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef NM_SETTING_IP_CONFIG_H
+#define NM_SETTING_IP_CONFIG_H
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+#include "nm-utils.h"
+
+G_BEGIN_DECLS
+
+#define NM_IP_ADDRESS_ATTRIBUTE_LABEL "label"
+
+/**
+ * NMIPAddressCmpFlags:
+ * @NM_IP_ADDRESS_CMP_FLAGS_NONE: no flags.
+ * @NM_IP_ADDRESS_CMP_FLAGS_WITH_ATTRS: when comparing two addresses,
+ *   also consider their attributes. Warning: note that attributes are GVariants
+ *   and they don't have a total order. In other words, if the address differs only
+ *   by their attributes, the returned compare order is not total. In that case,
+ *   the return value merely indicates equality (zero) or inequality.
+ *
+ * Compare flags for nm_ip_address_cmp_full().
+ *
+ * Since: 1.22
+ */
+typedef enum { /*< flags >*/
+               NM_IP_ADDRESS_CMP_FLAGS_NONE       = 0,
+               NM_IP_ADDRESS_CMP_FLAGS_WITH_ATTRS = 0x1,
+} NMIPAddressCmpFlags;
+
+typedef struct NMIPAddress NMIPAddress;
+
+GType nm_ip_address_get_type(void);
+
+NMIPAddress *nm_ip_address_new(int family, const char *addr, guint prefix, GError **error);
+NMIPAddress *nm_ip_address_new_binary(int family, gconstpointer addr, guint prefix, GError **error);
+
+void     nm_ip_address_ref(NMIPAddress *address);
+void     nm_ip_address_unref(NMIPAddress *address);
+gboolean nm_ip_address_equal(NMIPAddress *address, NMIPAddress *other);
+NM_AVAILABLE_IN_1_22
+int
+nm_ip_address_cmp_full(const NMIPAddress *a, const NMIPAddress *b, NMIPAddressCmpFlags cmp_flags);
+
+NM_AVAILABLE_IN_1_32
+NMIPAddress *nm_ip_address_dup(NMIPAddress *address);
+
+int         nm_ip_address_get_family(NMIPAddress *address);
+const char *nm_ip_address_get_address(NMIPAddress *address);
+void        nm_ip_address_set_address(NMIPAddress *address, const char *addr);
+void        nm_ip_address_get_address_binary(NMIPAddress *address, gpointer addr);
+void        nm_ip_address_set_address_binary(NMIPAddress *address, gconstpointer addr);
+guint       nm_ip_address_get_prefix(NMIPAddress *address);
+void        nm_ip_address_set_prefix(NMIPAddress *address, guint prefix);
+
+char **   nm_ip_address_get_attribute_names(NMIPAddress *address);
+GVariant *nm_ip_address_get_attribute(NMIPAddress *address, const char *name);
+void      nm_ip_address_set_attribute(NMIPAddress *address, const char *name, GVariant *value);
+
+typedef struct NMIPRoute NMIPRoute;
+
+GType nm_ip_route_get_type(void);
+
+NMIPRoute *nm_ip_route_new(int         family,
+                           const char *dest,
+                           guint       prefix,
+                           const char *next_hop,
+                           gint64      metric,
+                           GError **   error);
+NMIPRoute *nm_ip_route_new_binary(int           family,
+                                  gconstpointer dest,
+                                  guint         prefix,
+                                  gconstpointer next_hop,
+                                  gint64        metric,
+                                  GError **     error);
+
+void     nm_ip_route_ref(NMIPRoute *route);
+void     nm_ip_route_unref(NMIPRoute *route);
+gboolean nm_ip_route_equal(NMIPRoute *route, NMIPRoute *other);
+
+enum { /*< flags >*/
+       NM_IP_ROUTE_EQUAL_CMP_FLAGS_NONE       = 0,
+       NM_IP_ROUTE_EQUAL_CMP_FLAGS_WITH_ATTRS = 0x1,
+};
+
+NM_AVAILABLE_IN_1_10
+gboolean nm_ip_route_equal_full(NMIPRoute *route, NMIPRoute *other, guint cmp_flags);
+
+NM_AVAILABLE_IN_1_32
+NMIPRoute *nm_ip_route_dup(NMIPRoute *route);
+
+int         nm_ip_route_get_family(NMIPRoute *route);
+const char *nm_ip_route_get_dest(NMIPRoute *route);
+void        nm_ip_route_set_dest(NMIPRoute *route, const char *dest);
+void        nm_ip_route_get_dest_binary(NMIPRoute *route, gpointer dest);
+void        nm_ip_route_set_dest_binary(NMIPRoute *route, gconstpointer dest);
+guint       nm_ip_route_get_prefix(NMIPRoute *route);
+void        nm_ip_route_set_prefix(NMIPRoute *route, guint prefix);
+const char *nm_ip_route_get_next_hop(NMIPRoute *route);
+void        nm_ip_route_set_next_hop(NMIPRoute *route, const char *next_hop);
+gboolean    nm_ip_route_get_next_hop_binary(NMIPRoute *route, gpointer next_hop);
+void        nm_ip_route_set_next_hop_binary(NMIPRoute *route, gconstpointer next_hop);
+gint64      nm_ip_route_get_metric(NMIPRoute *route);
+void        nm_ip_route_set_metric(NMIPRoute *route, gint64 metric);
+
+char **   nm_ip_route_get_attribute_names(NMIPRoute *route);
+GVariant *nm_ip_route_get_attribute(NMIPRoute *route, const char *name);
+void      nm_ip_route_set_attribute(NMIPRoute *route, const char *name, GVariant *value);
+NM_AVAILABLE_IN_1_8
+const NMVariantAttributeSpec *const *nm_ip_route_get_variant_attribute_spec(void);
+NM_AVAILABLE_IN_1_8
+gboolean nm_ip_route_attribute_validate(const char *name,
+                                        GVariant *  value,
+                                        int         family,
+                                        gboolean *  known,
+                                        GError **   error);
+
+#define NM_IP_ROUTE_ATTRIBUTE_CWND          "cwnd"
+#define NM_IP_ROUTE_ATTRIBUTE_FROM          "from"
+#define NM_IP_ROUTE_ATTRIBUTE_INITCWND      "initcwnd"
+#define NM_IP_ROUTE_ATTRIBUTE_INITRWND      "initrwnd"
+#define NM_IP_ROUTE_ATTRIBUTE_LOCK_CWND     "lock-cwnd"
+#define NM_IP_ROUTE_ATTRIBUTE_LOCK_INITCWND "lock-initcwnd"
+#define NM_IP_ROUTE_ATTRIBUTE_LOCK_INITRWND "lock-initrwnd"
+#define NM_IP_ROUTE_ATTRIBUTE_LOCK_MTU      "lock-mtu"
+#define NM_IP_ROUTE_ATTRIBUTE_LOCK_WINDOW   "lock-window"
+#define NM_IP_ROUTE_ATTRIBUTE_MTU           "mtu"
+#define NM_IP_ROUTE_ATTRIBUTE_ONLINK        "onlink"
+#define NM_IP_ROUTE_ATTRIBUTE_SCOPE         "scope"
+#define NM_IP_ROUTE_ATTRIBUTE_SRC           "src"
+#define NM_IP_ROUTE_ATTRIBUTE_TABLE         "table"
+#define NM_IP_ROUTE_ATTRIBUTE_TOS           "tos"
+#define NM_IP_ROUTE_ATTRIBUTE_TYPE          "type"
+#define NM_IP_ROUTE_ATTRIBUTE_WINDOW        "window"
+
+/*****************************************************************************/
+
+typedef struct NMIPRoutingRule NMIPRoutingRule;
+
+NM_AVAILABLE_IN_1_18
+GType nm_ip_routing_rule_get_type(void);
+
+NM_AVAILABLE_IN_1_18
+NMIPRoutingRule *nm_ip_routing_rule_new(int addr_family);
+
+NM_AVAILABLE_IN_1_18
+NMIPRoutingRule *nm_ip_routing_rule_new_clone(const NMIPRoutingRule *rule);
+
+NM_AVAILABLE_IN_1_18
+NMIPRoutingRule *nm_ip_routing_rule_ref(NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_unref(NMIPRoutingRule *self);
+
+NM_AVAILABLE_IN_1_18
+gboolean nm_ip_routing_rule_is_sealed(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_seal(NMIPRoutingRule *self);
+
+NM_AVAILABLE_IN_1_18
+int nm_ip_routing_rule_get_addr_family(const NMIPRoutingRule *self);
+
+NM_AVAILABLE_IN_1_18
+gboolean nm_ip_routing_rule_get_invert(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_invert(NMIPRoutingRule *self, gboolean invert);
+
+NM_AVAILABLE_IN_1_18
+gint64 nm_ip_routing_rule_get_priority(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_priority(NMIPRoutingRule *self, gint64 priority);
+
+NM_AVAILABLE_IN_1_18
+guint8 nm_ip_routing_rule_get_tos(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_tos(NMIPRoutingRule *self, guint8 tos);
+
+NM_AVAILABLE_IN_1_18
+guint8 nm_ip_routing_rule_get_ipproto(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_ipproto(NMIPRoutingRule *self, guint8 ipproto);
+
+NM_AVAILABLE_IN_1_18
+guint16 nm_ip_routing_rule_get_source_port_start(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+guint16 nm_ip_routing_rule_get_source_port_end(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_source_port(NMIPRoutingRule *self, guint16 start, guint16 end);
+
+NM_AVAILABLE_IN_1_18
+guint16 nm_ip_routing_rule_get_destination_port_start(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+guint16 nm_ip_routing_rule_get_destination_port_end(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_destination_port(NMIPRoutingRule *self, guint16 start, guint16 end);
+
+NM_AVAILABLE_IN_1_18
+guint32 nm_ip_routing_rule_get_fwmark(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+guint32 nm_ip_routing_rule_get_fwmask(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_fwmark(NMIPRoutingRule *self, guint32 fwmark, guint32 fwmask);
+
+NM_AVAILABLE_IN_1_18
+guint8 nm_ip_routing_rule_get_from_len(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+const char *nm_ip_routing_rule_get_from(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_from(NMIPRoutingRule *self, const char *from, guint8 len);
+
+NM_AVAILABLE_IN_1_18
+guint8 nm_ip_routing_rule_get_to_len(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+const char *nm_ip_routing_rule_get_to(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_to(NMIPRoutingRule *self, const char *to, guint8 len);
+
+NM_AVAILABLE_IN_1_18
+const char *nm_ip_routing_rule_get_iifname(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_iifname(NMIPRoutingRule *self, const char *iifname);
+
+NM_AVAILABLE_IN_1_18
+const char *nm_ip_routing_rule_get_oifname(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_oifname(NMIPRoutingRule *self, const char *oifname);
+
+NM_AVAILABLE_IN_1_18
+guint8 nm_ip_routing_rule_get_action(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_action(NMIPRoutingRule *self, guint8 action);
+
+NM_AVAILABLE_IN_1_18
+guint32 nm_ip_routing_rule_get_table(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_18
+void nm_ip_routing_rule_set_table(NMIPRoutingRule *self, guint32 table);
+
+NM_AVAILABLE_IN_1_20
+gint32 nm_ip_routing_rule_get_suppress_prefixlength(const NMIPRoutingRule *self);
+NM_AVAILABLE_IN_1_20
+void nm_ip_routing_rule_set_suppress_prefixlength(NMIPRoutingRule *self,
+                                                  gint32           suppress_prefixlength);
+
+NM_AVAILABLE_IN_1_32
+gboolean nm_ip_routing_rule_get_uid_range(const NMIPRoutingRule *self,
+                                          guint32 *              out_range_start,
+                                          guint32 *              out_range_end);
+NM_AVAILABLE_IN_1_32
+void nm_ip_routing_rule_set_uid_range(NMIPRoutingRule *self,
+                                      guint32          uid_range_start,
+                                      guint32          uid_range_end);
+
+NM_AVAILABLE_IN_1_18
+int nm_ip_routing_rule_cmp(const NMIPRoutingRule *rule, const NMIPRoutingRule *other);
+
+NM_AVAILABLE_IN_1_18
+gboolean nm_ip_routing_rule_validate(const NMIPRoutingRule *self, GError **error);
+
+/**
+ * NMIPRoutingRuleAsStringFlags:
+ * @NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE: no flags selected.
+ * @NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET: whether to allow parsing
+ *   IPv4 addresses.
+ * @NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6: whether to allow parsing
+ *   IPv6 addresses. If both @NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET and
+ *   @NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6 are unset, it's the same
+ *   as setting them both.
+ * @NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE: if set, ensure that the
+ *   rule verfies or fail.
+ *
+ * Since: 1.18
+ */
+typedef enum { /*< flags >*/
+               NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE = 0,
+
+               NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET  = 0x1,
+               NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6 = 0x2,
+               NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE = 0x4,
+} NMIPRoutingRuleAsStringFlags;
+
+NM_AVAILABLE_IN_1_18
+NMIPRoutingRule *nm_ip_routing_rule_from_string(const char *                 str,
+                                                NMIPRoutingRuleAsStringFlags to_string_flags,
+                                                GHashTable *                 extra_args,
+                                                GError **                    error);
+
+NM_AVAILABLE_IN_1_18
+char *nm_ip_routing_rule_to_string(const NMIPRoutingRule *      self,
+                                   NMIPRoutingRuleAsStringFlags to_string_flags,
+                                   GHashTable *                 extra_args,
+                                   GError **                    error);
+
+/*****************************************************************************/
+
+#define NM_TYPE_SETTING_IP_CONFIG (nm_setting_ip_config_get_type())
+#define NM_SETTING_IP_CONFIG(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_IP_CONFIG, NMSettingIPConfig))
+#define NM_SETTING_IP_CONFIG_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_IP_CONFIG, NMSettingIPConfigClass))
+#define NM_IS_SETTING_IP_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_IP_CONFIG))
+#define NM_IS_SETTING_IP_CONFIG_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_IP_CONFIG))
+#define NM_SETTING_IP_CONFIG_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_IP_CONFIG, NMSettingIPConfigClass))
+
+#define NM_SETTING_IP_CONFIG_DAD_TIMEOUT_MAX 30000
+
+#define NM_SETTING_IP_CONFIG_METHOD              "method"
+#define NM_SETTING_IP_CONFIG_DNS                 "dns"
+#define NM_SETTING_IP_CONFIG_DNS_SEARCH          "dns-search"
+#define NM_SETTING_IP_CONFIG_DNS_OPTIONS         "dns-options"
+#define NM_SETTING_IP_CONFIG_DNS_PRIORITY        "dns-priority"
+#define NM_SETTING_IP_CONFIG_ADDRESSES           "addresses"
+#define NM_SETTING_IP_CONFIG_GATEWAY             "gateway"
+#define NM_SETTING_IP_CONFIG_ROUTES              "routes"
+#define NM_SETTING_IP_CONFIG_ROUTE_METRIC        "route-metric"
+#define NM_SETTING_IP_CONFIG_ROUTE_TABLE         "route-table"
+#define NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES  "ignore-auto-routes"
+#define NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS     "ignore-auto-dns"
+#define NM_SETTING_IP_CONFIG_DHCP_HOSTNAME       "dhcp-hostname"
+#define NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME  "dhcp-send-hostname"
+#define NM_SETTING_IP_CONFIG_DHCP_HOSTNAME_FLAGS "dhcp-hostname-flags"
+#define NM_SETTING_IP_CONFIG_NEVER_DEFAULT       "never-default"
+#define NM_SETTING_IP_CONFIG_MAY_FAIL            "may-fail"
+#define NM_SETTING_IP_CONFIG_DAD_TIMEOUT         "dad-timeout"
+#define NM_SETTING_IP_CONFIG_DHCP_TIMEOUT        "dhcp-timeout"
+#define NM_SETTING_IP_CONFIG_REQUIRED_TIMEOUT    "required-timeout"
+#define NM_SETTING_IP_CONFIG_DHCP_IAID           "dhcp-iaid"
+#define NM_SETTING_IP_CONFIG_DHCP_REJECT_SERVERS "dhcp-reject-servers"
+
+/* these are not real GObject properties. */
+#define NM_SETTING_IP_CONFIG_ROUTING_RULES "routing-rules"
+
+#define NM_SETTING_DNS_OPTION_DEBUG                 "debug"
+#define NM_SETTING_DNS_OPTION_NDOTS                 "ndots"
+#define NM_SETTING_DNS_OPTION_TIMEOUT               "timeout"
+#define NM_SETTING_DNS_OPTION_ATTEMPTS              "attempts"
+#define NM_SETTING_DNS_OPTION_ROTATE                "rotate"
+#define NM_SETTING_DNS_OPTION_NO_CHECK_NAMES        "no-check-names"
+#define NM_SETTING_DNS_OPTION_INET6                 "inet6"
+#define NM_SETTING_DNS_OPTION_IP6_BYTESTRING        "ip6-bytestring"
+#define NM_SETTING_DNS_OPTION_IP6_DOTINT            "ip6-dotint"
+#define NM_SETTING_DNS_OPTION_NO_IP6_DOTINT         "no-ip6-dotint"
+#define NM_SETTING_DNS_OPTION_EDNS0                 "edns0"
+#define NM_SETTING_DNS_OPTION_SINGLE_REQUEST        "single-request"
+#define NM_SETTING_DNS_OPTION_SINGLE_REQUEST_REOPEN "single-request-reopen"
+#define NM_SETTING_DNS_OPTION_NO_TLD_QUERY          "no-tld-query"
+#define NM_SETTING_DNS_OPTION_USE_VC                "use-vc"
+#define NM_SETTING_DNS_OPTION_NO_RELOAD             "no-reload"
+#define NM_SETTING_DNS_OPTION_TRUST_AD              "trust-ad"
+
+typedef struct _NMSettingIPConfigClass NMSettingIPConfigClass;
+
+/**
+ * NMDhcpHostnameFlags:
+ * @NM_DHCP_HOSTNAME_FLAG_NONE: no flag set. The default value from
+ *   Networkmanager global configuration is used. If such value is unset
+ *   or still zero, the DHCP request will use standard FQDN flags, i.e.
+ *   %NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE and
+ *   %NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED for IPv4 and
+ *   %NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE for IPv6.
+ * @NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE: whether the server should
+ *   do the A RR (FQDN-to-address) DNS updates.
+ * @NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED: if set, the FQDN is encoded
+ *   using canonical wire format. Otherwise it uses the deprecated
+ *   ASCII encoding. This flag is allowed only for DHCPv4.
+ * @NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE: when not set, request the
+ *   server to perform updates (the PTR RR and possibly the A RR
+ *   based on the %NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE flag). If
+ *   this is set, the %NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE flag
+ *   should be cleared.
+ * @NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS: when set, no FQDN flags are
+ *   sent in the DHCP FQDN option. When cleared and all other FQDN
+ *   flags are zero, standard FQDN flags are sent. This flag is
+ *   incompatible with any other FQDN flag.
+ *
+ * #NMDhcpHostnameFlags describe flags related to the DHCP hostname and
+ * FQDN.
+ *
+ * Since: 1.22
+ */
+typedef enum { /*< flags >*/
+               NM_DHCP_HOSTNAME_FLAG_NONE = 0x0,
+
+               NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE = 0x1,
+               NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED     = 0x2,
+               NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE   = 0x4,
+
+               NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS = 0x8,
+
+} NMDhcpHostnameFlags;
+
+GType nm_setting_ip_config_get_type(void);
+
+const char *nm_setting_ip_config_get_method(NMSettingIPConfig *setting);
+
+guint       nm_setting_ip_config_get_num_dns(NMSettingIPConfig *setting);
+const char *nm_setting_ip_config_get_dns(NMSettingIPConfig *setting, int idx);
+gboolean    nm_setting_ip_config_add_dns(NMSettingIPConfig *setting, const char *dns);
+void        nm_setting_ip_config_remove_dns(NMSettingIPConfig *setting, int idx);
+gboolean    nm_setting_ip_config_remove_dns_by_value(NMSettingIPConfig *setting, const char *dns);
+void        nm_setting_ip_config_clear_dns(NMSettingIPConfig *setting);
+
+guint       nm_setting_ip_config_get_num_dns_searches(NMSettingIPConfig *setting);
+const char *nm_setting_ip_config_get_dns_search(NMSettingIPConfig *setting, int idx);
+gboolean    nm_setting_ip_config_add_dns_search(NMSettingIPConfig *setting, const char *dns_search);
+void        nm_setting_ip_config_remove_dns_search(NMSettingIPConfig *setting, int idx);
+gboolean    nm_setting_ip_config_remove_dns_search_by_value(NMSettingIPConfig *setting,
+                                                            const char *       dns_search);
+void        nm_setting_ip_config_clear_dns_searches(NMSettingIPConfig *setting);
+
+guint       nm_setting_ip_config_get_num_dns_options(NMSettingIPConfig *setting);
+gboolean    nm_setting_ip_config_has_dns_options(NMSettingIPConfig *setting);
+const char *nm_setting_ip_config_get_dns_option(NMSettingIPConfig *setting, guint idx);
+gboolean    nm_setting_ip_config_add_dns_option(NMSettingIPConfig *setting, const char *dns_option);
+void        nm_setting_ip_config_remove_dns_option(NMSettingIPConfig *setting, int idx);
+gboolean    nm_setting_ip_config_remove_dns_option_by_value(NMSettingIPConfig *setting,
+                                                            const char *       dns_option);
+void        nm_setting_ip_config_clear_dns_options(NMSettingIPConfig *setting, gboolean is_set);
+
+NM_AVAILABLE_IN_1_4
+int nm_setting_ip_config_get_dns_priority(NMSettingIPConfig *setting);
+
+guint        nm_setting_ip_config_get_num_addresses(NMSettingIPConfig *setting);
+NMIPAddress *nm_setting_ip_config_get_address(NMSettingIPConfig *setting, int idx);
+gboolean     nm_setting_ip_config_add_address(NMSettingIPConfig *setting, NMIPAddress *address);
+void         nm_setting_ip_config_remove_address(NMSettingIPConfig *setting, int idx);
+gboolean     nm_setting_ip_config_remove_address_by_value(NMSettingIPConfig *setting,
+                                                          NMIPAddress *      address);
+void         nm_setting_ip_config_clear_addresses(NMSettingIPConfig *setting);
+
+const char *nm_setting_ip_config_get_gateway(NMSettingIPConfig *setting);
+
+guint      nm_setting_ip_config_get_num_routes(NMSettingIPConfig *setting);
+NMIPRoute *nm_setting_ip_config_get_route(NMSettingIPConfig *setting, int idx);
+gboolean   nm_setting_ip_config_add_route(NMSettingIPConfig *setting, NMIPRoute *route);
+void       nm_setting_ip_config_remove_route(NMSettingIPConfig *setting, int idx);
+gboolean   nm_setting_ip_config_remove_route_by_value(NMSettingIPConfig *setting, NMIPRoute *route);
+void       nm_setting_ip_config_clear_routes(NMSettingIPConfig *setting);
+
+gint64 nm_setting_ip_config_get_route_metric(NMSettingIPConfig *setting);
+
+NM_AVAILABLE_IN_1_10
+guint32 nm_setting_ip_config_get_route_table(NMSettingIPConfig *setting);
+
+NM_AVAILABLE_IN_1_18
+guint nm_setting_ip_config_get_num_routing_rules(NMSettingIPConfig *setting);
+NM_AVAILABLE_IN_1_18
+NMIPRoutingRule *nm_setting_ip_config_get_routing_rule(NMSettingIPConfig *setting, guint idx);
+NM_AVAILABLE_IN_1_18
+void nm_setting_ip_config_add_routing_rule(NMSettingIPConfig *setting,
+                                           NMIPRoutingRule *  routing_rule);
+NM_AVAILABLE_IN_1_18
+void nm_setting_ip_config_remove_routing_rule(NMSettingIPConfig *setting, guint idx);
+NM_AVAILABLE_IN_1_18
+void nm_setting_ip_config_clear_routing_rules(NMSettingIPConfig *setting);
+
+gboolean nm_setting_ip_config_get_ignore_auto_routes(NMSettingIPConfig *setting);
+gboolean nm_setting_ip_config_get_ignore_auto_dns(NMSettingIPConfig *setting);
+
+const char *nm_setting_ip_config_get_dhcp_hostname(NMSettingIPConfig *setting);
+gboolean    nm_setting_ip_config_get_dhcp_send_hostname(NMSettingIPConfig *setting);
+
+gboolean nm_setting_ip_config_get_never_default(NMSettingIPConfig *setting);
+gboolean nm_setting_ip_config_get_may_fail(NMSettingIPConfig *setting);
+NM_AVAILABLE_IN_1_2
+int nm_setting_ip_config_get_dad_timeout(NMSettingIPConfig *setting);
+NM_AVAILABLE_IN_1_2
+int nm_setting_ip_config_get_dhcp_timeout(NMSettingIPConfig *setting);
+NM_AVAILABLE_IN_1_32_4
+int nm_setting_ip_config_get_required_timeout(NMSettingIPConfig *setting);
+NM_AVAILABLE_IN_1_22
+const char *nm_setting_ip_config_get_dhcp_iaid(NMSettingIPConfig *setting);
+
+NM_AVAILABLE_IN_1_22
+NMDhcpHostnameFlags nm_setting_ip_config_get_dhcp_hostname_flags(NMSettingIPConfig *setting);
+
+NM_AVAILABLE_IN_1_28
+const char *const *nm_setting_ip_config_get_dhcp_reject_servers(NMSettingIPConfig *setting,
+                                                                guint *            out_len);
+NM_AVAILABLE_IN_1_28
+void nm_setting_ip_config_add_dhcp_reject_server(NMSettingIPConfig *setting, const char *server);
+NM_AVAILABLE_IN_1_28
+void nm_setting_ip_config_remove_dhcp_reject_server(NMSettingIPConfig *setting, guint idx);
+NM_AVAILABLE_IN_1_28
+void nm_setting_ip_config_clear_dhcp_reject_servers(NMSettingIPConfig *setting);
+
+G_END_DECLS
+
+#endif /* NM_SETTING_IP_CONFIG_H */
diff --git a/src/libnm-core-public/nm-setting-ip-tunnel.h b/src/libnm-core-public/nm-setting-ip-tunnel.h
new file mode 100644
index 00000000..0a83b0a2
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-ip-tunnel.h
@@ -0,0 +1,108 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2015 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_IP_TUNNEL_H__
+#define __NM_SETTING_IP_TUNNEL_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_IP_TUNNEL (nm_setting_ip_tunnel_get_type())
+#define NM_SETTING_IP_TUNNEL(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_IP_TUNNEL, NMSettingIPTunnel))
+#define NM_SETTING_IP_TUNNEL_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_IP_TUNNEL, NMSettingIPTunnelClass))
+#define NM_IS_SETTING_IP_TUNNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_IP_TUNNEL))
+#define NM_IS_SETTING_IP_TUNNEL_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_IP_TUNNEL))
+#define NM_SETTING_IP_TUNNEL_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_IP_TUNNEL, NMSettingIPTunnelClass))
+
+#define NM_SETTING_IP_TUNNEL_SETTING_NAME "ip-tunnel"
+
+#define NM_SETTING_IP_TUNNEL_PARENT              "parent"
+#define NM_SETTING_IP_TUNNEL_MODE                "mode"
+#define NM_SETTING_IP_TUNNEL_LOCAL               "local"
+#define NM_SETTING_IP_TUNNEL_REMOTE              "remote"
+#define NM_SETTING_IP_TUNNEL_TTL                 "ttl"
+#define NM_SETTING_IP_TUNNEL_TOS                 "tos"
+#define NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY  "path-mtu-discovery"
+#define NM_SETTING_IP_TUNNEL_INPUT_KEY           "input-key"
+#define NM_SETTING_IP_TUNNEL_OUTPUT_KEY          "output-key"
+#define NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT "encapsulation-limit"
+#define NM_SETTING_IP_TUNNEL_FLOW_LABEL          "flow-label"
+#define NM_SETTING_IP_TUNNEL_MTU                 "mtu"
+#define NM_SETTING_IP_TUNNEL_FLAGS               "flags"
+
+typedef struct _NMSettingIPTunnelClass NMSettingIPTunnelClass;
+
+/*
+ * NMIPTunnelFlags:
+ * @NM_IP_TUNNEL_FLAG_NONE: no flag
+ * @NM_IP_TUNNEL_FLAG_IP6_IGN_ENCAP_LIMIT: don't add encapsulation limit
+ *     if one isn't present in inner packet
+ * @NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_TCLASS: copy the traffic class field
+ *     from the inner packet
+ * @NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FLOWLABEL: copy the flowlabel from the
+ *     inner packet
+ * @NM_IP_TUNNEL_FLAG_IP6_MIP6_DEV: used for Mobile IPv6
+ * @NM_IP_TUNNEL_FLAG_IP6_RCV_DSCP_COPY: copy DSCP from the outer packet
+ * @NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FWMARK: copy fwmark from inner packet
+ *
+ * IP tunnel flags.
+ *
+ * Since: 1.12
+ */
+typedef enum { /*< flags, prefix=NM_IP_TUNNEL_FLAG >*/
+               NM_IP_TUNNEL_FLAG_NONE                   = 0x0,
+               NM_IP_TUNNEL_FLAG_IP6_IGN_ENCAP_LIMIT    = 0x1,
+               NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_TCLASS    = 0x2,
+               NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FLOWLABEL = 0x4,
+               NM_IP_TUNNEL_FLAG_IP6_MIP6_DEV           = 0x8,
+               NM_IP_TUNNEL_FLAG_IP6_RCV_DSCP_COPY      = 0x10,
+               NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FWMARK    = 0x20,
+} NMIPTunnelFlags;
+
+NM_AVAILABLE_IN_1_2
+GType nm_setting_ip_tunnel_get_type(void);
+
+NM_AVAILABLE_IN_1_2
+NMSetting *nm_setting_ip_tunnel_new(void);
+
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_ip_tunnel_get_parent(NMSettingIPTunnel *setting);
+NM_AVAILABLE_IN_1_2
+NMIPTunnelMode nm_setting_ip_tunnel_get_mode(NMSettingIPTunnel *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_ip_tunnel_get_local(NMSettingIPTunnel *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_ip_tunnel_get_remote(NMSettingIPTunnel *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_ip_tunnel_get_ttl(NMSettingIPTunnel *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_ip_tunnel_get_tos(NMSettingIPTunnel *setting);
+NM_AVAILABLE_IN_1_2
+gboolean nm_setting_ip_tunnel_get_path_mtu_discovery(NMSettingIPTunnel *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_ip_tunnel_get_input_key(NMSettingIPTunnel *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_ip_tunnel_get_output_key(NMSettingIPTunnel *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_ip_tunnel_get_encapsulation_limit(NMSettingIPTunnel *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_ip_tunnel_get_flow_label(NMSettingIPTunnel *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_ip_tunnel_get_mtu(NMSettingIPTunnel *setting);
+NM_AVAILABLE_IN_1_12
+NMIPTunnelFlags nm_setting_ip_tunnel_get_flags(NMSettingIPTunnel *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_IP_TUNNEL_H__ */
diff --git a/src/libnm-core-public/nm-setting-ip4-config.h b/src/libnm-core-public/nm-setting-ip4-config.h
new file mode 100644
index 00000000..ce917b11
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-ip4-config.h
@@ -0,0 +1,95 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2014 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_IP4_CONFIG_H__
+#define __NM_SETTING_IP4_CONFIG_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting-ip-config.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_IP4_CONFIG (nm_setting_ip4_config_get_type())
+#define NM_SETTING_IP4_CONFIG(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_IP4_CONFIG, NMSettingIP4Config))
+#define NM_SETTING_IP4_CONFIG_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_IP4CONFIG, NMSettingIP4ConfigClass))
+#define NM_IS_SETTING_IP4_CONFIG(obj) \
+    (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_IP4_CONFIG))
+#define NM_IS_SETTING_IP4_CONFIG_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_IP4_CONFIG))
+#define NM_SETTING_IP4_CONFIG_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_IP4_CONFIG, NMSettingIP4ConfigClass))
+
+#define NM_SETTING_IP4_CONFIG_SETTING_NAME "ipv4"
+
+#define NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID               "dhcp-client-id"
+#define NM_SETTING_IP4_CONFIG_DHCP_FQDN                    "dhcp-fqdn"
+#define NM_SETTING_IP4_CONFIG_DHCP_VENDOR_CLASS_IDENTIFIER "dhcp-vendor-class-identifier"
+
+/**
+ * NM_SETTING_IP4_CONFIG_METHOD_AUTO:
+ *
+ * IPv4 configuration should be automatically determined via a method appropriate
+ * for the hardware interface, ie DHCP or PPP or some other device-specific
+ * manner.
+ */
+#define NM_SETTING_IP4_CONFIG_METHOD_AUTO "auto"
+
+/**
+ * NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL:
+ *
+ * IPv4 configuration should be automatically configured for link-local-only
+ * operation.
+ */
+#define NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL "link-local"
+
+/**
+ * NM_SETTING_IP4_CONFIG_METHOD_MANUAL:
+ *
+ * All necessary IPv4 configuration (addresses, prefix, DNS, etc) is specified
+ * in the setting's properties.
+ */
+#define NM_SETTING_IP4_CONFIG_METHOD_MANUAL "manual"
+
+/**
+ * NM_SETTING_IP4_CONFIG_METHOD_SHARED:
+ *
+ * This connection specifies configuration that allows other computers to
+ * connect through it to the default network (usually the Internet).  The
+ * connection's interface will be assigned a private address, and a DHCP server,
+ * caching DNS server, and Network Address Translation (NAT) functionality will
+ * be started on this connection's interface to allow other devices to connect
+ * through that interface to the default network.
+ */
+#define NM_SETTING_IP4_CONFIG_METHOD_SHARED "shared"
+
+/**
+ * NM_SETTING_IP4_CONFIG_METHOD_DISABLED:
+ *
+ * This connection does not use or require IPv4 address and it should be disabled.
+ */
+#define NM_SETTING_IP4_CONFIG_METHOD_DISABLED "disabled"
+
+typedef struct _NMSettingIP4ConfigClass NMSettingIP4ConfigClass;
+
+GType nm_setting_ip4_config_get_type(void);
+
+NMSetting *nm_setting_ip4_config_new(void);
+
+const char *nm_setting_ip4_config_get_dhcp_client_id(NMSettingIP4Config *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_ip4_config_get_dhcp_fqdn(NMSettingIP4Config *setting);
+
+NM_AVAILABLE_IN_1_28
+const char *nm_setting_ip4_config_get_dhcp_vendor_class_identifier(NMSettingIP4Config *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_IP4_CONFIG_H__ */
diff --git a/src/libnm-core-public/nm-setting-ip6-config.h b/src/libnm-core-public/nm-setting-ip6-config.h
new file mode 100644
index 00000000..5e5d459d
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-ip6-config.h
@@ -0,0 +1,160 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_IP6_CONFIG_H__
+#define __NM_SETTING_IP6_CONFIG_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting-ip-config.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_IP6_CONFIG (nm_setting_ip6_config_get_type())
+#define NM_SETTING_IP6_CONFIG(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_IP6_CONFIG, NMSettingIP6Config))
+#define NM_SETTING_IP6_CONFIG_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_IP6CONFIG, NMSettingIP6ConfigClass))
+#define NM_IS_SETTING_IP6_CONFIG(obj) \
+    (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_IP6_CONFIG))
+#define NM_IS_SETTING_IP6_CONFIG_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_IP6_CONFIG))
+#define NM_SETTING_IP6_CONFIG_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_IP6_CONFIG, NMSettingIP6ConfigClass))
+
+#define NM_SETTING_IP6_CONFIG_SETTING_NAME "ipv6"
+
+#define NM_SETTING_IP6_CONFIG_IP6_PRIVACY "ip6-privacy"
+
+#define NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE "addr-gen-mode"
+
+#define NM_SETTING_IP6_CONFIG_TOKEN "token"
+
+#define NM_SETTING_IP6_CONFIG_DHCP_DUID "dhcp-duid"
+
+#define NM_SETTING_IP6_CONFIG_RA_TIMEOUT "ra-timeout"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_IGNORE:
+ *
+ * IPv6 is not required or is handled by some other mechanism, and NetworkManager
+ * should not configure IPv6 for this connection.
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_IGNORE "ignore"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_AUTO:
+ *
+ * IPv6 configuration should be automatically determined via a method appropriate
+ * for the hardware interface, ie router advertisements, DHCP, or PPP or some
+ * other device-specific manner.
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_AUTO "auto"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_DHCP:
+ *
+ * IPv6 configuration should be automatically determined via DHCPv6 only and
+ * router advertisements should be ignored.
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_DHCP "dhcp"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL:
+ *
+ * IPv6 configuration should be automatically configured for link-local-only
+ * operation.
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL "link-local"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_MANUAL:
+ *
+ * All necessary IPv6 configuration (addresses, prefix, DNS, etc) is specified
+ * in the setting's properties.
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_MANUAL "manual"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_SHARED:
+ *
+ * This connection specifies configuration that allows other computers to
+ * connect through it to the default network (usually the Internet).  The
+ * connection's interface will be assigned a private address, and router
+ * advertisements, a caching DNS server, and Network Address Translation (NAT)
+ * functionality will be started on this connection's interface to allow other
+ * devices to connect through that interface to the default network. (not yet
+ * supported for IPv6)
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_SHARED "shared"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_DISABLED:
+ *
+ * IPv6 is disabled for the connection.
+ *
+ * Since: 1.20
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_DISABLED "disabled"
+
+/**
+ * NMSettingIP6ConfigPrivacy:
+ * @NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN: unknown or no value specified
+ * @NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED: IPv6 Privacy Extensions are disabled
+ * @NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR: IPv6 Privacy Extensions
+ * are enabled, but public addresses are preferred over temporary addresses
+ * @NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR: IPv6 Privacy Extensions
+ * are enabled and temporary addresses are preferred over public addresses
+ *
+ * #NMSettingIP6ConfigPrivacy values indicate if and how IPv6 Privacy
+ * Extensions are used (RFC4941).
+ */
+typedef enum {
+    NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN            = -1,
+    NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED           = 0,
+    NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR = 1,
+    NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR   = 2
+} NMSettingIP6ConfigPrivacy;
+
+/**
+ * NMSettingIP6ConfigAddrGenMode:
+ * @NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64: The Interface Identifier is derived
+ * from the interface hardware address.
+ * @NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_STABLE_PRIVACY: The Interface Identifier
+ * is created by using a cryptographically secure hash of a secret host-specific
+ * key along with the connection identification and the network address as
+ * specified by RFC7217.
+ *
+ * #NMSettingIP6ConfigAddrGenMode controls how the Interface Identifier for
+ * RFC4862 Stateless Address Autoconfiguration is created.
+ *
+ * Since: 1.2
+ */
+typedef enum {
+    NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64          = 0,
+    NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_STABLE_PRIVACY = 1,
+} NMSettingIP6ConfigAddrGenMode;
+
+typedef struct _NMSettingIP6ConfigClass NMSettingIP6ConfigClass;
+
+GType nm_setting_ip6_config_get_type(void);
+
+NMSetting *nm_setting_ip6_config_new(void);
+
+NMSettingIP6ConfigPrivacy nm_setting_ip6_config_get_ip6_privacy(NMSettingIP6Config *setting);
+NM_AVAILABLE_IN_1_2
+NMSettingIP6ConfigAddrGenMode nm_setting_ip6_config_get_addr_gen_mode(NMSettingIP6Config *setting);
+NM_AVAILABLE_IN_1_4
+const char *nm_setting_ip6_config_get_token(NMSettingIP6Config *setting);
+NM_AVAILABLE_IN_1_12
+const char *nm_setting_ip6_config_get_dhcp_duid(NMSettingIP6Config *setting);
+NM_AVAILABLE_IN_1_24
+gint32 nm_setting_ip6_config_get_ra_timeout(NMSettingIP6Config *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_IP6_CONFIG_H__ */
diff --git a/src/libnm-core-public/nm-setting-macsec.h b/src/libnm-core-public/nm-setting-macsec.h
new file mode 100644
index 00000000..67801a64
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-macsec.h
@@ -0,0 +1,104 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2017 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_MACSEC_H__
+#define __NM_SETTING_MACSEC_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_MACSEC (nm_setting_macsec_get_type())
+#define NM_SETTING_MACSEC(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_MACSEC, NMSettingMacsec))
+#define NM_SETTING_MACSEC_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_MACSECCONFIG, NMSettingMacsecClass))
+#define NM_IS_SETTING_MACSEC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_MACSEC))
+#define NM_IS_SETTING_MACSEC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_MACSEC))
+#define NM_SETTING_MACSEC_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_MACSEC, NMSettingMacsecClass))
+
+#define NM_SETTING_MACSEC_SETTING_NAME "macsec"
+
+#define NM_SETTING_MACSEC_PARENT        "parent"
+#define NM_SETTING_MACSEC_MODE          "mode"
+#define NM_SETTING_MACSEC_ENCRYPT       "encrypt"
+#define NM_SETTING_MACSEC_MKA_CAK       "mka-cak"
+#define NM_SETTING_MACSEC_MKA_CAK_FLAGS "mka-cak-flags"
+#define NM_SETTING_MACSEC_MKA_CKN       "mka-ckn"
+#define NM_SETTING_MACSEC_PORT          "port"
+#define NM_SETTING_MACSEC_VALIDATION    "validation"
+#define NM_SETTING_MACSEC_SEND_SCI      "send-sci"
+
+typedef struct _NMSettingMacsecClass NMSettingMacsecClass;
+
+/**
+ * NMSettingMacsecMode:
+ * @NM_SETTING_MACSEC_MODE_PSK: The CAK is pre-shared
+ * @NM_SETTING_MACSEC_MODE_EAP: The CAK is the result of participation in EAP
+ *
+ * #NMSettingMacsecMode controls how the CAK (Connectivity Association Key) used
+ * in MKA (MACsec Key Agreement) is obtained.
+ *
+ * Since: 1.6
+ */
+typedef enum {
+    NM_SETTING_MACSEC_MODE_PSK = 0,
+    NM_SETTING_MACSEC_MODE_EAP = 1,
+} NMSettingMacsecMode;
+
+/**
+ * NMSettingMacsecValidation:
+ * @NM_SETTING_MACSEC_VALIDATION_DISABLE: All incoming frames are accepted if
+ *   possible
+ * @NM_SETTING_MACSEC_VALIDATION_CHECK: Non protected, invalid, or impossible to
+ *   verify frames are accepted and counted as "invalid"
+ * @NM_SETTING_MACSEC_VALIDATION_STRICT: Non protected, invalid, or impossible to
+ *   verify frames are dropped
+ *
+ * #NMSettingMacsecValidation specifies a validation mode for incoming frames.
+ *
+ * Since: 1.6
+ */
+typedef enum {
+    NM_SETTING_MACSEC_VALIDATION_DISABLE = 0,
+    NM_SETTING_MACSEC_VALIDATION_CHECK   = 1,
+    NM_SETTING_MACSEC_VALIDATION_STRICT  = 2,
+} NMSettingMacsecValidation;
+
+#define NM_SETTING_MACSEC_MKA_CAK_LENGTH 32
+#define NM_SETTING_MACSEC_MKA_CKN_LENGTH 64
+
+NM_AVAILABLE_IN_1_6
+GType nm_setting_macsec_get_type(void);
+NM_AVAILABLE_IN_1_6
+NMSetting *nm_setting_macsec_new(void);
+
+NM_AVAILABLE_IN_1_6
+const char *nm_setting_macsec_get_parent(NMSettingMacsec *setting);
+NM_AVAILABLE_IN_1_6
+NMSettingMacsecMode nm_setting_macsec_get_mode(NMSettingMacsec *setting);
+NM_AVAILABLE_IN_1_6
+gboolean nm_setting_macsec_get_encrypt(NMSettingMacsec *setting);
+NM_AVAILABLE_IN_1_6
+const char *nm_setting_macsec_get_mka_cak(NMSettingMacsec *setting);
+NM_AVAILABLE_IN_1_6
+NMSettingSecretFlags nm_setting_macsec_get_mka_cak_flags(NMSettingMacsec *setting);
+NM_AVAILABLE_IN_1_6
+const char *nm_setting_macsec_get_mka_ckn(NMSettingMacsec *setting);
+NM_AVAILABLE_IN_1_6
+int nm_setting_macsec_get_port(NMSettingMacsec *setting);
+NM_AVAILABLE_IN_1_6
+NMSettingMacsecValidation nm_setting_macsec_get_validation(NMSettingMacsec *setting);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_macsec_get_send_sci(NMSettingMacsec *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_MACSEC_H__ */
diff --git a/src/libnm-core-public/nm-setting-macvlan.h b/src/libnm-core-public/nm-setting-macvlan.h
new file mode 100644
index 00000000..82a5b20d
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-macvlan.h
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2015 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_MACVLAN_H__
+#define __NM_SETTING_MACVLAN_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_MACVLAN (nm_setting_macvlan_get_type())
+#define NM_SETTING_MACVLAN(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_MACVLAN, NMSettingMacvlan))
+#define NM_SETTING_MACVLAN_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_MACVLANCONFIG, NMSettingMacvlanClass))
+#define NM_IS_SETTING_MACVLAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_MACVLAN))
+#define NM_IS_SETTING_MACVLAN_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_MACVLAN))
+#define NM_SETTING_MACVLAN_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_MACVLAN, NMSettingMacvlanClass))
+
+#define NM_SETTING_MACVLAN_SETTING_NAME "macvlan"
+
+#define NM_SETTING_MACVLAN_PARENT      "parent"
+#define NM_SETTING_MACVLAN_MODE        "mode"
+#define NM_SETTING_MACVLAN_PROMISCUOUS "promiscuous"
+#define NM_SETTING_MACVLAN_TAP         "tap"
+
+typedef struct _NMSettingMacvlanClass NMSettingMacvlanClass;
+
+/**
+ * NMSettingMacvlanMode:
+ * @NM_SETTING_MACVLAN_MODE_UNKNOWN: unknown/unset mode
+ * @NM_SETTING_MACVLAN_MODE_VEPA: Virtual Ethernet Port Aggregator mode
+ * @NM_SETTING_MACVLAN_MODE_BRIDGE: bridge mode
+ * @NM_SETTING_MACVLAN_MODE_PRIVATE: private mode
+ * @NM_SETTING_MACVLAN_MODE_PASSTHRU: passthru mode
+ * @NM_SETTING_MACVLAN_MODE_SOURCE: source mode
+ **/
+typedef enum {
+    NM_SETTING_MACVLAN_MODE_UNKNOWN  = 0,
+    NM_SETTING_MACVLAN_MODE_VEPA     = 1,
+    NM_SETTING_MACVLAN_MODE_BRIDGE   = 2,
+    NM_SETTING_MACVLAN_MODE_PRIVATE  = 3,
+    NM_SETTING_MACVLAN_MODE_PASSTHRU = 4,
+    NM_SETTING_MACVLAN_MODE_SOURCE   = 5,
+    _NM_SETTING_MACVLAN_MODE_NUM,                                    /*< skip >*/
+    NM_SETTING_MACVLAN_MODE_LAST = _NM_SETTING_MACVLAN_MODE_NUM - 1, /*< skip >*/
+} NMSettingMacvlanMode;
+
+NM_AVAILABLE_IN_1_2
+GType nm_setting_macvlan_get_type(void);
+NM_AVAILABLE_IN_1_2
+NMSetting *nm_setting_macvlan_new(void);
+
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_macvlan_get_parent(NMSettingMacvlan *setting);
+NM_AVAILABLE_IN_1_2
+NMSettingMacvlanMode nm_setting_macvlan_get_mode(NMSettingMacvlan *setting);
+NM_AVAILABLE_IN_1_2
+gboolean nm_setting_macvlan_get_promiscuous(NMSettingMacvlan *setting);
+NM_AVAILABLE_IN_1_2
+gboolean nm_setting_macvlan_get_tap(NMSettingMacvlan *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_MACVLAN_H__ */
diff --git a/src/libnm-core-public/nm-setting-match.h b/src/libnm-core-public/nm-setting-match.h
new file mode 100644
index 00000000..40d12b65
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-match.h
@@ -0,0 +1,107 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2018 Red Hat, Inc.
+ */
+
+#ifndef NM_SETTING_MATCH_H
+#define NM_SETTING_MATCH_H
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_MATCH (nm_setting_match_get_type())
+#define NM_SETTING_MATCH(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_MATCH, NMSettingMatch))
+#define NM_SETTING_MATCH_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_MATCH, NMSettingMatchClass))
+#define NM_IS_SETTING_MATCH(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_MATCH))
+#define NM_IS_SETTING_MATCH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_MATCH))
+#define NM_SETTING_MATCH_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_MATCH, NMSettingMatchClass))
+
+#define NM_SETTING_MATCH_SETTING_NAME "match"
+
+#define NM_SETTING_MATCH_INTERFACE_NAME      "interface-name"
+#define NM_SETTING_MATCH_KERNEL_COMMAND_LINE "kernel-command-line"
+#define NM_SETTING_MATCH_DRIVER              "driver"
+#define NM_SETTING_MATCH_PATH                "path"
+
+typedef struct _NMSettingMatchClass NMSettingMatchClass;
+
+NM_AVAILABLE_IN_1_14
+GType nm_setting_match_get_type(void);
+NM_AVAILABLE_IN_1_32
+NMSetting *nm_setting_match_new(void);
+
+NM_AVAILABLE_IN_1_14
+guint nm_setting_match_get_num_interface_names(NMSettingMatch *setting);
+NM_AVAILABLE_IN_1_14
+const char *nm_setting_match_get_interface_name(NMSettingMatch *setting, int idx);
+NM_AVAILABLE_IN_1_14
+void nm_setting_match_remove_interface_name(NMSettingMatch *setting, int idx);
+NM_AVAILABLE_IN_1_14
+gboolean nm_setting_match_remove_interface_name_by_value(NMSettingMatch *setting,
+                                                         const char *    interface_name);
+NM_AVAILABLE_IN_1_14
+void nm_setting_match_add_interface_name(NMSettingMatch *setting, const char *interface_name);
+NM_AVAILABLE_IN_1_14
+void nm_setting_match_clear_interface_names(NMSettingMatch *setting);
+NM_AVAILABLE_IN_1_14
+const char *const *nm_setting_match_get_interface_names(NMSettingMatch *setting, guint *length);
+
+NM_AVAILABLE_IN_1_26
+guint nm_setting_match_get_num_kernel_command_lines(NMSettingMatch *setting);
+NM_AVAILABLE_IN_1_26
+const char *nm_setting_match_get_kernel_command_line(NMSettingMatch *setting, guint idx);
+NM_AVAILABLE_IN_1_26
+void nm_setting_match_remove_kernel_command_line(NMSettingMatch *setting, guint idx);
+NM_AVAILABLE_IN_1_26
+gboolean nm_setting_match_remove_kernel_command_line_by_value(NMSettingMatch *setting,
+                                                              const char *    kernel_command_line);
+NM_AVAILABLE_IN_1_26
+void nm_setting_match_add_kernel_command_line(NMSettingMatch *setting,
+                                              const char *    kernel_command_line);
+NM_AVAILABLE_IN_1_26
+void nm_setting_match_clear_kernel_command_lines(NMSettingMatch *setting);
+NM_AVAILABLE_IN_1_26
+const char *const *nm_setting_match_get_kernel_command_lines(NMSettingMatch *setting,
+                                                             guint *         length);
+
+NM_AVAILABLE_IN_1_26
+guint nm_setting_match_get_num_drivers(NMSettingMatch *setting);
+NM_AVAILABLE_IN_1_26
+const char *nm_setting_match_get_driver(NMSettingMatch *setting, guint idx);
+NM_AVAILABLE_IN_1_26
+void nm_setting_match_remove_driver(NMSettingMatch *setting, guint idx);
+NM_AVAILABLE_IN_1_26
+gboolean nm_setting_match_remove_driver_by_value(NMSettingMatch *setting, const char *driver);
+NM_AVAILABLE_IN_1_26
+void nm_setting_match_add_driver(NMSettingMatch *setting, const char *driver);
+NM_AVAILABLE_IN_1_26
+void nm_setting_match_clear_drivers(NMSettingMatch *setting);
+NM_AVAILABLE_IN_1_26
+const char *const *nm_setting_match_get_drivers(NMSettingMatch *setting, guint *length);
+
+NM_AVAILABLE_IN_1_26
+guint nm_setting_match_get_num_paths(NMSettingMatch *setting);
+NM_AVAILABLE_IN_1_26
+const char *nm_setting_match_get_path(NMSettingMatch *setting, guint idx);
+NM_AVAILABLE_IN_1_26
+void nm_setting_match_remove_path(NMSettingMatch *setting, guint idx);
+NM_AVAILABLE_IN_1_26
+gboolean nm_setting_match_remove_path_by_value(NMSettingMatch *setting, const char *path);
+NM_AVAILABLE_IN_1_26
+void nm_setting_match_add_path(NMSettingMatch *setting, const char *path);
+NM_AVAILABLE_IN_1_26
+void nm_setting_match_clear_paths(NMSettingMatch *setting);
+NM_AVAILABLE_IN_1_26
+const char *const *nm_setting_match_get_paths(NMSettingMatch *setting, guint *length);
+
+G_END_DECLS
+
+#endif /* NM_SETTING_MATCH_H */
diff --git a/src/libnm-core-public/nm-setting-olpc-mesh.h b/src/libnm-core-public/nm-setting-olpc-mesh.h
new file mode 100644
index 00000000..f692d9a3
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-olpc-mesh.h
@@ -0,0 +1,47 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ * Copyright (C) 2009 One Laptop per Child
+ */
+
+#ifndef __NM_SETTING_OLPC_MESH_H__
+#define __NM_SETTING_OLPC_MESH_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_OLPC_MESH (nm_setting_olpc_mesh_get_type())
+#define NM_SETTING_OLPC_MESH(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_OLPC_MESH, NMSettingOlpcMesh))
+#define NM_SETTING_OLPC_MESH_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_OLPC_MESH, NMSettingOlpcMeshClass))
+#define NM_IS_SETTING_OLPC_MESH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_OLPC_MESH))
+#define NM_IS_SETTING_OLPC_MESH_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_OLPC_MESH))
+#define NM_SETTING_OLPC_MESH_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_OLPC_MESH, NMSettingOlpcMeshClass))
+
+#define NM_SETTING_OLPC_MESH_SETTING_NAME "802-11-olpc-mesh"
+
+#define NM_SETTING_OLPC_MESH_SSID                 "ssid"
+#define NM_SETTING_OLPC_MESH_CHANNEL              "channel"
+#define NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS "dhcp-anycast-address"
+
+typedef struct _NMSettingOlpcMeshClass NMSettingOlpcMeshClass;
+
+GType nm_setting_olpc_mesh_get_type(void);
+
+NMSetting * nm_setting_olpc_mesh_new(void);
+GBytes *    nm_setting_olpc_mesh_get_ssid(NMSettingOlpcMesh *setting);
+guint32     nm_setting_olpc_mesh_get_channel(NMSettingOlpcMesh *setting);
+const char *nm_setting_olpc_mesh_get_dhcp_anycast_address(NMSettingOlpcMesh *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_OLPC_MESH_H__ */
diff --git a/src/libnm-core-public/nm-setting-ovs-bridge.h b/src/libnm-core-public/nm-setting-ovs-bridge.h
new file mode 100644
index 00000000..b3078715
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-ovs-bridge.h
@@ -0,0 +1,57 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2017 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_OVS_BRIDGE_H__
+#define __NM_SETTING_OVS_BRIDGE_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_OVS_BRIDGE (nm_setting_ovs_bridge_get_type())
+#define NM_SETTING_OVS_BRIDGE(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_OVS_BRIDGE, NMSettingOvsBridge))
+#define NM_SETTING_OVS_BRIDGE_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_OVS_BRIDGECONFIG, NMSettingOvsBridgeClass))
+#define NM_IS_SETTING_OVS_BRIDGE(obj) \
+    (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_OVS_BRIDGE))
+#define NM_IS_SETTING_OVS_BRIDGE_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_OVS_BRIDGE))
+#define NM_SETTING_OVS_BRIDGE_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_OVS_BRIDGE, NMSettingOvsBridgeClass))
+
+#define NM_SETTING_OVS_BRIDGE_SETTING_NAME "ovs-bridge"
+
+#define NM_SETTING_OVS_BRIDGE_FAIL_MODE             "fail-mode"
+#define NM_SETTING_OVS_BRIDGE_MCAST_SNOOPING_ENABLE "mcast-snooping-enable"
+#define NM_SETTING_OVS_BRIDGE_RSTP_ENABLE           "rstp-enable"
+#define NM_SETTING_OVS_BRIDGE_STP_ENABLE            "stp-enable"
+#define NM_SETTING_OVS_BRIDGE_DATAPATH_TYPE         "datapath-type"
+
+typedef struct _NMSettingOvsBridgeClass NMSettingOvsBridgeClass;
+
+NM_AVAILABLE_IN_1_10
+GType nm_setting_ovs_bridge_get_type(void);
+NM_AVAILABLE_IN_1_10
+NMSetting *nm_setting_ovs_bridge_new(void);
+
+NM_AVAILABLE_IN_1_10
+const char *nm_setting_ovs_bridge_get_fail_mode(NMSettingOvsBridge *self);
+NM_AVAILABLE_IN_1_10
+gboolean nm_setting_ovs_bridge_get_mcast_snooping_enable(NMSettingOvsBridge *self);
+NM_AVAILABLE_IN_1_10
+gboolean nm_setting_ovs_bridge_get_rstp_enable(NMSettingOvsBridge *self);
+NM_AVAILABLE_IN_1_10
+gboolean nm_setting_ovs_bridge_get_stp_enable(NMSettingOvsBridge *self);
+NM_AVAILABLE_IN_1_20
+const char *nm_setting_ovs_bridge_get_datapath_type(NMSettingOvsBridge *self);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_OVS_BRIDGE_H__ */
diff --git a/src/libnm-core-public/nm-setting-ovs-dpdk.h b/src/libnm-core-public/nm-setting-ovs-dpdk.h
new file mode 100644
index 00000000..72de2243
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-ovs-dpdk.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_OVS_DPDK_H__
+#define __NM_SETTING_OVS_DPDK_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_OVS_DPDK (nm_setting_ovs_dpdk_get_type())
+#define NM_SETTING_OVS_DPDK(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_OVS_DPDK, NMSettingOvsDpdk))
+#define NM_SETTING_OVS_DPDK_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_OVS_DPDKCONFIG, NMSettingOvsDpdkClass))
+#define NM_IS_SETTING_OVS_DPDK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_OVS_DPDK))
+#define NM_IS_SETTING_OVS_DPDK_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_OVS_DPDK))
+#define NM_SETTING_OVS_DPDK_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_OVS_DPDK, NMSettingOvsDpdkClass))
+
+#define NM_SETTING_OVS_DPDK_SETTING_NAME "ovs-dpdk"
+
+#define NM_SETTING_OVS_DPDK_DEVARGS "devargs"
+
+typedef struct _NMSettingOvsDpdkClass NMSettingOvsDpdkClass;
+
+NM_AVAILABLE_IN_1_20
+GType nm_setting_ovs_dpdk_get_type(void);
+NM_AVAILABLE_IN_1_20
+NMSetting *nm_setting_ovs_dpdk_new(void);
+
+NM_AVAILABLE_IN_1_20
+const char *nm_setting_ovs_dpdk_get_devargs(NMSettingOvsDpdk *self);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_OVS_DPDK_H__ */
diff --git a/src/libnm-core-public/nm-setting-ovs-external-ids.h b/src/libnm-core-public/nm-setting-ovs-external-ids.h
new file mode 100644
index 00000000..906db392
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-ovs-external-ids.h
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2017 - 2020 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_OVS_EXTERNAL_IDS_H__
+#define __NM_SETTING_OVS_EXTERNAL_IDS_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_OVS_EXTERNAL_IDS (nm_setting_ovs_external_ids_get_type())
+#define NM_SETTING_OVS_EXTERNAL_IDS(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_OVS_EXTERNAL_IDS, NMSettingOvsExternalIDs))
+#define NM_SETTING_OVS_EXTERNAL_IDS_CLASS(klass)               \
+    (G_TYPE_CHECK_CLASS_CAST((klass),                          \
+                             NM_TYPE_SETTING_OVS_EXTERNAL_IDS, \
+                             NMSettingOvsExternalIDsClass))
+#define NM_IS_SETTING_OVS_EXTERNAL_IDS(obj) \
+    (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_OVS_EXTERNAL_IDS))
+#define NM_IS_SETTING_OVS_EXTERNAL_IDS_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_OVS_EXTERNAL_IDS))
+#define NM_SETTING_OVS_EXTERNAL_IDS_GET_CLASS(obj)               \
+    (G_TYPE_INSTANCE_GET_CLASS((obj),                            \
+                               NM_TYPE_SETTING_OVS_EXTERNAL_IDS, \
+                               NMSettingOvsExternalIDsClass))
+
+#define NM_SETTING_OVS_EXTERNAL_IDS_SETTING_NAME "ovs-external-ids"
+
+#define NM_SETTING_OVS_EXTERNAL_IDS_DATA "data"
+
+typedef struct _NMSettingOvsExternalIDsClass NMSettingOvsExternalIDsClass;
+
+NM_AVAILABLE_IN_1_30
+GType nm_setting_ovs_external_ids_get_type(void);
+
+NM_AVAILABLE_IN_1_30
+NMSetting *nm_setting_ovs_external_ids_new(void);
+
+/*****************************************************************************/
+
+NM_AVAILABLE_IN_1_30
+const char *const *nm_setting_ovs_external_ids_get_data_keys(NMSettingOvsExternalIDs *setting,
+                                                             guint *                  out_len);
+
+NM_AVAILABLE_IN_1_30
+const char *nm_setting_ovs_external_ids_get_data(NMSettingOvsExternalIDs *setting, const char *key);
+
+NM_AVAILABLE_IN_1_30
+void nm_setting_ovs_external_ids_set_data(NMSettingOvsExternalIDs *setting,
+                                          const char *             key,
+                                          const char *             val);
+
+/*****************************************************************************/
+
+NM_AVAILABLE_IN_1_30
+gboolean nm_setting_ovs_external_ids_check_key(const char *key, GError **error);
+NM_AVAILABLE_IN_1_30
+gboolean nm_setting_ovs_external_ids_check_val(const char *val, GError **error);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_OVS_EXTERNAL_IDS_H__ */
diff --git a/src/libnm-core-public/nm-setting-ovs-interface.h b/src/libnm-core-public/nm-setting-ovs-interface.h
new file mode 100644
index 00000000..47ad5817
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-ovs-interface.h
@@ -0,0 +1,47 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2017 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_OVS_INTERFACE_H__
+#define __NM_SETTING_OVS_INTERFACE_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_OVS_INTERFACE (nm_setting_ovs_interface_get_type())
+#define NM_SETTING_OVS_INTERFACE(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_OVS_INTERFACE, NMSettingOvsInterface))
+#define NM_SETTING_OVS_INTERFACE_CLASS(klass)                     \
+    (G_TYPE_CHECK_CLASS_CAST((klass),                             \
+                             NM_TYPE_SETTING_OVS_INTERFACECONFIG, \
+                             NMSettingOvsInterfaceClass))
+#define NM_IS_SETTING_OVS_INTERFACE(obj) \
+    (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_OVS_INTERFACE))
+#define NM_IS_SETTING_OVS_INTERFACE_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_OVS_INTERFACE))
+#define NM_SETTING_OVS_INTERFACE_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_OVS_INTERFACE, NMSettingOvsInterfaceClass))
+
+#define NM_SETTING_OVS_INTERFACE_SETTING_NAME "ovs-interface"
+
+#define NM_SETTING_OVS_INTERFACE_TYPE "type"
+
+typedef struct _NMSettingOvsInterfaceClass NMSettingOvsInterfaceClass;
+
+NM_AVAILABLE_IN_1_10
+GType nm_setting_ovs_interface_get_type(void);
+NM_AVAILABLE_IN_1_10
+NMSetting *nm_setting_ovs_interface_new(void);
+
+NM_AVAILABLE_IN_1_10
+const char *nm_setting_ovs_interface_get_interface_type(NMSettingOvsInterface *self);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_OVS_INTERFACE_H__ */
diff --git a/src/libnm-core-public/nm-setting-ovs-patch.h b/src/libnm-core-public/nm-setting-ovs-patch.h
new file mode 100644
index 00000000..fd80d45a
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-ovs-patch.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2017 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_OVS_PATCH_H__
+#define __NM_SETTING_OVS_PATCH_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_OVS_PATCH (nm_setting_ovs_patch_get_type())
+#define NM_SETTING_OVS_PATCH(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_OVS_PATCH, NMSettingOvsPatch))
+#define NM_SETTING_OVS_PATCH_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_OVS_PATCHCONFIG, NMSettingOvsPatchClass))
+#define NM_IS_SETTING_OVS_PATCH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_OVS_PATCH))
+#define NM_IS_SETTING_OVS_PATCH_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_OVS_PATCH))
+#define NM_SETTING_OVS_PATCH_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_OVS_PATCH, NMSettingOvsPatchClass))
+
+#define NM_SETTING_OVS_PATCH_SETTING_NAME "ovs-patch"
+
+#define NM_SETTING_OVS_PATCH_PEER "peer"
+
+typedef struct _NMSettingOvsPatchClass NMSettingOvsPatchClass;
+
+NM_AVAILABLE_IN_1_10
+GType nm_setting_ovs_patch_get_type(void);
+NM_AVAILABLE_IN_1_10
+NMSetting *nm_setting_ovs_patch_new(void);
+
+NM_AVAILABLE_IN_1_10
+const char *nm_setting_ovs_patch_get_peer(NMSettingOvsPatch *self);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_OVS_PATCH_H__ */
diff --git a/src/libnm-core-public/nm-setting-ovs-port.h b/src/libnm-core-public/nm-setting-ovs-port.h
new file mode 100644
index 00000000..06d3a2aa
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-ovs-port.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2017 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_OVS_PORT_H__
+#define __NM_SETTING_OVS_PORT_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_OVS_PORT (nm_setting_ovs_port_get_type())
+#define NM_SETTING_OVS_PORT(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_OVS_PORT, NMSettingOvsPort))
+#define NM_SETTING_OVS_PORT_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_OVS_PORTCONFIG, NMSettingOvsPortClass))
+#define NM_IS_SETTING_OVS_PORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_OVS_PORT))
+#define NM_IS_SETTING_OVS_PORT_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_OVS_PORT))
+#define NM_SETTING_OVS_PORT_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_OVS_PORT, NMSettingOvsPortClass))
+
+#define NM_SETTING_OVS_PORT_SETTING_NAME "ovs-port"
+
+#define NM_SETTING_OVS_PORT_VLAN_MODE      "vlan-mode"
+#define NM_SETTING_OVS_PORT_TAG            "tag"
+#define NM_SETTING_OVS_PORT_LACP           "lacp"
+#define NM_SETTING_OVS_PORT_BOND_MODE      "bond-mode"
+#define NM_SETTING_OVS_PORT_BOND_UPDELAY   "bond-updelay"
+#define NM_SETTING_OVS_PORT_BOND_DOWNDELAY "bond-downdelay"
+
+typedef struct _NMSettingOvsPortClass NMSettingOvsPortClass;
+
+NM_AVAILABLE_IN_1_10
+GType nm_setting_ovs_port_get_type(void);
+NM_AVAILABLE_IN_1_10
+NMSetting *nm_setting_ovs_port_new(void);
+
+NM_AVAILABLE_IN_1_10
+const char *nm_setting_ovs_port_get_vlan_mode(NMSettingOvsPort *self);
+NM_AVAILABLE_IN_1_10
+guint nm_setting_ovs_port_get_tag(NMSettingOvsPort *self);
+NM_AVAILABLE_IN_1_10
+const char *nm_setting_ovs_port_get_lacp(NMSettingOvsPort *self);
+NM_AVAILABLE_IN_1_10
+const char *nm_setting_ovs_port_get_bond_mode(NMSettingOvsPort *self);
+NM_AVAILABLE_IN_1_10
+guint nm_setting_ovs_port_get_bond_updelay(NMSettingOvsPort *self);
+NM_AVAILABLE_IN_1_10
+guint nm_setting_ovs_port_get_bond_downdelay(NMSettingOvsPort *self);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_OVS_PORT_H__ */
diff --git a/src/libnm-core-public/nm-setting-ppp.h b/src/libnm-core-public/nm-setting-ppp.h
new file mode 100644
index 00000000..2c85f3fd
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-ppp.h
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_PPP_H__
+#define __NM_SETTING_PPP_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_PPP (nm_setting_ppp_get_type())
+#define NM_SETTING_PPP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_PPP, NMSettingPpp))
+#define NM_SETTING_PPP_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_PPP, NMSettingPppClass))
+#define NM_IS_SETTING_PPP(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_PPP))
+#define NM_IS_SETTING_PPP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_PPP))
+#define NM_SETTING_PPP_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_PPP, NMSettingPppClass))
+
+#define NM_SETTING_PPP_SETTING_NAME "ppp"
+
+#define NM_SETTING_PPP_NOAUTH            "noauth"
+#define NM_SETTING_PPP_REFUSE_EAP        "refuse-eap"
+#define NM_SETTING_PPP_REFUSE_PAP        "refuse-pap"
+#define NM_SETTING_PPP_REFUSE_CHAP       "refuse-chap"
+#define NM_SETTING_PPP_REFUSE_MSCHAP     "refuse-mschap"
+#define NM_SETTING_PPP_REFUSE_MSCHAPV2   "refuse-mschapv2"
+#define NM_SETTING_PPP_NOBSDCOMP         "nobsdcomp"
+#define NM_SETTING_PPP_NODEFLATE         "nodeflate"
+#define NM_SETTING_PPP_NO_VJ_COMP        "no-vj-comp"
+#define NM_SETTING_PPP_REQUIRE_MPPE      "require-mppe"
+#define NM_SETTING_PPP_REQUIRE_MPPE_128  "require-mppe-128"
+#define NM_SETTING_PPP_MPPE_STATEFUL     "mppe-stateful"
+#define NM_SETTING_PPP_CRTSCTS           "crtscts"
+#define NM_SETTING_PPP_BAUD              "baud"
+#define NM_SETTING_PPP_MRU               "mru"
+#define NM_SETTING_PPP_MTU               "mtu"
+#define NM_SETTING_PPP_LCP_ECHO_FAILURE  "lcp-echo-failure"
+#define NM_SETTING_PPP_LCP_ECHO_INTERVAL "lcp-echo-interval"
+
+typedef struct _NMSettingPppClass NMSettingPppClass;
+
+GType nm_setting_ppp_get_type(void);
+
+NMSetting *nm_setting_ppp_new(void);
+gboolean   nm_setting_ppp_get_noauth(NMSettingPpp *setting);
+gboolean   nm_setting_ppp_get_refuse_eap(NMSettingPpp *setting);
+gboolean   nm_setting_ppp_get_refuse_pap(NMSettingPpp *setting);
+gboolean   nm_setting_ppp_get_refuse_chap(NMSettingPpp *setting);
+gboolean   nm_setting_ppp_get_refuse_mschap(NMSettingPpp *setting);
+gboolean   nm_setting_ppp_get_refuse_mschapv2(NMSettingPpp *setting);
+gboolean   nm_setting_ppp_get_nobsdcomp(NMSettingPpp *setting);
+gboolean   nm_setting_ppp_get_nodeflate(NMSettingPpp *setting);
+gboolean   nm_setting_ppp_get_no_vj_comp(NMSettingPpp *setting);
+gboolean   nm_setting_ppp_get_require_mppe(NMSettingPpp *setting);
+gboolean   nm_setting_ppp_get_require_mppe_128(NMSettingPpp *setting);
+gboolean   nm_setting_ppp_get_mppe_stateful(NMSettingPpp *setting);
+gboolean   nm_setting_ppp_get_crtscts(NMSettingPpp *setting);
+guint32    nm_setting_ppp_get_baud(NMSettingPpp *setting);
+guint32    nm_setting_ppp_get_mru(NMSettingPpp *setting);
+guint32    nm_setting_ppp_get_mtu(NMSettingPpp *setting);
+guint32    nm_setting_ppp_get_lcp_echo_failure(NMSettingPpp *setting);
+guint32    nm_setting_ppp_get_lcp_echo_interval(NMSettingPpp *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_PPP_H__ */
diff --git a/src/libnm-core-public/nm-setting-pppoe.h b/src/libnm-core-public/nm-setting-pppoe.h
new file mode 100644
index 00000000..b9eb34bb
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-pppoe.h
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_PPPOE_H__
+#define __NM_SETTING_PPPOE_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_PPPOE (nm_setting_pppoe_get_type())
+#define NM_SETTING_PPPOE(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_PPPOE, NMSettingPppoe))
+#define NM_SETTING_PPPOE_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_PPPOE, NMSettingPppoeClass))
+#define NM_IS_SETTING_PPPOE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_PPPOE))
+#define NM_IS_SETTING_PPPOE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_PPPOE))
+#define NM_SETTING_PPPOE_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_PPPOE, NMSettingPppoeClass))
+
+#define NM_SETTING_PPPOE_SETTING_NAME "pppoe"
+
+#define NM_SETTING_PPPOE_PARENT         "parent"
+#define NM_SETTING_PPPOE_SERVICE        "service"
+#define NM_SETTING_PPPOE_USERNAME       "username"
+#define NM_SETTING_PPPOE_PASSWORD       "password"
+#define NM_SETTING_PPPOE_PASSWORD_FLAGS "password-flags"
+
+typedef struct _NMSettingPppoeClass NMSettingPppoeClass;
+
+GType nm_setting_pppoe_get_type(void);
+
+NMSetting *nm_setting_pppoe_new(void);
+NM_AVAILABLE_IN_1_10
+const char *         nm_setting_pppoe_get_parent(NMSettingPppoe *setting);
+const char *         nm_setting_pppoe_get_service(NMSettingPppoe *setting);
+const char *         nm_setting_pppoe_get_username(NMSettingPppoe *setting);
+const char *         nm_setting_pppoe_get_password(NMSettingPppoe *setting);
+NMSettingSecretFlags nm_setting_pppoe_get_password_flags(NMSettingPppoe *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_PPPOE_H__ */
diff --git a/src/libnm-core-public/nm-setting-proxy.h b/src/libnm-core-public/nm-setting-proxy.h
new file mode 100644
index 00000000..a10786ab
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-proxy.h
@@ -0,0 +1,67 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2016 Atul Anand <atulhjp@gmail.com>.
+ */
+
+#ifndef __NM_SETTING_PROXY_H__
+#define __NM_SETTING_PROXY_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+/**
+ * NMSettingProxyMethod:
+ * @NM_SETTING_PROXY_METHOD_NONE: No Proxy for the Connection
+ * @NM_SETTING_PROXY_METHOD_AUTO: DHCP obtained Proxy/ Manual override
+ *
+ * The Proxy method.
+ *
+ * Since: 1.6
+ */
+typedef enum {
+    NM_SETTING_PROXY_METHOD_NONE = 0,
+    NM_SETTING_PROXY_METHOD_AUTO = 1,
+} NMSettingProxyMethod;
+
+#define NM_TYPE_SETTING_PROXY (nm_setting_proxy_get_type())
+#define NM_SETTING_PROXY(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_PROXY, NMSettingProxy))
+#define NM_SETTING_PROXY_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_PROXY, NMSettingProxyClass))
+#define NM_IS_SETTING_PROXY(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_PROXY))
+#define NM_IS_SETTING_PROXY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_PROXY))
+#define NM_SETTING_PROXY_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_PROXY, NMSettingProxyClass))
+
+#define NM_SETTING_PROXY_SETTING_NAME "proxy"
+
+#define NM_SETTING_PROXY_METHOD       "method"
+#define NM_SETTING_PROXY_BROWSER_ONLY "browser-only"
+#define NM_SETTING_PROXY_PAC_URL      "pac-url"
+#define NM_SETTING_PROXY_PAC_SCRIPT   "pac-script"
+
+typedef struct _NMSettingProxyClass NMSettingProxyClass;
+
+NM_AVAILABLE_IN_1_6
+GType nm_setting_proxy_get_type(void);
+
+NM_AVAILABLE_IN_1_6
+NMSetting *nm_setting_proxy_new(void);
+
+NM_AVAILABLE_IN_1_6
+NMSettingProxyMethod nm_setting_proxy_get_method(NMSettingProxy *setting);
+NM_AVAILABLE_IN_1_6
+gboolean nm_setting_proxy_get_browser_only(NMSettingProxy *setting);
+NM_AVAILABLE_IN_1_6
+const char *nm_setting_proxy_get_pac_url(NMSettingProxy *setting);
+NM_AVAILABLE_IN_1_6
+const char *nm_setting_proxy_get_pac_script(NMSettingProxy *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_PROXY_H__ */
diff --git a/src/libnm-core-public/nm-setting-serial.h b/src/libnm-core-public/nm-setting-serial.h
new file mode 100644
index 00000000..b3b0421a
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-serial.h
@@ -0,0 +1,63 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_SERIAL_H__
+#define __NM_SETTING_SERIAL_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_SERIAL (nm_setting_serial_get_type())
+#define NM_SETTING_SERIAL(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_SERIAL, NMSettingSerial))
+#define NM_SETTING_SERIAL_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_SERIAL, NMSettingSerialClass))
+#define NM_IS_SETTING_SERIAL(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_SERIAL))
+#define NM_IS_SETTING_SERIAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_SERIAL))
+#define NM_SETTING_SERIAL_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_SERIAL, NMSettingSerialClass))
+
+#define NM_SETTING_SERIAL_SETTING_NAME "serial"
+
+/**
+ * NMSettingSerialParity:
+ * @NM_SETTING_SERIAL_PARITY_NONE: No parity bits (default)
+ * @NM_SETTING_SERIAL_PARITY_EVEN: Even parity
+ * @NM_SETTING_SERIAL_PARITY_ODD: Odd parity
+ *
+ * The parity setting of a serial port.
+ */
+typedef enum {
+    NM_SETTING_SERIAL_PARITY_NONE = 0,
+    NM_SETTING_SERIAL_PARITY_EVEN,
+    NM_SETTING_SERIAL_PARITY_ODD
+} NMSettingSerialParity;
+
+#define NM_SETTING_SERIAL_BAUD       "baud"
+#define NM_SETTING_SERIAL_BITS       "bits"
+#define NM_SETTING_SERIAL_PARITY     "parity"
+#define NM_SETTING_SERIAL_STOPBITS   "stopbits"
+#define NM_SETTING_SERIAL_SEND_DELAY "send-delay"
+
+typedef struct _NMSettingSerialClass NMSettingSerialClass;
+
+GType nm_setting_serial_get_type(void);
+
+NMSetting *           nm_setting_serial_new(void);
+guint                 nm_setting_serial_get_baud(NMSettingSerial *setting);
+guint                 nm_setting_serial_get_bits(NMSettingSerial *setting);
+NMSettingSerialParity nm_setting_serial_get_parity(NMSettingSerial *setting);
+guint                 nm_setting_serial_get_stopbits(NMSettingSerial *setting);
+guint64               nm_setting_serial_get_send_delay(NMSettingSerial *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_SERIAL_H__ */
diff --git a/src/libnm-core-public/nm-setting-sriov.h b/src/libnm-core-public/nm-setting-sriov.h
new file mode 100644
index 00000000..fe5fc376
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-sriov.h
@@ -0,0 +1,118 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2018 Red Hat, Inc.
+ */
+
+#ifndef NM_SETTING_SRIOV_H
+#define NM_SETTING_SRIOV_H
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_SRIOV (nm_setting_sriov_get_type())
+#define NM_SETTING_SRIOV(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_SRIOV, NMSettingSriov))
+#define NM_SETTING_SRIOV_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_SRIOV, NMSettingSriovClass))
+#define NM_IS_SETTING_SRIOV(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_SRIOV))
+#define NM_IS_SETTING_SRIOV_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_SRIOV))
+#define NM_SETTING_SRIOV_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_SRIOV, NMSettingSriovClass))
+
+#define NM_SETTING_SRIOV_SETTING_NAME "sriov"
+
+#define NM_SETTING_SRIOV_TOTAL_VFS         "total-vfs"
+#define NM_SETTING_SRIOV_VFS               "vfs"
+#define NM_SETTING_SRIOV_AUTOPROBE_DRIVERS "autoprobe-drivers"
+
+#define NM_SRIOV_VF_ATTRIBUTE_MAC         "mac"
+#define NM_SRIOV_VF_ATTRIBUTE_SPOOF_CHECK "spoof-check"
+#define NM_SRIOV_VF_ATTRIBUTE_TRUST       "trust"
+#define NM_SRIOV_VF_ATTRIBUTE_MIN_TX_RATE "min-tx-rate"
+#define NM_SRIOV_VF_ATTRIBUTE_MAX_TX_RATE "max-tx-rate"
+
+typedef struct _NMSettingSriovClass NMSettingSriovClass;
+typedef struct _NMSriovVF           NMSriovVF;
+
+/**
+ * NMSriovVFVlanProtocol:
+ * @NM_SRIOV_VF_VLAN_PROTOCOL_802_1Q:  use 802.1Q
+ * @NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD: use 802.1ad
+ *
+ * #NMSriovVFVlanProtocol indicates the VLAN protocol to use.
+ *
+ * Since: 1.14
+ */
+typedef enum {
+    NM_SRIOV_VF_VLAN_PROTOCOL_802_1Q  = 0,
+    NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD = 1,
+} NMSriovVFVlanProtocol;
+
+NM_AVAILABLE_IN_1_14
+GType nm_setting_sriov_get_type(void);
+NM_AVAILABLE_IN_1_14
+NMSetting *nm_setting_sriov_new(void);
+NM_AVAILABLE_IN_1_14
+guint nm_setting_sriov_get_total_vfs(NMSettingSriov *setting);
+NM_AVAILABLE_IN_1_14
+guint nm_setting_sriov_get_num_vfs(NMSettingSriov *setting);
+NM_AVAILABLE_IN_1_14
+NMSriovVF *nm_setting_sriov_get_vf(NMSettingSriov *setting, guint idx);
+NM_AVAILABLE_IN_1_14
+void nm_setting_sriov_add_vf(NMSettingSriov *setting, NMSriovVF *vf);
+NM_AVAILABLE_IN_1_14
+void nm_setting_sriov_remove_vf(NMSettingSriov *setting, guint idx);
+NM_AVAILABLE_IN_1_14
+gboolean nm_setting_sriov_remove_vf_by_index(NMSettingSriov *setting, guint index);
+NM_AVAILABLE_IN_1_14
+void nm_setting_sriov_clear_vfs(NMSettingSriov *setting);
+NM_AVAILABLE_IN_1_14
+NMTernary nm_setting_sriov_get_autoprobe_drivers(NMSettingSriov *setting);
+
+NM_AVAILABLE_IN_1_14
+gboolean nm_sriov_vf_add_vlan(NMSriovVF *vf, guint vlan_id);
+NM_AVAILABLE_IN_1_14
+gboolean nm_sriov_vf_remove_vlan(NMSriovVF *vf, guint vlan_id);
+NM_AVAILABLE_IN_1_14
+const guint *nm_sriov_vf_get_vlan_ids(const NMSriovVF *vf, guint *length);
+NM_AVAILABLE_IN_1_14
+void nm_sriov_vf_set_vlan_qos(NMSriovVF *vf, guint vlan_id, guint32 qos);
+NM_AVAILABLE_IN_1_14
+void nm_sriov_vf_set_vlan_protocol(NMSriovVF *vf, guint vlan_id, NMSriovVFVlanProtocol protocol);
+NM_AVAILABLE_IN_1_14
+guint32 nm_sriov_vf_get_vlan_qos(const NMSriovVF *vf, guint vlan_id);
+NM_AVAILABLE_IN_1_14
+NMSriovVFVlanProtocol nm_sriov_vf_get_vlan_protocol(const NMSriovVF *vf, guint vlan_id);
+
+NM_AVAILABLE_IN_1_14
+GType nm_sriov_vf_get_type(void);
+NM_AVAILABLE_IN_1_14
+NMSriovVF *nm_sriov_vf_new(guint index);
+NM_AVAILABLE_IN_1_14
+void nm_sriov_vf_ref(NMSriovVF *vf);
+NM_AVAILABLE_IN_1_14
+void nm_sriov_vf_unref(NMSriovVF *vf);
+NM_AVAILABLE_IN_1_14
+gboolean nm_sriov_vf_equal(const NMSriovVF *vf, const NMSriovVF *other);
+NM_AVAILABLE_IN_1_14
+NMSriovVF *nm_sriov_vf_dup(const NMSriovVF *vf);
+NM_AVAILABLE_IN_1_14
+guint nm_sriov_vf_get_index(const NMSriovVF *vf);
+NM_AVAILABLE_IN_1_14
+void nm_sriov_vf_set_attribute(NMSriovVF *vf, const char *name, GVariant *value);
+NM_AVAILABLE_IN_1_14
+const char **nm_sriov_vf_get_attribute_names(const NMSriovVF *vf);
+NM_AVAILABLE_IN_1_14
+GVariant *nm_sriov_vf_get_attribute(const NMSriovVF *vf, const char *name);
+NM_AVAILABLE_IN_1_14
+gboolean
+nm_sriov_vf_attribute_validate(const char *name, GVariant *value, gboolean *known, GError **error);
+
+G_END_DECLS
+
+#endif /* NM_SETTING_SRIOV_H */
diff --git a/src/libnm-core-public/nm-setting-tc-config.h b/src/libnm-core-public/nm-setting-tc-config.h
new file mode 100644
index 00000000..a2bc9a0d
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-tc-config.h
@@ -0,0 +1,162 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2017 Red Hat, Inc.
+ */
+
+#ifndef NM_SETTING_TC_CONFIG_H
+#define NM_SETTING_TC_CONFIG_H
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+typedef struct NMTCQdisc NMTCQdisc;
+
+NM_AVAILABLE_IN_1_12
+GType nm_tc_qdisc_get_type(void);
+
+NM_AVAILABLE_IN_1_12
+NMTCQdisc *nm_tc_qdisc_new(const char *kind, guint32 parent, GError **error);
+
+NM_AVAILABLE_IN_1_12
+void nm_tc_qdisc_ref(NMTCQdisc *qdisc);
+NM_AVAILABLE_IN_1_12
+void nm_tc_qdisc_unref(NMTCQdisc *qdisc);
+NM_AVAILABLE_IN_1_12
+gboolean nm_tc_qdisc_equal(NMTCQdisc *qdisc, NMTCQdisc *other);
+
+NM_AVAILABLE_IN_1_12
+NMTCQdisc *nm_tc_qdisc_dup(NMTCQdisc *qdisc);
+
+NM_AVAILABLE_IN_1_12
+const char *nm_tc_qdisc_get_kind(NMTCQdisc *qdisc);
+NM_AVAILABLE_IN_1_12
+guint32 nm_tc_qdisc_get_handle(NMTCQdisc *qdisc);
+NM_AVAILABLE_IN_1_12
+void nm_tc_qdisc_set_handle(NMTCQdisc *qdisc, guint32 handle);
+NM_AVAILABLE_IN_1_12
+guint32 nm_tc_qdisc_get_parent(NMTCQdisc *qdisc);
+
+NM_AVAILABLE_IN_1_18
+const char **nm_tc_qdisc_get_attribute_names(NMTCQdisc *qdisc);
+NM_AVAILABLE_IN_1_18
+GVariant *nm_tc_qdisc_get_attribute(NMTCQdisc *qdisc, const char *name);
+NM_AVAILABLE_IN_1_18
+void nm_tc_qdisc_set_attribute(NMTCQdisc *qdisc, const char *name, GVariant *value);
+
+typedef struct NMTCAction NMTCAction;
+
+NM_AVAILABLE_IN_1_12
+GType nm_tc_action_get_type(void);
+
+NM_AVAILABLE_IN_1_12
+NMTCAction *nm_tc_action_new(const char *kind, GError **error);
+
+NM_AVAILABLE_IN_1_12
+void nm_tc_action_ref(NMTCAction *action);
+NM_AVAILABLE_IN_1_12
+void nm_tc_action_unref(NMTCAction *action);
+NM_AVAILABLE_IN_1_12
+gboolean nm_tc_action_equal(NMTCAction *action, NMTCAction *other);
+
+NM_AVAILABLE_IN_1_12
+NMTCAction *nm_tc_action_dup(NMTCAction *action);
+
+NM_AVAILABLE_IN_1_12
+const char *nm_tc_action_get_kind(NMTCAction *action);
+
+NM_AVAILABLE_IN_1_12
+char **nm_tc_action_get_attribute_names(NMTCAction *action);
+NM_AVAILABLE_IN_1_12
+GVariant *nm_tc_action_get_attribute(NMTCAction *action, const char *name);
+NM_AVAILABLE_IN_1_12
+void nm_tc_action_set_attribute(NMTCAction *action, const char *name, GVariant *value);
+
+typedef struct NMTCTfilter NMTCTfilter;
+
+NM_AVAILABLE_IN_1_12
+GType nm_tc_tfilter_get_type(void);
+
+NM_AVAILABLE_IN_1_12
+NMTCTfilter *nm_tc_tfilter_new(const char *kind, guint32 parent, GError **error);
+
+NM_AVAILABLE_IN_1_12
+void nm_tc_tfilter_ref(NMTCTfilter *tfilter);
+NM_AVAILABLE_IN_1_12
+void nm_tc_tfilter_unref(NMTCTfilter *tfilter);
+NM_AVAILABLE_IN_1_12
+gboolean nm_tc_tfilter_equal(NMTCTfilter *tfilter, NMTCTfilter *other);
+
+NM_AVAILABLE_IN_1_12
+NMTCTfilter *nm_tc_tfilter_dup(NMTCTfilter *tfilter);
+
+NM_AVAILABLE_IN_1_12
+const char *nm_tc_tfilter_get_kind(NMTCTfilter *tfilter);
+NM_AVAILABLE_IN_1_12
+guint32 nm_tc_tfilter_get_handle(NMTCTfilter *tfilter);
+NM_AVAILABLE_IN_1_12
+void nm_tc_tfilter_set_handle(NMTCTfilter *tfilter, guint32 handle);
+NM_AVAILABLE_IN_1_12
+guint32 nm_tc_tfilter_get_parent(NMTCTfilter *tfilter);
+NM_AVAILABLE_IN_1_12
+NMTCAction *nm_tc_tfilter_get_action(NMTCTfilter *tfilter);
+NM_AVAILABLE_IN_1_12
+void nm_tc_tfilter_set_action(NMTCTfilter *tfilter, NMTCAction *action);
+
+#define NM_TYPE_SETTING_TC_CONFIG (nm_setting_tc_config_get_type())
+#define NM_SETTING_TC_CONFIG(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_TC_CONFIG, NMSettingTCConfig))
+#define NM_SETTING_TC_CONFIG_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_TC_CONFIG, NMSettingTCConfigClass))
+#define NM_IS_SETTING_TC_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_TC_CONFIG))
+#define NM_IS_SETTING_TC_CONFIG_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_TC_CONFIG))
+#define NM_SETTING_TC_CONFIG_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_TC_CONFIG, NMSettingTCConfigClass))
+
+#define NM_SETTING_TC_CONFIG_SETTING_NAME "tc"
+
+#define NM_SETTING_TC_CONFIG_QDISCS   "qdiscs"
+#define NM_SETTING_TC_CONFIG_TFILTERS "tfilters"
+
+typedef struct _NMSettingTCConfigClass NMSettingTCConfigClass;
+
+GType nm_setting_tc_config_get_type(void);
+
+NM_AVAILABLE_IN_1_12
+NMSetting *nm_setting_tc_config_new(void);
+
+NM_AVAILABLE_IN_1_12
+guint nm_setting_tc_config_get_num_qdiscs(NMSettingTCConfig *setting);
+NM_AVAILABLE_IN_1_12
+NMTCQdisc *nm_setting_tc_config_get_qdisc(NMSettingTCConfig *setting, guint idx);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_tc_config_add_qdisc(NMSettingTCConfig *setting, NMTCQdisc *qdisc);
+NM_AVAILABLE_IN_1_12
+void nm_setting_tc_config_remove_qdisc(NMSettingTCConfig *setting, guint idx);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_tc_config_remove_qdisc_by_value(NMSettingTCConfig *setting, NMTCQdisc *qdisc);
+NM_AVAILABLE_IN_1_12
+void nm_setting_tc_config_clear_qdiscs(NMSettingTCConfig *setting);
+
+NM_AVAILABLE_IN_1_12
+guint nm_setting_tc_config_get_num_tfilters(NMSettingTCConfig *setting);
+NM_AVAILABLE_IN_1_12
+NMTCTfilter *nm_setting_tc_config_get_tfilter(NMSettingTCConfig *setting, guint idx);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_tc_config_add_tfilter(NMSettingTCConfig *setting, NMTCTfilter *tfilter);
+NM_AVAILABLE_IN_1_12
+void nm_setting_tc_config_remove_tfilter(NMSettingTCConfig *setting, guint idx);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_tc_config_remove_tfilter_by_value(NMSettingTCConfig *setting,
+                                                      NMTCTfilter *      tfilter);
+NM_AVAILABLE_IN_1_12
+void nm_setting_tc_config_clear_tfilters(NMSettingTCConfig *setting);
+
+G_END_DECLS
+
+#endif /* NM_SETTING_TC_CONFIG_H */
diff --git a/src/libnm-core-public/nm-setting-team-port.h b/src/libnm-core-public/nm-setting-team-port.h
new file mode 100644
index 00000000..7acd9bf2
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-team-port.h
@@ -0,0 +1,75 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
+ */
+
+#ifndef __NM_SETTING_TEAM_PORT_H__
+#define __NM_SETTING_TEAM_PORT_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+#include "nm-setting-team.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_TEAM_PORT (nm_setting_team_port_get_type())
+#define NM_SETTING_TEAM_PORT(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_TEAM_PORT, NMSettingTeamPort))
+#define NM_SETTING_TEAM_PORT_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_TEAM_PORT, NMSettingTeamPortClass))
+#define NM_IS_SETTING_TEAM_PORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_TEAM_PORT))
+#define NM_IS_SETTING_TEAM_PORT_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_TEAM_PORT))
+#define NM_SETTING_TEAM_PORT_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_TEAM_PORT, NMSettingTeamPortClass))
+
+#define NM_SETTING_TEAM_PORT_SETTING_NAME "team-port"
+
+#define NM_SETTING_TEAM_PORT_CONFIG        "config"
+#define NM_SETTING_TEAM_PORT_QUEUE_ID      "queue-id"
+#define NM_SETTING_TEAM_PORT_PRIO          "prio"
+#define NM_SETTING_TEAM_PORT_STICKY        "sticky"
+#define NM_SETTING_TEAM_PORT_LACP_PRIO     "lacp-prio"
+#define NM_SETTING_TEAM_PORT_LACP_KEY      "lacp-key"
+#define NM_SETTING_TEAM_PORT_LINK_WATCHERS "link-watchers"
+
+#define NM_SETTING_TEAM_PORT_QUEUE_ID_DEFAULT  -1
+#define NM_SETTING_TEAM_PORT_LACP_PRIO_DEFAULT 255
+
+typedef struct _NMSettingTeamPortClass NMSettingTeamPortClass;
+
+GType nm_setting_team_port_get_type(void);
+
+NMSetting *nm_setting_team_port_new(void);
+
+const char *nm_setting_team_port_get_config(NMSettingTeamPort *setting);
+NM_AVAILABLE_IN_1_12
+int nm_setting_team_port_get_queue_id(NMSettingTeamPort *setting);
+NM_AVAILABLE_IN_1_12
+int nm_setting_team_port_get_prio(NMSettingTeamPort *setting);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_team_port_get_sticky(NMSettingTeamPort *setting);
+NM_AVAILABLE_IN_1_12
+int nm_setting_team_port_get_lacp_prio(NMSettingTeamPort *setting);
+NM_AVAILABLE_IN_1_12
+int nm_setting_team_port_get_lacp_key(NMSettingTeamPort *setting);
+NM_AVAILABLE_IN_1_12
+guint nm_setting_team_port_get_num_link_watchers(NMSettingTeamPort *setting);
+NM_AVAILABLE_IN_1_12
+NMTeamLinkWatcher *nm_setting_team_port_get_link_watcher(NMSettingTeamPort *setting, guint idx);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_team_port_add_link_watcher(NMSettingTeamPort *setting,
+                                               NMTeamLinkWatcher *link_watcher);
+NM_AVAILABLE_IN_1_12
+void nm_setting_team_port_remove_link_watcher(NMSettingTeamPort *setting, guint idx);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_team_port_remove_link_watcher_by_value(NMSettingTeamPort *setting,
+                                                           NMTeamLinkWatcher *link_watcher);
+NM_AVAILABLE_IN_1_12
+void nm_setting_team_port_clear_link_watchers(NMSettingTeamPort *setting);
+G_END_DECLS
+
+#endif /* __NM_SETTING_TEAM_PORT_H__ */
diff --git a/src/libnm-core-public/nm-setting-team.h b/src/libnm-core-public/nm-setting-team.h
new file mode 100644
index 00000000..5ed7ac36
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-team.h
@@ -0,0 +1,212 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
+ */
+
+#ifndef __NM_SETTING_TEAM_H__
+#define __NM_SETTING_TEAM_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+/**
+ * NMTeamLinkWatcherArpPingFlags:
+ * @NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE: no one among the arp_ping link watcher
+ *    boolean options ('validate_active', 'validate_inactive', 'send_always') is
+ *    enabled (set to true).
+ * @NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_ACTIVE: the arp_ping link watcher
+ *    option 'validate_active' is enabled (set to true).
+ * @NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE: the arp_ping link watcher
+ *    option 'validate_inactive' is enabled (set to true).
+ * @NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS: the arp_ping link watcher option
+ *    'send_always' is enabled (set to true).
+ */
+typedef enum {                                                           /*< flags >*/
+               NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE              = 0, /*< skip >*/
+               NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_ACTIVE   = 0x2,
+               NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE = 0x4,
+               NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS       = 0x8,
+} NMTeamLinkWatcherArpPingFlags;
+
+#define NM_TEAM_LINK_WATCHER_ETHTOOL   "ethtool"
+#define NM_TEAM_LINK_WATCHER_ARP_PING  "arp_ping"
+#define NM_TEAM_LINK_WATCHER_NSNA_PING "nsna_ping"
+
+typedef struct NMTeamLinkWatcher NMTeamLinkWatcher;
+
+GType nm_team_link_watcher_get_type(void);
+
+NM_AVAILABLE_IN_1_12
+NMTeamLinkWatcher *nm_team_link_watcher_new_ethtool(int delay_up, int delay_down, GError **error);
+NM_AVAILABLE_IN_1_12
+NMTeamLinkWatcher *nm_team_link_watcher_new_nsna_ping(int         init_wait,
+                                                      int         interval,
+                                                      int         missed_max,
+                                                      const char *target_host,
+                                                      GError **   error);
+NM_AVAILABLE_IN_1_12
+NMTeamLinkWatcher *nm_team_link_watcher_new_arp_ping(int                           init_wait,
+                                                     int                           interval,
+                                                     int                           missed_max,
+                                                     const char *                  target_host,
+                                                     const char *                  source_host,
+                                                     NMTeamLinkWatcherArpPingFlags flags,
+                                                     GError **                     error);
+NM_AVAILABLE_IN_1_16
+NMTeamLinkWatcher *nm_team_link_watcher_new_arp_ping2(int                           init_wait,
+                                                      int                           interval,
+                                                      int                           missed_max,
+                                                      int                           vlanid,
+                                                      const char *                  target_host,
+                                                      const char *                  source_host,
+                                                      NMTeamLinkWatcherArpPingFlags flags,
+                                                      GError **                     error);
+NM_AVAILABLE_IN_1_12
+void nm_team_link_watcher_ref(NMTeamLinkWatcher *watcher);
+NM_AVAILABLE_IN_1_12
+void nm_team_link_watcher_unref(NMTeamLinkWatcher *watcher);
+NM_AVAILABLE_IN_1_12
+gboolean nm_team_link_watcher_equal(const NMTeamLinkWatcher *watcher,
+                                    const NMTeamLinkWatcher *other);
+NM_AVAILABLE_IN_1_12
+NMTeamLinkWatcher *nm_team_link_watcher_dup(const NMTeamLinkWatcher *watcher);
+NM_AVAILABLE_IN_1_12
+const char *nm_team_link_watcher_get_name(const NMTeamLinkWatcher *watcher);
+NM_AVAILABLE_IN_1_12
+int nm_team_link_watcher_get_delay_up(const NMTeamLinkWatcher *watcher);
+NM_AVAILABLE_IN_1_12
+int nm_team_link_watcher_get_delay_down(const NMTeamLinkWatcher *watcher);
+NM_AVAILABLE_IN_1_12
+int nm_team_link_watcher_get_init_wait(const NMTeamLinkWatcher *watcher);
+NM_AVAILABLE_IN_1_12
+int nm_team_link_watcher_get_interval(const NMTeamLinkWatcher *watcher);
+NM_AVAILABLE_IN_1_12
+int nm_team_link_watcher_get_missed_max(const NMTeamLinkWatcher *watcher);
+NM_AVAILABLE_IN_1_12
+const char *nm_team_link_watcher_get_target_host(const NMTeamLinkWatcher *watcher);
+NM_AVAILABLE_IN_1_12
+const char *nm_team_link_watcher_get_source_host(const NMTeamLinkWatcher *watcher);
+NM_AVAILABLE_IN_1_12
+NMTeamLinkWatcherArpPingFlags nm_team_link_watcher_get_flags(const NMTeamLinkWatcher *watcher);
+NM_AVAILABLE_IN_1_16
+int nm_team_link_watcher_get_vlanid(const NMTeamLinkWatcher *watcher);
+
+#define NM_TYPE_SETTING_TEAM (nm_setting_team_get_type())
+#define NM_SETTING_TEAM(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_TEAM, NMSettingTeam))
+#define NM_SETTING_TEAM_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_TEAM, NMSettingTeamClass))
+#define NM_IS_SETTING_TEAM(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_TEAM))
+#define NM_IS_SETTING_TEAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_TEAM))
+#define NM_SETTING_TEAM_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_TEAM, NMSettingTeamClass))
+
+#define NM_SETTING_TEAM_SETTING_NAME "team"
+
+#define NM_SETTING_TEAM_CONFIG                      "config"
+#define NM_SETTING_TEAM_NOTIFY_PEERS_COUNT          "notify-peers-count"
+#define NM_SETTING_TEAM_NOTIFY_PEERS_INTERVAL       "notify-peers-interval"
+#define NM_SETTING_TEAM_MCAST_REJOIN_COUNT          "mcast-rejoin-count"
+#define NM_SETTING_TEAM_MCAST_REJOIN_INTERVAL       "mcast-rejoin-interval"
+#define NM_SETTING_TEAM_RUNNER                      "runner"
+#define NM_SETTING_TEAM_RUNNER_HWADDR_POLICY        "runner-hwaddr-policy"
+#define NM_SETTING_TEAM_RUNNER_TX_HASH              "runner-tx-hash"
+#define NM_SETTING_TEAM_RUNNER_TX_BALANCER          "runner-tx-balancer"
+#define NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL "runner-tx-balancer-interval"
+#define NM_SETTING_TEAM_RUNNER_ACTIVE               "runner-active"
+#define NM_SETTING_TEAM_RUNNER_FAST_RATE            "runner-fast-rate"
+#define NM_SETTING_TEAM_RUNNER_SYS_PRIO             "runner-sys-prio"
+#define NM_SETTING_TEAM_RUNNER_MIN_PORTS            "runner-min-ports"
+#define NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY    "runner-agg-select-policy"
+#define NM_SETTING_TEAM_LINK_WATCHERS               "link-watchers"
+
+#define NM_SETTING_TEAM_RUNNER_BROADCAST    "broadcast"
+#define NM_SETTING_TEAM_RUNNER_ROUNDROBIN   "roundrobin"
+#define NM_SETTING_TEAM_RUNNER_RANDOM       "random"
+#define NM_SETTING_TEAM_RUNNER_ACTIVEBACKUP "activebackup"
+#define NM_SETTING_TEAM_RUNNER_LOADBALANCE  "loadbalance"
+#define NM_SETTING_TEAM_RUNNER_LACP         "lacp"
+
+#define NM_SETTING_TEAM_RUNNER_HWADDR_POLICY_SAME_ALL    "same_all"
+#define NM_SETTING_TEAM_RUNNER_HWADDR_POLICY_BY_ACTIVE   "by_active"
+#define NM_SETTING_TEAM_RUNNER_HWADDR_POLICY_ONLY_ACTIVE "only_active"
+
+#define NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_LACP_PRIO        "lacp_prio"
+#define NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_LACP_PRIO_STABLE "lacp_prio_stable"
+#define NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_BANDWIDTH        "bandwidth"
+#define NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_COUNT            "count"
+#define NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_PORT_CONFIG      "port_config"
+
+#define NM_SETTING_TEAM_NOTIFY_PEERS_COUNT_ACTIVEBACKUP_DEFAULT 1
+#define NM_SETTING_TEAM_NOTIFY_MCAST_COUNT_ACTIVEBACKUP_DEFAULT 1
+#define NM_SETTING_TEAM_RUNNER_DEFAULT                          NM_SETTING_TEAM_RUNNER_ROUNDROBIN
+#define NM_SETTING_TEAM_RUNNER_HWADDR_POLICY_DEFAULT            NM_SETTING_TEAM_RUNNER_HWADDR_POLICY_SAME_ALL
+#define NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL_DEFAULT     50
+#define NM_SETTING_TEAM_RUNNER_SYS_PRIO_DEFAULT                 65535
+#define NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_DEFAULT \
+    NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_LACP_PRIO
+
+typedef struct _NMSettingTeamClass NMSettingTeamClass;
+
+GType nm_setting_team_get_type(void);
+
+NMSetting *nm_setting_team_new(void);
+
+const char *nm_setting_team_get_config(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+int nm_setting_team_get_notify_peers_count(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+int nm_setting_team_get_notify_peers_interval(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+int nm_setting_team_get_mcast_rejoin_count(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+int nm_setting_team_get_mcast_rejoin_interval(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+const char *nm_setting_team_get_runner(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+const char *nm_setting_team_get_runner_hwaddr_policy(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+const char *nm_setting_team_get_runner_tx_balancer(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+int nm_setting_team_get_runner_tx_balancer_interval(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_team_get_runner_active(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_team_get_runner_fast_rate(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+int nm_setting_team_get_runner_sys_prio(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+int nm_setting_team_get_runner_min_ports(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+const char *nm_setting_team_get_runner_agg_select_policy(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_team_remove_runner_tx_hash_by_value(NMSettingTeam *setting, const char *txhash);
+NM_AVAILABLE_IN_1_12
+guint nm_setting_team_get_num_runner_tx_hash(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+const char *nm_setting_team_get_runner_tx_hash(NMSettingTeam *setting, guint idx);
+NM_AVAILABLE_IN_1_12
+void nm_setting_team_remove_runner_tx_hash(NMSettingTeam *setting, guint idx);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_team_add_runner_tx_hash(NMSettingTeam *setting, const char *txhash);
+NM_AVAILABLE_IN_1_12
+guint nm_setting_team_get_num_link_watchers(NMSettingTeam *setting);
+NM_AVAILABLE_IN_1_12
+NMTeamLinkWatcher *nm_setting_team_get_link_watcher(NMSettingTeam *setting, guint idx);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_team_add_link_watcher(NMSettingTeam *setting, NMTeamLinkWatcher *link_watcher);
+NM_AVAILABLE_IN_1_12
+void nm_setting_team_remove_link_watcher(NMSettingTeam *setting, guint idx);
+NM_AVAILABLE_IN_1_12
+gboolean nm_setting_team_remove_link_watcher_by_value(NMSettingTeam *    setting,
+                                                      NMTeamLinkWatcher *link_watcher);
+NM_AVAILABLE_IN_1_12
+void nm_setting_team_clear_link_watchers(NMSettingTeam *setting);
+G_END_DECLS
+
+#endif /* __NM_SETTING_TEAM_H__ */
diff --git a/src/libnm-core-public/nm-setting-tun.h b/src/libnm-core-public/nm-setting-tun.h
new file mode 100644
index 00000000..b7376995
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-tun.h
@@ -0,0 +1,71 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2015 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_TUN_H__
+#define __NM_SETTING_TUN_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_TUN (nm_setting_tun_get_type())
+#define NM_SETTING_TUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_TUN, NMSettingTun))
+#define NM_SETTING_TUN_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_TUNCONFIG, NMSettingTunClass))
+#define NM_IS_SETTING_TUN(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_TUN))
+#define NM_IS_SETTING_TUN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_TUN))
+#define NM_SETTING_TUN_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_TUN, NMSettingTunClass))
+
+#define NM_SETTING_TUN_SETTING_NAME "tun"
+
+#define NM_SETTING_TUN_MODE        "mode"
+#define NM_SETTING_TUN_OWNER       "owner"
+#define NM_SETTING_TUN_GROUP       "group"
+#define NM_SETTING_TUN_PI          "pi"
+#define NM_SETTING_TUN_VNET_HDR    "vnet-hdr"
+#define NM_SETTING_TUN_MULTI_QUEUE "multi-queue"
+
+/**
+ * NMSettingTunMode:
+ * @NM_SETTING_TUN_MODE_UNKNOWN: an unknown device type
+ * @NM_SETTING_TUN_MODE_TUN: a TUN device
+ * @NM_SETTING_TUN_MODE_TAP: a TAP device
+ *
+ * #NMSettingTunMode values indicate the device type (TUN/TAP)
+ */
+typedef enum {
+    NM_SETTING_TUN_MODE_UNKNOWN = 0,
+    NM_SETTING_TUN_MODE_TUN     = 1,
+    NM_SETTING_TUN_MODE_TAP     = 2,
+} NMSettingTunMode;
+
+typedef struct _NMSettingTunClass NMSettingTunClass;
+
+NM_AVAILABLE_IN_1_2
+GType nm_setting_tun_get_type(void);
+NM_AVAILABLE_IN_1_2
+NMSetting *nm_setting_tun_new(void);
+
+NM_AVAILABLE_IN_1_2
+NMSettingTunMode nm_setting_tun_get_mode(NMSettingTun *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_tun_get_owner(NMSettingTun *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_tun_get_group(NMSettingTun *setting);
+NM_AVAILABLE_IN_1_2
+gboolean nm_setting_tun_get_pi(NMSettingTun *setting);
+NM_AVAILABLE_IN_1_2
+gboolean nm_setting_tun_get_vnet_hdr(NMSettingTun *setting);
+NM_AVAILABLE_IN_1_2
+gboolean nm_setting_tun_get_multi_queue(NMSettingTun *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_TUN_H__ */
diff --git a/src/libnm-core-public/nm-setting-user.h b/src/libnm-core-public/nm-setting-user.h
new file mode 100644
index 00000000..b151cd3e
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-user.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2017 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_USER_H__
+#define __NM_SETTING_USER_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_USER (nm_setting_user_get_type())
+#define NM_SETTING_USER(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_USER, NMSettingUser))
+#define NM_SETTING_USER_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_USER, NMSettingUserClass))
+#define NM_IS_SETTING_USER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_USER))
+#define NM_IS_SETTING_USER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_USER))
+#define NM_SETTING_USER_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_USER, NMSettingUserClass))
+
+#define NM_SETTING_USER_SETTING_NAME "user"
+
+#define NM_SETTING_USER_DATA "data"
+
+typedef struct _NMSettingUserClass NMSettingUserClass;
+
+NM_AVAILABLE_IN_1_8
+GType nm_setting_user_get_type(void);
+
+NM_AVAILABLE_IN_1_8
+NMSetting *nm_setting_user_new(void);
+
+NM_AVAILABLE_IN_1_8
+const char *const *nm_setting_user_get_keys(NMSettingUser *setting, guint *out_len);
+
+NM_AVAILABLE_IN_1_8
+const char *nm_setting_user_get_data(NMSettingUser *setting, const char *key);
+NM_AVAILABLE_IN_1_8
+gboolean
+nm_setting_user_set_data(NMSettingUser *setting, const char *key, const char *val, GError **error);
+
+NM_AVAILABLE_IN_1_8
+gboolean nm_setting_user_check_key(const char *key, GError **error);
+NM_AVAILABLE_IN_1_8
+gboolean nm_setting_user_check_val(const char *val, GError **error);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_USER_H__ */
diff --git a/src/libnm-core-public/nm-setting-veth.h b/src/libnm-core-public/nm-setting-veth.h
new file mode 100644
index 00000000..5dbc1927
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-veth.h
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2020 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_VETH_H__
+#define __NM_SETTING_VETH_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_VETH (nm_setting_veth_get_type())
+#define NM_SETTING_VETH(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_VETH, NMSettingVeth))
+#define NM_IS_SETTING_VETH(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_VETH))
+#define NM_IS_SETTING_VETH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_VETH))
+#define NM_SETTING_VETH_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_VETH, NMSettingVethClass))
+
+#define NM_SETTING_VETH_SETTING_NAME "veth"
+
+#define NM_SETTING_VETH_PEER "peer"
+
+typedef struct _NMSettingVethClass NMSettingVethClass;
+
+NM_AVAILABLE_IN_1_30
+GType nm_setting_veth_get_type(void);
+NM_AVAILABLE_IN_1_30
+NMSetting *nm_setting_veth_new(void);
+
+NM_AVAILABLE_IN_1_30
+const char *nm_setting_veth_get_peer(NMSettingVeth *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_VETH_H__ */
diff --git a/src/libnm-core-public/nm-setting-vlan.h b/src/libnm-core-public/nm-setting-vlan.h
new file mode 100644
index 00000000..1d2470b6
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-vlan.h
@@ -0,0 +1,121 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2011 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_VLAN_H__
+#define __NM_SETTING_VLAN_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_VLAN (nm_setting_vlan_get_type())
+#define NM_SETTING_VLAN(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_VLAN, NMSettingVlan))
+#define NM_SETTING_VLAN_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_VLANCONFIG, NMSettingVlanClass))
+#define NM_IS_SETTING_VLAN(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_VLAN))
+#define NM_IS_SETTING_VLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_VLAN))
+#define NM_SETTING_VLAN_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_VLAN, NMSettingVlanClass))
+
+#define NM_SETTING_VLAN_SETTING_NAME "vlan"
+
+#define NM_SETTING_VLAN_PARENT               "parent"
+#define NM_SETTING_VLAN_ID                   "id"
+#define NM_SETTING_VLAN_FLAGS                "flags"
+#define NM_SETTING_VLAN_INGRESS_PRIORITY_MAP "ingress-priority-map"
+#define NM_SETTING_VLAN_EGRESS_PRIORITY_MAP  "egress-priority-map"
+
+typedef struct _NMSettingVlanClass NMSettingVlanClass;
+
+/**
+ * NMVlanPriorityMap:
+ * @NM_VLAN_INGRESS_MAP: map for incoming data
+ * @NM_VLAN_EGRESS_MAP: map for outgoing data
+ *
+ * A selector for traffic priority maps; these map Linux SKB priorities
+ * to 802.1p priorities used in VLANs.
+ **/
+/* clang-format off */
+typedef enum {
+    NM_VLAN_INGRESS_MAP,
+    NM_VLAN_EGRESS_MAP
+} NMVlanPriorityMap;
+/* clang-format on */
+
+/**
+ * NMVlanFlags:
+ * @NM_VLAN_FLAG_REORDER_HEADERS: indicates that this interface should reorder
+ *  outgoing packet headers to look more like a non-VLAN Ethernet interface
+ * @NM_VLAN_FLAG_GVRP: indicates that this interface should use GVRP to register
+ *  itself with its switch
+ * @NM_VLAN_FLAG_LOOSE_BINDING: indicates that this interface's operating
+ *  state is tied to the underlying network interface but other details
+ *  (like routing) are not.
+ * @NM_VLAN_FLAG_MVRP: indicates that this interface should use MVRP to register
+ *  itself with its switch
+ *
+ * #NMVlanFlags values control the behavior of the VLAN interface.
+ **/
+typedef enum { /*< flags >*/
+
+               NM_VLAN_FLAG_REORDER_HEADERS = 0x1,
+               NM_VLAN_FLAG_GVRP            = 0x2,
+               NM_VLAN_FLAG_LOOSE_BINDING   = 0x4,
+               NM_VLAN_FLAG_MVRP            = 0x8,
+
+               /* NOTE: if adding flags update nm-setting-vlan.c::verify() */
+
+               /* NOTE: these flags must correspond to the value from the kernel
+                * header files. */
+} NMVlanFlags;
+
+#define NM_VLAN_FLAGS_ALL                                                          \
+    (NM_VLAN_FLAG_REORDER_HEADERS | NM_VLAN_FLAG_GVRP | NM_VLAN_FLAG_LOOSE_BINDING \
+     | NM_VLAN_FLAG_MVRP)
+
+GType      nm_setting_vlan_get_type(void);
+NMSetting *nm_setting_vlan_new(void);
+
+const char *nm_setting_vlan_get_parent(NMSettingVlan *setting);
+guint32     nm_setting_vlan_get_id(NMSettingVlan *setting);
+guint32     nm_setting_vlan_get_flags(NMSettingVlan *setting);
+
+gint32 nm_setting_vlan_get_num_priorities(NMSettingVlan *setting, NMVlanPriorityMap map);
+
+gboolean nm_setting_vlan_get_priority(NMSettingVlan *   setting,
+                                      NMVlanPriorityMap map,
+                                      guint32           idx,
+                                      guint32 *         out_from,
+                                      guint32 *         out_to);
+
+gboolean nm_setting_vlan_add_priority(NMSettingVlan *   setting,
+                                      NMVlanPriorityMap map,
+                                      guint32           from,
+                                      guint32           to);
+
+void nm_setting_vlan_remove_priority(NMSettingVlan *setting, NMVlanPriorityMap map, guint32 idx);
+
+gboolean nm_setting_vlan_remove_priority_by_value(NMSettingVlan *   setting,
+                                                  NMVlanPriorityMap map,
+                                                  guint32           from,
+                                                  guint32           to);
+
+gboolean nm_setting_vlan_remove_priority_str_by_value(NMSettingVlan *   setting,
+                                                      NMVlanPriorityMap map,
+                                                      const char *      str);
+
+void nm_setting_vlan_clear_priorities(NMSettingVlan *setting, NMVlanPriorityMap map);
+
+gboolean
+nm_setting_vlan_add_priority_str(NMSettingVlan *setting, NMVlanPriorityMap map, const char *str);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_VLAN_H__ */
diff --git a/src/libnm-core-public/nm-setting-vpn.h b/src/libnm-core-public/nm-setting-vpn.h
new file mode 100644
index 00000000..3a74d0b1
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-vpn.h
@@ -0,0 +1,76 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2013 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_VPN_H__
+#define __NM_SETTING_VPN_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_VPN (nm_setting_vpn_get_type())
+#define NM_SETTING_VPN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_VPN, NMSettingVpn))
+#define NM_SETTING_VPN_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_VPN, NMSettingVpnClass))
+#define NM_IS_SETTING_VPN(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_VPN))
+#define NM_IS_SETTING_VPN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_VPN))
+#define NM_SETTING_VPN_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_VPN, NMSettingVpnClass))
+
+#define NM_SETTING_VPN_SETTING_NAME "vpn"
+
+#define NM_SETTING_VPN_SERVICE_TYPE "service-type"
+#define NM_SETTING_VPN_USER_NAME    "user-name"
+#define NM_SETTING_VPN_PERSISTENT   "persistent"
+#define NM_SETTING_VPN_DATA         "data"
+#define NM_SETTING_VPN_SECRETS      "secrets"
+#define NM_SETTING_VPN_TIMEOUT      "timeout"
+
+typedef struct _NMSettingVpnClass NMSettingVpnClass;
+
+/**
+ * NMVpnIterFunc:
+ * @key: the name of the data or secret item
+ * @value: the value of the data or secret item
+ * @user_data: User data passed to nm_setting_vpn_foreach_data_item() or
+ * nm_setting_vpn_foreach_secret()
+ **/
+typedef void (*NMVpnIterFunc)(const char *key, const char *value, gpointer user_data);
+
+GType nm_setting_vpn_get_type(void);
+
+NMSetting * nm_setting_vpn_new(void);
+const char *nm_setting_vpn_get_service_type(NMSettingVpn *setting);
+const char *nm_setting_vpn_get_user_name(NMSettingVpn *setting);
+gboolean    nm_setting_vpn_get_persistent(NMSettingVpn *setting);
+
+guint32     nm_setting_vpn_get_num_data_items(NMSettingVpn *setting);
+void        nm_setting_vpn_add_data_item(NMSettingVpn *setting, const char *key, const char *item);
+const char *nm_setting_vpn_get_data_item(NMSettingVpn *setting, const char *key);
+gboolean    nm_setting_vpn_remove_data_item(NMSettingVpn *setting, const char *key);
+void
+nm_setting_vpn_foreach_data_item(NMSettingVpn *setting, NMVpnIterFunc func, gpointer user_data);
+NM_AVAILABLE_IN_1_12
+const char **nm_setting_vpn_get_data_keys(NMSettingVpn *setting, guint *out_length);
+
+guint32     nm_setting_vpn_get_num_secrets(NMSettingVpn *setting);
+void        nm_setting_vpn_add_secret(NMSettingVpn *setting, const char *key, const char *secret);
+const char *nm_setting_vpn_get_secret(NMSettingVpn *setting, const char *key);
+gboolean    nm_setting_vpn_remove_secret(NMSettingVpn *setting, const char *key);
+void nm_setting_vpn_foreach_secret(NMSettingVpn *setting, NMVpnIterFunc func, gpointer user_data);
+NM_AVAILABLE_IN_1_12
+const char **nm_setting_vpn_get_secret_keys(NMSettingVpn *setting, guint *out_length);
+
+NM_AVAILABLE_IN_1_2
+guint32 nm_setting_vpn_get_timeout(NMSettingVpn *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_VPN_H__ */
diff --git a/src/libnm-core-public/nm-setting-vrf.h b/src/libnm-core-public/nm-setting-vrf.h
new file mode 100644
index 00000000..afa044b8
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-vrf.h
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#ifndef __NM_SETTING_VRF_H__
+#define __NM_SETTING_VRF_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_VRF (nm_setting_vrf_get_type())
+#define NM_SETTING_VRF(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_VRF, NMSettingVrf))
+#define NM_SETTING_VRF_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_VRFCONFIG, NMSettingVrfClass))
+#define NM_IS_SETTING_VRF(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_VRF))
+#define NM_IS_SETTING_VRF_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_VRF))
+#define NM_SETTING_VRF_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_VRF, NMSettingVrfClass))
+
+#define NM_SETTING_VRF_SETTING_NAME "vrf"
+
+#define NM_SETTING_VRF_TABLE "table"
+
+typedef struct _NMSettingVrfClass NMSettingVrfClass;
+
+NM_AVAILABLE_IN_1_24
+GType nm_setting_vrf_get_type(void);
+NM_AVAILABLE_IN_1_24
+NMSetting *nm_setting_vrf_new(void);
+NM_AVAILABLE_IN_1_24
+guint32 nm_setting_vrf_get_table(NMSettingVrf *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_VRF_H__ */
diff --git a/src/libnm-core-public/nm-setting-vxlan.h b/src/libnm-core-public/nm-setting-vxlan.h
new file mode 100644
index 00000000..6531f1d2
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-vxlan.h
@@ -0,0 +1,87 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2015 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_VXLAN_H__
+#define __NM_SETTING_VXLAN_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_VXLAN (nm_setting_vxlan_get_type())
+#define NM_SETTING_VXLAN(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_VXLAN, NMSettingVxlan))
+#define NM_SETTING_VXLAN_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_VXLANCONFIG, NMSettingVxlanClass))
+#define NM_IS_SETTING_VXLAN(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_VXLAN))
+#define NM_IS_SETTING_VXLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_VXLAN))
+#define NM_SETTING_VXLAN_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_VXLAN, NMSettingVxlanClass))
+
+#define NM_SETTING_VXLAN_SETTING_NAME "vxlan"
+
+#define NM_SETTING_VXLAN_PARENT           "parent"
+#define NM_SETTING_VXLAN_ID               "id"
+#define NM_SETTING_VXLAN_LOCAL            "local"
+#define NM_SETTING_VXLAN_REMOTE           "remote"
+#define NM_SETTING_VXLAN_SOURCE_PORT_MIN  "source-port-min"
+#define NM_SETTING_VXLAN_SOURCE_PORT_MAX  "source-port-max"
+#define NM_SETTING_VXLAN_DESTINATION_PORT "destination-port"
+#define NM_SETTING_VXLAN_TOS              "tos"
+#define NM_SETTING_VXLAN_TTL              "ttl"
+#define NM_SETTING_VXLAN_AGEING           "ageing"
+#define NM_SETTING_VXLAN_LIMIT            "limit"
+#define NM_SETTING_VXLAN_PROXY            "proxy"
+#define NM_SETTING_VXLAN_LEARNING         "learning"
+#define NM_SETTING_VXLAN_RSC              "rsc"
+#define NM_SETTING_VXLAN_L2_MISS          "l2-miss"
+#define NM_SETTING_VXLAN_L3_MISS          "l3-miss"
+
+typedef struct _NMSettingVxlanClass NMSettingVxlanClass;
+
+NM_AVAILABLE_IN_1_2
+GType nm_setting_vxlan_get_type(void);
+NM_AVAILABLE_IN_1_2
+NMSetting *nm_setting_vxlan_new(void);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_vxlan_get_parent(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_vxlan_get_id(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_vxlan_get_local(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+const char *nm_setting_vxlan_get_remote(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_vxlan_get_source_port_min(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_vxlan_get_source_port_max(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_vxlan_get_destination_port(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_vxlan_get_tos(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_vxlan_get_ttl(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_vxlan_get_ageing(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+guint nm_setting_vxlan_get_limit(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+gboolean nm_setting_vxlan_get_proxy(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+gboolean nm_setting_vxlan_get_learning(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+gboolean nm_setting_vxlan_get_rsc(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+gboolean nm_setting_vxlan_get_l2_miss(NMSettingVxlan *setting);
+NM_AVAILABLE_IN_1_2
+gboolean nm_setting_vxlan_get_l3_miss(NMSettingVxlan *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_VXLAN_H__ */
diff --git a/src/libnm-core-public/nm-setting-wifi-p2p.h b/src/libnm-core-public/nm-setting-wifi-p2p.h
new file mode 100644
index 00000000..029b75f0
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-wifi-p2p.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_WIFI_P2P_H__
+#define __NM_SETTING_WIFI_P2P_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+#include "nm-setting-wireless-security.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_WIFI_P2P (nm_setting_wifi_p2p_get_type())
+#define NM_SETTING_WIFI_P2P(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_WIFI_P2P, NMSettingWifiP2P))
+#define NM_SETTING_WIFI_P2P_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_WIFI_P2P, NMSettingWifiP2PClass))
+#define NM_IS_SETTING_WIFI_P2P(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_WIFI_P2P))
+#define NM_IS_SETTING_WIFI_P2P_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_WIFI_P2P))
+#define NM_SETTING_WIFI_P2P_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_WIFI_P2P, NMSettingWifiP2PClass))
+
+#define NM_SETTING_WIFI_P2P_SETTING_NAME "wifi-p2p"
+
+/**
+ * NM_SETTING_WIFI_P2P_PEER:
+ *
+ * The mac address of the peer to connect to.
+ */
+#define NM_SETTING_WIFI_P2P_PEER       "peer"
+#define NM_SETTING_WIFI_P2P_WPS_METHOD "wps-method"
+#define NM_SETTING_WIFI_P2P_WFD_IES    "wfd-ies"
+
+typedef struct _NMSettingWifiP2PClass NMSettingWifiP2PClass;
+
+NM_AVAILABLE_IN_1_16
+GType nm_setting_wifi_p2p_get_type(void);
+
+NM_AVAILABLE_IN_1_16
+NMSetting *nm_setting_wifi_p2p_new(void);
+
+NM_AVAILABLE_IN_1_16
+const char *nm_setting_wifi_p2p_get_peer(NMSettingWifiP2P *setting);
+
+NM_AVAILABLE_IN_1_16
+NMSettingWirelessSecurityWpsMethod nm_setting_wifi_p2p_get_wps_method(NMSettingWifiP2P *setting);
+
+NM_AVAILABLE_IN_1_16
+GBytes *nm_setting_wifi_p2p_get_wfd_ies(NMSettingWifiP2P *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_WIFI_P2P_H__ */
diff --git a/src/libnm-core-public/nm-setting-wimax.h b/src/libnm-core-public/nm-setting-wimax.h
new file mode 100644
index 00000000..12125fb2
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-wimax.h
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2009 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_WIMAX_H__
+#define __NM_SETTING_WIMAX_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_WIMAX (nm_setting_wimax_get_type())
+#define NM_SETTING_WIMAX(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_WIMAX, NMSettingWimax))
+#define NM_SETTING_WIMAX_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_WIMAX, NMSettingWimaxClass))
+#define NM_IS_SETTING_WIMAX(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_WIMAX))
+#define NM_IS_SETTING_WIMAX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_WIMAX))
+#define NM_SETTING_WIMAX_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_WIMAX, NMSettingWimaxClass))
+
+#define NM_SETTING_WIMAX_SETTING_NAME "wimax"
+
+#define NM_SETTING_WIMAX_NETWORK_NAME "network-name"
+#define NM_SETTING_WIMAX_MAC_ADDRESS  "mac-address"
+
+typedef struct _NMSettingWimaxClass NMSettingWimaxClass;
+
+NM_DEPRECATED_IN_1_2
+GType nm_setting_wimax_get_type(void);
+
+NM_DEPRECATED_IN_1_2
+NMSetting *nm_setting_wimax_new(void);
+NM_DEPRECATED_IN_1_2
+const char *nm_setting_wimax_get_network_name(NMSettingWimax *setting);
+NM_DEPRECATED_IN_1_2
+const char *nm_setting_wimax_get_mac_address(NMSettingWimax *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_WIMAX_H__ */
diff --git a/src/libnm-core-public/nm-setting-wired.h b/src/libnm-core-public/nm-setting-wired.h
new file mode 100644
index 00000000..33308604
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-wired.h
@@ -0,0 +1,132 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2014 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_WIRED_H__
+#define __NM_SETTING_WIRED_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_WIRED (nm_setting_wired_get_type())
+#define NM_SETTING_WIRED(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_WIRED, NMSettingWired))
+#define NM_SETTING_WIRED_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_WIRED, NMSettingWiredClass))
+#define NM_IS_SETTING_WIRED(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_WIRED))
+#define NM_IS_SETTING_WIRED_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_WIRED))
+#define NM_SETTING_WIRED_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_WIRED, NMSettingWiredClass))
+
+#define NM_SETTING_WIRED_SETTING_NAME "802-3-ethernet"
+
+/**
+ * NMSettingWiredWakeOnLan:
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_NONE: Wake-on-LAN disabled
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_PHY: Wake on PHY activity
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST: Wake on unicast messages
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST: Wake on multicast messages
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_BROADCAST: Wake on broadcast messages
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_ARP: Wake on ARP
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC: Wake on magic packet
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_ALL: Wake on all events. This does not
+ *   include the exclusive flags @NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT or
+ *   @NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE.
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT: Use the default value
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE: Don't change configured settings
+ * @NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS: Mask of flags that are
+ *   incompatible with other flags
+ *
+ * Options for #NMSettingWired:wake-on-lan. Note that not all options
+ * are supported by all devices.
+ *
+ * Since: 1.2
+ */
+typedef enum {                                             /*< flags >*/
+               NM_SETTING_WIRED_WAKE_ON_LAN_NONE      = 0, /*< skip >*/
+               NM_SETTING_WIRED_WAKE_ON_LAN_PHY       = 0x2,
+               NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST   = 0x4,
+               NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST = 0x8,
+               NM_SETTING_WIRED_WAKE_ON_LAN_BROADCAST = 0x10,
+               NM_SETTING_WIRED_WAKE_ON_LAN_ARP       = 0x20,
+               NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC     = 0x40,
+
+               NM_SETTING_WIRED_WAKE_ON_LAN_ALL = 0x7E, /*< skip >*/
+
+               NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT         = 0x1,
+               NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE          = 0x8000,
+               NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS = 0x8001, /*< skip >*/
+} NMSettingWiredWakeOnLan;
+
+#define NM_SETTING_WIRED_PORT                      "port"
+#define NM_SETTING_WIRED_SPEED                     "speed"
+#define NM_SETTING_WIRED_DUPLEX                    "duplex"
+#define NM_SETTING_WIRED_AUTO_NEGOTIATE            "auto-negotiate"
+#define NM_SETTING_WIRED_MAC_ADDRESS               "mac-address"
+#define NM_SETTING_WIRED_CLONED_MAC_ADDRESS        "cloned-mac-address"
+#define NM_SETTING_WIRED_GENERATE_MAC_ADDRESS_MASK "generate-mac-address-mask"
+#define NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST     "mac-address-blacklist"
+#define NM_SETTING_WIRED_MTU                       "mtu"
+#define NM_SETTING_WIRED_S390_SUBCHANNELS          "s390-subchannels"
+#define NM_SETTING_WIRED_S390_NETTYPE              "s390-nettype"
+#define NM_SETTING_WIRED_S390_OPTIONS              "s390-options"
+#define NM_SETTING_WIRED_WAKE_ON_LAN               "wake-on-lan"
+#define NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD      "wake-on-lan-password"
+#define NM_SETTING_WIRED_ACCEPT_ALL_MAC_ADDRESSES  "accept-all-mac-addresses"
+
+typedef struct _NMSettingWiredClass NMSettingWiredClass;
+
+GType nm_setting_wired_get_type(void);
+
+NMSetting * nm_setting_wired_new(void);
+const char *nm_setting_wired_get_port(NMSettingWired *setting);
+guint32     nm_setting_wired_get_speed(NMSettingWired *setting);
+const char *nm_setting_wired_get_duplex(NMSettingWired *setting);
+gboolean    nm_setting_wired_get_auto_negotiate(NMSettingWired *setting);
+const char *nm_setting_wired_get_mac_address(NMSettingWired *setting);
+const char *nm_setting_wired_get_cloned_mac_address(NMSettingWired *setting);
+
+NM_AVAILABLE_IN_1_32
+NMTernary nm_setting_wired_get_accept_all_mac_addresses(NMSettingWired *setting);
+
+NM_AVAILABLE_IN_1_4
+const char *nm_setting_wired_get_generate_mac_address_mask(NMSettingWired *setting);
+
+const char *const *nm_setting_wired_get_mac_address_blacklist(NMSettingWired *setting);
+guint32            nm_setting_wired_get_num_mac_blacklist_items(NMSettingWired *setting);
+const char *       nm_setting_wired_get_mac_blacklist_item(NMSettingWired *setting, guint32 idx);
+gboolean nm_setting_wired_add_mac_blacklist_item(NMSettingWired *setting, const char *mac);
+void     nm_setting_wired_remove_mac_blacklist_item(NMSettingWired *setting, guint32 idx);
+gboolean nm_setting_wired_remove_mac_blacklist_item_by_value(NMSettingWired *setting,
+                                                             const char *    mac);
+void     nm_setting_wired_clear_mac_blacklist_items(NMSettingWired *setting);
+
+guint32 nm_setting_wired_get_mtu(NMSettingWired *setting);
+
+const char *const *nm_setting_wired_get_s390_subchannels(NMSettingWired *setting);
+const char *       nm_setting_wired_get_s390_nettype(NMSettingWired *setting);
+
+guint32     nm_setting_wired_get_num_s390_options(NMSettingWired *setting);
+gboolean    nm_setting_wired_get_s390_option(NMSettingWired *setting,
+                                             guint32         idx,
+                                             const char **   out_key,
+                                             const char **   out_value);
+const char *nm_setting_wired_get_s390_option_by_key(NMSettingWired *setting, const char *key);
+gboolean
+nm_setting_wired_add_s390_option(NMSettingWired *setting, const char *key, const char *value);
+gboolean     nm_setting_wired_remove_s390_option(NMSettingWired *setting, const char *key);
+const char **nm_setting_wired_get_valid_s390_options(NMSettingWired *setting);
+
+NMSettingWiredWakeOnLan nm_setting_wired_get_wake_on_lan(NMSettingWired *setting);
+const char *            nm_setting_wired_get_wake_on_lan_password(NMSettingWired *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_WIRED_H__ */
diff --git a/src/libnm-core-public/nm-setting-wireguard.h b/src/libnm-core-public/nm-setting-wireguard.h
new file mode 100644
index 00000000..3f046fc7
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-wireguard.h
@@ -0,0 +1,202 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2018 - 2019 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_WIREGUARD_H__
+#define __NM_SETTING_WIREGUARD_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+#include "nm-utils.h"
+
+G_BEGIN_DECLS
+
+/*****************************************************************************/
+
+#define NM_WIREGUARD_PUBLIC_KEY_LEN    32
+#define NM_WIREGUARD_SYMMETRIC_KEY_LEN 32
+
+/*****************************************************************************/
+
+typedef struct _NMWireGuardPeer NMWireGuardPeer;
+
+NM_AVAILABLE_IN_1_16
+GType nm_wireguard_peer_get_type(void);
+
+NM_AVAILABLE_IN_1_16
+NMWireGuardPeer *nm_wireguard_peer_new(void);
+
+NM_AVAILABLE_IN_1_16
+NMWireGuardPeer *nm_wireguard_peer_new_clone(const NMWireGuardPeer *self, gboolean with_secrets);
+
+NM_AVAILABLE_IN_1_16
+NMWireGuardPeer *nm_wireguard_peer_ref(NMWireGuardPeer *self);
+NM_AVAILABLE_IN_1_16
+void nm_wireguard_peer_unref(NMWireGuardPeer *self);
+
+NM_AVAILABLE_IN_1_16
+void nm_wireguard_peer_seal(NMWireGuardPeer *self);
+NM_AVAILABLE_IN_1_16
+gboolean nm_wireguard_peer_is_sealed(const NMWireGuardPeer *self);
+
+NM_AVAILABLE_IN_1_16
+const char *nm_wireguard_peer_get_public_key(const NMWireGuardPeer *self);
+NM_AVAILABLE_IN_1_16
+gboolean nm_wireguard_peer_set_public_key(NMWireGuardPeer *self,
+                                          const char *     public_key,
+                                          gboolean         accept_invalid);
+
+NM_AVAILABLE_IN_1_16
+const char *nm_wireguard_peer_get_preshared_key(const NMWireGuardPeer *self);
+NM_AVAILABLE_IN_1_16
+gboolean nm_wireguard_peer_set_preshared_key(NMWireGuardPeer *self,
+                                             const char *     preshared_key,
+                                             gboolean         accept_invalid);
+
+NM_AVAILABLE_IN_1_16
+NMSettingSecretFlags nm_wireguard_peer_get_preshared_key_flags(const NMWireGuardPeer *self);
+NM_AVAILABLE_IN_1_16
+void nm_wireguard_peer_set_preshared_key_flags(NMWireGuardPeer *    self,
+                                               NMSettingSecretFlags preshared_key_flags);
+
+NM_AVAILABLE_IN_1_16
+guint16 nm_wireguard_peer_get_persistent_keepalive(const NMWireGuardPeer *self);
+NM_AVAILABLE_IN_1_16
+void nm_wireguard_peer_set_persistent_keepalive(NMWireGuardPeer *self,
+                                                guint16          persistent_keepalive);
+
+NM_AVAILABLE_IN_1_16
+const char *nm_wireguard_peer_get_endpoint(const NMWireGuardPeer *self);
+NM_AVAILABLE_IN_1_16
+gboolean
+nm_wireguard_peer_set_endpoint(NMWireGuardPeer *self, const char *endpoint, gboolean allow_invalid);
+
+NM_AVAILABLE_IN_1_16
+guint nm_wireguard_peer_get_allowed_ips_len(const NMWireGuardPeer *self);
+NM_AVAILABLE_IN_1_16
+const char *
+nm_wireguard_peer_get_allowed_ip(const NMWireGuardPeer *self, guint idx, gboolean *out_is_valid);
+NM_AVAILABLE_IN_1_16
+void nm_wireguard_peer_clear_allowed_ips(NMWireGuardPeer *self);
+NM_AVAILABLE_IN_1_16
+gboolean nm_wireguard_peer_append_allowed_ip(NMWireGuardPeer *self,
+                                             const char *     allowed_ip,
+                                             gboolean         accept_invalid);
+NM_AVAILABLE_IN_1_16
+gboolean nm_wireguard_peer_remove_allowed_ip(NMWireGuardPeer *self, guint idx);
+
+NM_AVAILABLE_IN_1_16
+gboolean nm_wireguard_peer_is_valid(const NMWireGuardPeer *self,
+                                    gboolean               check_non_secrets,
+                                    gboolean               check_secrets,
+                                    GError **              error);
+
+NM_AVAILABLE_IN_1_16
+int nm_wireguard_peer_cmp(const NMWireGuardPeer *a,
+                          const NMWireGuardPeer *b,
+                          NMSettingCompareFlags  compare_flags);
+
+/*****************************************************************************/
+
+#define NM_TYPE_SETTING_WIREGUARD (nm_setting_wireguard_get_type())
+#define NM_SETTING_WIREGUARD(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_WIREGUARD, NMSettingWireGuard))
+#define NM_SETTING_WIREGUARD_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_WIREGUARD, NMSettingWireGuardClass))
+#define NM_IS_SETTING_WIREGUARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_WIREGUARD))
+#define NM_IS_SETTING_WIREGUARD_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_WIREGUARD))
+#define NM_SETTING_WIREGUARD_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_WIREGUARD, NMSettingWireGuardClass))
+
+#define NM_SETTING_WIREGUARD_SETTING_NAME "wireguard"
+
+#define NM_SETTING_WIREGUARD_FWMARK            "fwmark"
+#define NM_SETTING_WIREGUARD_LISTEN_PORT       "listen-port"
+#define NM_SETTING_WIREGUARD_PRIVATE_KEY       "private-key"
+#define NM_SETTING_WIREGUARD_PRIVATE_KEY_FLAGS "private-key-flags"
+
+#define NM_SETTING_WIREGUARD_PEERS "peers"
+
+#define NM_SETTING_WIREGUARD_MTU                    "mtu"
+#define NM_SETTING_WIREGUARD_PEER_ROUTES            "peer-routes"
+#define NM_SETTING_WIREGUARD_IP4_AUTO_DEFAULT_ROUTE "ip4-auto-default-route"
+#define NM_SETTING_WIREGUARD_IP6_AUTO_DEFAULT_ROUTE "ip6-auto-default-route"
+
+#define NM_WIREGUARD_PEER_ATTR_ALLOWED_IPS          "allowed-ips"
+#define NM_WIREGUARD_PEER_ATTR_ENDPOINT             "endpoint"
+#define NM_WIREGUARD_PEER_ATTR_PERSISTENT_KEEPALIVE "persistent-keepalive"
+#define NM_WIREGUARD_PEER_ATTR_PRESHARED_KEY        "preshared-key"
+#define NM_WIREGUARD_PEER_ATTR_PRESHARED_KEY_FLAGS  "preshared-key-flags"
+#define NM_WIREGUARD_PEER_ATTR_PUBLIC_KEY           "public-key"
+
+/*****************************************************************************/
+
+typedef struct _NMSettingWireGuardClass NMSettingWireGuardClass;
+
+NM_AVAILABLE_IN_1_16
+GType nm_setting_wireguard_get_type(void);
+
+NM_AVAILABLE_IN_1_16
+NMSetting *nm_setting_wireguard_new(void);
+
+/*****************************************************************************/
+
+NM_AVAILABLE_IN_1_16
+const char *nm_setting_wireguard_get_private_key(NMSettingWireGuard *self);
+
+NM_AVAILABLE_IN_1_16
+NMSettingSecretFlags nm_setting_wireguard_get_private_key_flags(NMSettingWireGuard *self);
+
+NM_AVAILABLE_IN_1_16
+guint16 nm_setting_wireguard_get_listen_port(NMSettingWireGuard *self);
+
+NM_AVAILABLE_IN_1_16
+guint32 nm_setting_wireguard_get_fwmark(NMSettingWireGuard *self);
+
+/*****************************************************************************/
+
+NM_AVAILABLE_IN_1_16
+guint nm_setting_wireguard_get_peers_len(NMSettingWireGuard *self);
+
+NM_AVAILABLE_IN_1_16
+NMWireGuardPeer *nm_setting_wireguard_get_peer(NMSettingWireGuard *self, guint idx);
+
+NM_AVAILABLE_IN_1_16
+NMWireGuardPeer *nm_setting_wireguard_get_peer_by_public_key(NMSettingWireGuard *self,
+                                                             const char *        public_key,
+                                                             guint *             out_idx);
+
+NM_AVAILABLE_IN_1_16
+void nm_setting_wireguard_set_peer(NMSettingWireGuard *self, NMWireGuardPeer *peer, guint idx);
+
+NM_AVAILABLE_IN_1_16
+void nm_setting_wireguard_append_peer(NMSettingWireGuard *self, NMWireGuardPeer *peer);
+
+NM_AVAILABLE_IN_1_16
+gboolean nm_setting_wireguard_remove_peer(NMSettingWireGuard *self, guint idx);
+
+NM_AVAILABLE_IN_1_16
+guint nm_setting_wireguard_clear_peers(NMSettingWireGuard *self);
+
+NM_AVAILABLE_IN_1_16
+gboolean nm_setting_wireguard_get_peer_routes(NMSettingWireGuard *self);
+
+NM_AVAILABLE_IN_1_16
+guint32 nm_setting_wireguard_get_mtu(NMSettingWireGuard *self);
+
+NM_AVAILABLE_IN_1_20
+NMTernary nm_setting_wireguard_get_ip4_auto_default_route(NMSettingWireGuard *self);
+
+NM_AVAILABLE_IN_1_20
+NMTernary nm_setting_wireguard_get_ip6_auto_default_route(NMSettingWireGuard *self);
+
+/*****************************************************************************/
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_WIREGUARD_H__ */
diff --git a/src/libnm-core-public/nm-setting-wireless-security.h b/src/libnm-core-public/nm-setting-wireless-security.h
new file mode 100644
index 00000000..cf662a37
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-wireless-security.h
@@ -0,0 +1,225 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2017 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_WIRELESS_SECURITY_H__
+#define __NM_SETTING_WIRELESS_SECURITY_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_WIRELESS_SECURITY (nm_setting_wireless_security_get_type())
+#define NM_SETTING_WIRELESS_SECURITY(obj)                          \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj),                             \
+                                NM_TYPE_SETTING_WIRELESS_SECURITY, \
+                                NMSettingWirelessSecurity))
+#define NM_SETTING_WIRELESS_SECURITY_CLASS(klass)               \
+    (G_TYPE_CHECK_CLASS_CAST((klass),                           \
+                             NM_TYPE_SETTING_WIRELESS_SECURITY, \
+                             NMSettingWirelessSecurityClass))
+#define NM_IS_SETTING_WIRELESS_SECURITY(obj) \
+    (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_WIRELESS_SECURITY))
+#define NM_IS_SETTING_WIRELESS_SECURITY_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_WIRELESS_SECURITY))
+#define NM_SETTING_WIRELESS_SECURITY_GET_CLASS(obj)               \
+    (G_TYPE_INSTANCE_GET_CLASS((obj),                             \
+                               NM_TYPE_SETTING_WIRELESS_SECURITY, \
+                               NMSettingWirelessSecurityClass))
+
+#define NM_SETTING_WIRELESS_SECURITY_SETTING_NAME "802-11-wireless-security"
+
+/**
+ * NMWepKeyType:
+ * @NM_WEP_KEY_TYPE_UNKNOWN: unknown WEP key type
+ * @NM_WEP_KEY_TYPE_KEY: indicates a hexadecimal or ASCII formatted WEP key.
+ * Hex keys are either 10 or 26 hexadecimal characters (ie "5f782f2f5f" or
+ * "732f2d712e4a394a375d366931"), while ASCII keys are either 5 or 13 ASCII
+ * characters (ie "abcde" or "blahblah99$*1").
+ * @NM_WEP_KEY_TYPE_PASSPHRASE: indicates a WEP passphrase (ex "I bought a duck
+ * on my way back from the market 235Q&^%^*%") instead of a hexadecimal or ASCII
+ * key.  Passphrases are between 8 and 64 characters inclusive and are hashed
+ * the actual WEP key using the MD5 hash algorithm.
+ * @NM_WEP_KEY_TYPE_LAST: placeholder value for bounds-checking
+ *
+ * The #NMWepKeyType values specify how any WEP keys present in the setting
+ * are interpreted.  There are no standards governing how to hash the various WEP
+ * key/passphrase formats into the actual WEP key.  Unfortunately some WEP keys
+ * can be interpreted in multiple ways, requiring the setting to specify how to
+ * interpret the any WEP keys.  For example, the key "732f2d712e4a394a375d366931"
+ * is both a valid Hexadecimal WEP key and a WEP passphrase.  Further, many
+ * ASCII keys are also valid WEP passphrases, but since passphrases and ASCII
+ * keys are hashed differently to determine the actual WEP key the type must be
+ * specified.
+ */
+typedef enum {
+    NM_WEP_KEY_TYPE_UNKNOWN    = 0,
+    NM_WEP_KEY_TYPE_KEY        = 1, /* Hex or ASCII */
+    NM_WEP_KEY_TYPE_PASSPHRASE = 2, /* 104/128-bit Passphrase */
+
+    NM_WEP_KEY_TYPE_LAST = NM_WEP_KEY_TYPE_PASSPHRASE, /*< skip >*/
+} NMWepKeyType;
+
+/**
+ * NMSettingWirelessSecurityPmf:
+ * @NM_SETTING_WIRELESS_SECURITY_PMF_DEFAULT: use the default value
+ * @NM_SETTING_WIRELESS_SECURITY_PMF_DISABLE: disable PMF
+ * @NM_SETTING_WIRELESS_SECURITY_PMF_OPTIONAL: enable PMF if the supplicant and the AP support it
+ * @NM_SETTING_WIRELESS_SECURITY_PMF_REQUIRED: require PMF and fail if not available
+ *
+ * These flags indicate whether PMF must be enabled.
+ **/
+typedef enum {
+    NM_SETTING_WIRELESS_SECURITY_PMF_DEFAULT  = 0,
+    NM_SETTING_WIRELESS_SECURITY_PMF_DISABLE  = 1,
+    NM_SETTING_WIRELESS_SECURITY_PMF_OPTIONAL = 2,
+    NM_SETTING_WIRELESS_SECURITY_PMF_REQUIRED = 3,
+    _NM_SETTING_WIRELESS_SECURITY_PMF_NUM,                                             /*< skip >*/
+    NM_SETTING_WIRELESS_SECURITY_PMF_LAST = _NM_SETTING_WIRELESS_SECURITY_PMF_NUM - 1, /*< skip >*/
+} NMSettingWirelessSecurityPmf;
+
+/**
+ * NMSettingWirelessSecurityWpsMethod:
+ * @NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_DEFAULT: Attempt whichever method AP supports
+ * @NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_DISABLED: WPS can not be used.
+ * @NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_AUTO: Use WPS, any method
+ * @NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_PBC: use WPS push-button method
+ * @NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_PIN: use PIN method
+ *
+ * Configure the use of WPS by a connection while it activates.
+ *
+ * Note: prior to 1.16, this was a GEnum type instead of a GFlags type
+ * although, with the same numeric values.
+ *
+ * Since: 1.10
+ **/
+typedef enum { /*< flags >*/
+               NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_DEFAULT  = 0x00000000,
+               NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_DISABLED = 0x00000001,
+               NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_AUTO     = 0x00000002,
+               NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_PBC      = 0x00000004,
+               NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_PIN      = 0x00000008,
+} NMSettingWirelessSecurityWpsMethod;
+
+/**
+ * NMSettingWirelessSecurityFils:
+ * @NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT: use the default value
+ * @NM_SETTING_WIRELESS_SECURITY_FILS_DISABLE: disable FILS
+ * @NM_SETTING_WIRELESS_SECURITY_FILS_OPTIONAL: enable FILS if the supplicant and the AP support it
+ * @NM_SETTING_WIRELESS_SECURITY_FILS_REQUIRED: require FILS and fail if not available
+ * @_NM_SETTING_WIRELESS_SECURITY_FILS_NUM: placeholder value for bounds-checking
+ * @NM_SETTING_WIRELESS_SECURITY_FILS_LAST: placeholder value for bounds-checking
+ *
+ * These flags indicate whether FILS must be enabled.
+ *
+ * Since: 1.12
+ **/
+/* clang-format off */
+typedef enum {
+    NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT  = 0,
+    NM_SETTING_WIRELESS_SECURITY_FILS_DISABLE  = 1,
+    NM_SETTING_WIRELESS_SECURITY_FILS_OPTIONAL = 2,
+    NM_SETTING_WIRELESS_SECURITY_FILS_REQUIRED = 3,
+    _NM_SETTING_WIRELESS_SECURITY_FILS_NUM, /*< skip >*/
+    NM_SETTING_WIRELESS_SECURITY_FILS_LAST = _NM_SETTING_WIRELESS_SECURITY_FILS_NUM - 1, /*< skip >*/
+} NMSettingWirelessSecurityFils;
+/* clang-format on */
+
+#define NM_SETTING_WIRELESS_SECURITY_KEY_MGMT            "key-mgmt"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX       "wep-tx-keyidx"
+#define NM_SETTING_WIRELESS_SECURITY_AUTH_ALG            "auth-alg"
+#define NM_SETTING_WIRELESS_SECURITY_PROTO               "proto"
+#define NM_SETTING_WIRELESS_SECURITY_PAIRWISE            "pairwise"
+#define NM_SETTING_WIRELESS_SECURITY_GROUP               "group"
+#define NM_SETTING_WIRELESS_SECURITY_PMF                 "pmf"
+#define NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME       "leap-username"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY0            "wep-key0"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY1            "wep-key1"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY2            "wep-key2"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY3            "wep-key3"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS       "wep-key-flags"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE        "wep-key-type"
+#define NM_SETTING_WIRELESS_SECURITY_PSK                 "psk"
+#define NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS           "psk-flags"
+#define NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD       "leap-password"
+#define NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS "leap-password-flags"
+#define NM_SETTING_WIRELESS_SECURITY_WPS_METHOD          "wps-method"
+#define NM_SETTING_WIRELESS_SECURITY_FILS                "fils"
+
+typedef struct _NMSettingWirelessSecurityClass NMSettingWirelessSecurityClass;
+
+GType nm_setting_wireless_security_get_type(void);
+
+NMSetting *nm_setting_wireless_security_new(void);
+
+const char *nm_setting_wireless_security_get_key_mgmt(NMSettingWirelessSecurity *setting);
+
+guint32     nm_setting_wireless_security_get_num_protos(NMSettingWirelessSecurity *setting);
+const char *nm_setting_wireless_security_get_proto(NMSettingWirelessSecurity *setting, guint32 i);
+gboolean    nm_setting_wireless_security_add_proto(NMSettingWirelessSecurity *setting,
+                                                   const char *               proto);
+void     nm_setting_wireless_security_remove_proto(NMSettingWirelessSecurity *setting, guint32 i);
+gboolean nm_setting_wireless_security_remove_proto_by_value(NMSettingWirelessSecurity *setting,
+                                                            const char *               proto);
+void     nm_setting_wireless_security_clear_protos(NMSettingWirelessSecurity *setting);
+
+guint32     nm_setting_wireless_security_get_num_pairwise(NMSettingWirelessSecurity *setting);
+const char *nm_setting_wireless_security_get_pairwise(NMSettingWirelessSecurity *setting,
+                                                      guint32                    i);
+gboolean    nm_setting_wireless_security_add_pairwise(NMSettingWirelessSecurity *setting,
+                                                      const char *               pairwise);
+void nm_setting_wireless_security_remove_pairwise(NMSettingWirelessSecurity *setting, guint32 i);
+gboolean nm_setting_wireless_security_remove_pairwise_by_value(NMSettingWirelessSecurity *setting,
+                                                               const char *               pairwise);
+void     nm_setting_wireless_security_clear_pairwise(NMSettingWirelessSecurity *setting);
+
+guint32     nm_setting_wireless_security_get_num_groups(NMSettingWirelessSecurity *setting);
+const char *nm_setting_wireless_security_get_group(NMSettingWirelessSecurity *setting, guint32 i);
+gboolean    nm_setting_wireless_security_add_group(NMSettingWirelessSecurity *setting,
+                                                   const char *               group);
+void     nm_setting_wireless_security_remove_group(NMSettingWirelessSecurity *setting, guint32 i);
+gboolean nm_setting_wireless_security_remove_group_by_value(NMSettingWirelessSecurity *setting,
+                                                            const char *               group);
+void     nm_setting_wireless_security_clear_groups(NMSettingWirelessSecurity *setting);
+
+NM_AVAILABLE_IN_1_10
+NMSettingWirelessSecurityPmf
+nm_setting_wireless_security_get_pmf(NMSettingWirelessSecurity *setting);
+
+const char *         nm_setting_wireless_security_get_psk(NMSettingWirelessSecurity *setting);
+NMSettingSecretFlags nm_setting_wireless_security_get_psk_flags(NMSettingWirelessSecurity *setting);
+
+const char *nm_setting_wireless_security_get_leap_username(NMSettingWirelessSecurity *setting);
+const char *nm_setting_wireless_security_get_leap_password(NMSettingWirelessSecurity *setting);
+NMSettingSecretFlags
+nm_setting_wireless_security_get_leap_password_flags(NMSettingWirelessSecurity *setting);
+
+const char *nm_setting_wireless_security_get_wep_key(NMSettingWirelessSecurity *setting,
+                                                     guint32                    idx);
+void        nm_setting_wireless_security_set_wep_key(NMSettingWirelessSecurity *setting,
+                                                     guint32                    idx,
+                                                     const char *               key);
+guint32     nm_setting_wireless_security_get_wep_tx_keyidx(NMSettingWirelessSecurity *setting);
+const char *nm_setting_wireless_security_get_auth_alg(NMSettingWirelessSecurity *setting);
+
+NMSettingSecretFlags
+             nm_setting_wireless_security_get_wep_key_flags(NMSettingWirelessSecurity *setting);
+NMWepKeyType nm_setting_wireless_security_get_wep_key_type(NMSettingWirelessSecurity *setting);
+
+NM_AVAILABLE_IN_1_10
+NMSettingWirelessSecurityWpsMethod
+nm_setting_wireless_security_get_wps_method(NMSettingWirelessSecurity *setting);
+
+NM_AVAILABLE_IN_1_12
+NMSettingWirelessSecurityFils
+nm_setting_wireless_security_get_fils(NMSettingWirelessSecurity *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_WIRELESS_SECURITY_H__ */
diff --git a/src/libnm-core-public/nm-setting-wireless.h b/src/libnm-core-public/nm-setting-wireless.h
new file mode 100644
index 00000000..0b45e2a3
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-wireless.h
@@ -0,0 +1,202 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2014 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_WIRELESS_H__
+#define __NM_SETTING_WIRELESS_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+#include "nm-setting-wireless-security.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_WIRELESS (nm_setting_wireless_get_type())
+#define NM_SETTING_WIRELESS(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_WIRELESS, NMSettingWireless))
+#define NM_SETTING_WIRELESS_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_WIRELESS, NMSettingWirelessClass))
+#define NM_IS_SETTING_WIRELESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_WIRELESS))
+#define NM_IS_SETTING_WIRELESS_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_WIRELESS))
+#define NM_SETTING_WIRELESS_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_WIRELESS, NMSettingWirelessClass))
+
+#define NM_SETTING_WIRELESS_SETTING_NAME "802-11-wireless"
+
+/**
+ * NMSettingWirelessWakeOnWLan:
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_NONE: Wake-on-WLAN disabled
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_ANY: Wake on any activity
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_DISCONNECT: Wake on disconnect
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_MAGIC: Wake on magic packet
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_GTK_REKEY_FAILURE: Wake on GTK rekey failure
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_EAP_IDENTITY_REQUEST: Wake on EAP identity request
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_4WAY_HANDSHAKE: Wake on 4way handshake
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_RFKILL_RELEASE: Wake on rfkill release
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_ALL: Wake on all events. This does not
+ *   include the exclusive flags @NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT or
+ *   @NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE.
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT: Use the default value
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE: Don't change configured settings
+ * @NM_SETTING_WIRELESS_WAKE_ON_WLAN_EXCLUSIVE_FLAGS: Mask of flags that are
+ *   incompatible with other flags
+ *
+ * Options for #NMSettingWireless:wake-on-wlan. Note that not all options
+ * are supported by all devices.
+ *
+ * Since: 1.12
+ */
+/* clang-format off */
+typedef enum {                                                            /*< flags >*/
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_NONE                 = 0, /*< skip >*/
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_ANY                  = 0x2,
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_DISCONNECT           = 0x4,
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_MAGIC                = 0x8,
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_GTK_REKEY_FAILURE    = 0x10,
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_EAP_IDENTITY_REQUEST = 0x20,
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_4WAY_HANDSHAKE       = 0x40,
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_RFKILL_RELEASE       = 0x80,
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_TCP                  = 0x100,
+
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_ALL = 0x1FE,
+
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT = 0x1,
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE  = 0x8000,
+
+    NM_SETTING_WIRELESS_WAKE_ON_WLAN_EXCLUSIVE_FLAGS = NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT | NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE, /*< skip >*/
+} NMSettingWirelessWakeOnWLan;
+/* clang-format on */
+
+#define NM_SETTING_WIRELESS_SSID                      "ssid"
+#define NM_SETTING_WIRELESS_MODE                      "mode"
+#define NM_SETTING_WIRELESS_BAND                      "band"
+#define NM_SETTING_WIRELESS_CHANNEL                   "channel"
+#define NM_SETTING_WIRELESS_BSSID                     "bssid"
+#define NM_SETTING_WIRELESS_RATE                      "rate"
+#define NM_SETTING_WIRELESS_TX_POWER                  "tx-power"
+#define NM_SETTING_WIRELESS_MAC_ADDRESS               "mac-address"
+#define NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS        "cloned-mac-address"
+#define NM_SETTING_WIRELESS_GENERATE_MAC_ADDRESS_MASK "generate-mac-address-mask"
+#define NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST     "mac-address-blacklist"
+#define NM_SETTING_WIRELESS_MTU                       "mtu"
+#define NM_SETTING_WIRELESS_SEEN_BSSIDS               "seen-bssids"
+#define NM_SETTING_WIRELESS_HIDDEN                    "hidden"
+#define NM_SETTING_WIRELESS_POWERSAVE                 "powersave"
+#define NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION "mac-address-randomization"
+#define NM_SETTING_WIRELESS_WAKE_ON_WLAN              "wake-on-wlan"
+#define NM_SETTING_WIRELESS_AP_ISOLATION              "ap-isolation"
+
+/**
+ * NM_SETTING_WIRELESS_MODE_ADHOC:
+ *
+ * Indicates Ad-Hoc mode where no access point is expected to be present.
+ */
+#define NM_SETTING_WIRELESS_MODE_ADHOC "adhoc"
+
+/**
+ * NM_SETTING_WIRELESS_MODE_AP:
+ *
+ * Indicates AP/master mode where the wireless device is started as an access
+ * point/hotspot.
+ */
+#define NM_SETTING_WIRELESS_MODE_AP "ap"
+
+/**
+ * NM_SETTING_WIRELESS_MODE_INFRA:
+ *
+ * Indicates infrastructure mode where an access point is expected to be present
+ * for this connection.
+ */
+#define NM_SETTING_WIRELESS_MODE_INFRA "infrastructure"
+
+/**
+ * NM_SETTING_WIRELESS_MODE_MESH:
+ *
+ * Indicates that the connection should create a mesh point.
+ *
+ * Since: 1.20
+ */
+#define NM_SETTING_WIRELESS_MODE_MESH "mesh"
+
+/**
+ * NMSettingWirelessPowersave:
+ * @NM_SETTING_WIRELESS_POWERSAVE_DEFAULT: use the default value
+ * @NM_SETTING_WIRELESS_POWERSAVE_IGNORE: don't touch existing setting
+ * @NM_SETTING_WIRELESS_POWERSAVE_DISABLE: disable powersave
+ * @NM_SETTING_WIRELESS_POWERSAVE_ENABLE: enable powersave
+ *
+ * These flags indicate whether wireless powersave must be enabled.
+ **/
+typedef enum {
+    NM_SETTING_WIRELESS_POWERSAVE_DEFAULT = 0,
+    NM_SETTING_WIRELESS_POWERSAVE_IGNORE  = 1,
+    NM_SETTING_WIRELESS_POWERSAVE_DISABLE = 2,
+    NM_SETTING_WIRELESS_POWERSAVE_ENABLE  = 3,
+    _NM_SETTING_WIRELESS_POWERSAVE_NUM,                                          /*< skip >*/
+    NM_SETTING_WIRELESS_POWERSAVE_LAST = _NM_SETTING_WIRELESS_POWERSAVE_NUM - 1, /*< skip >*/
+} NMSettingWirelessPowersave;
+
+typedef struct _NMSettingWirelessClass NMSettingWirelessClass;
+
+GType nm_setting_wireless_get_type(void);
+
+NMSetting *nm_setting_wireless_new(void);
+
+GBytes *    nm_setting_wireless_get_ssid(NMSettingWireless *setting);
+const char *nm_setting_wireless_get_mode(NMSettingWireless *setting);
+const char *nm_setting_wireless_get_band(NMSettingWireless *setting);
+guint32     nm_setting_wireless_get_channel(NMSettingWireless *setting);
+const char *nm_setting_wireless_get_bssid(NMSettingWireless *setting);
+guint32     nm_setting_wireless_get_rate(NMSettingWireless *setting);
+guint32     nm_setting_wireless_get_tx_power(NMSettingWireless *setting);
+const char *nm_setting_wireless_get_mac_address(NMSettingWireless *setting);
+const char *nm_setting_wireless_get_cloned_mac_address(NMSettingWireless *setting);
+
+NM_AVAILABLE_IN_1_4
+const char *nm_setting_wireless_get_generate_mac_address_mask(NMSettingWireless *setting);
+
+const char *const *nm_setting_wireless_get_mac_address_blacklist(NMSettingWireless *setting);
+guint32            nm_setting_wireless_get_num_mac_blacklist_items(NMSettingWireless *setting);
+const char *nm_setting_wireless_get_mac_blacklist_item(NMSettingWireless *setting, guint32 idx);
+gboolean    nm_setting_wireless_add_mac_blacklist_item(NMSettingWireless *setting, const char *mac);
+void        nm_setting_wireless_remove_mac_blacklist_item(NMSettingWireless *setting, guint32 idx);
+gboolean    nm_setting_wireless_remove_mac_blacklist_item_by_value(NMSettingWireless *setting,
+                                                                   const char *       mac);
+void        nm_setting_wireless_clear_mac_blacklist_items(NMSettingWireless *setting);
+
+guint32  nm_setting_wireless_get_mtu(NMSettingWireless *setting);
+gboolean nm_setting_wireless_get_hidden(NMSettingWireless *setting);
+NM_AVAILABLE_IN_1_2
+guint32 nm_setting_wireless_get_powersave(NMSettingWireless *setting);
+
+NM_AVAILABLE_IN_1_2
+NMSettingMacRandomization
+nm_setting_wireless_get_mac_address_randomization(NMSettingWireless *setting);
+
+gboolean nm_setting_wireless_add_seen_bssid(NMSettingWireless *setting, const char *bssid);
+
+guint32     nm_setting_wireless_get_num_seen_bssids(NMSettingWireless *setting);
+const char *nm_setting_wireless_get_seen_bssid(NMSettingWireless *setting, guint32 i);
+
+gboolean nm_setting_wireless_ap_security_compatible(NMSettingWireless *        s_wireless,
+                                                    NMSettingWirelessSecurity *s_wireless_sec,
+                                                    NM80211ApFlags             ap_flags,
+                                                    NM80211ApSecurityFlags     ap_wpa,
+                                                    NM80211ApSecurityFlags     ap_rsn,
+                                                    NM80211Mode                ap_mode);
+
+NM_AVAILABLE_IN_1_12
+NMSettingWirelessWakeOnWLan nm_setting_wireless_get_wake_on_wlan(NMSettingWireless *setting);
+
+NM_AVAILABLE_IN_1_28
+NMTernary nm_setting_wireless_get_ap_isolation(NMSettingWireless *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_WIRELESS_H__ */
diff --git a/src/libnm-core-public/nm-setting-wpan.h b/src/libnm-core-public/nm-setting-wpan.h
new file mode 100644
index 00000000..2a09d49b
--- /dev/null
+++ b/src/libnm-core-public/nm-setting-wpan.h
@@ -0,0 +1,57 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2018 Lubomir Rintel <lkundrak@v3.sk>
+ */
+
+#ifndef __NM_SETTING_WPAN_H__
+#define __NM_SETTING_WPAN_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_WPAN (nm_setting_wpan_get_type())
+#define NM_SETTING_WPAN(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_WPAN, NMSettingWpan))
+#define NM_SETTING_WPAN_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_WPANCONFIG, NMSettingWpanClass))
+#define NM_IS_SETTING_WPAN(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_WPAN))
+#define NM_IS_SETTING_WPAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_WPAN))
+#define NM_SETTING_WPAN_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_WPAN, NMSettingWpanClass))
+
+#define NM_SETTING_WPAN_SETTING_NAME  "wpan"
+#define NM_SETTING_WPAN_MAC_ADDRESS   "mac-address"
+#define NM_SETTING_WPAN_PAN_ID        "pan-id"
+#define NM_SETTING_WPAN_SHORT_ADDRESS "short-address"
+#define NM_SETTING_WPAN_PAGE          "page"
+#define NM_SETTING_WPAN_CHANNEL       "channel"
+
+#define NM_SETTING_WPAN_PAGE_DEFAULT    -1
+#define NM_SETTING_WPAN_CHANNEL_DEFAULT -1
+
+typedef struct _NMSettingWpanClass NMSettingWpanClass;
+
+NM_AVAILABLE_IN_1_14
+GType nm_setting_wpan_get_type(void);
+NM_AVAILABLE_IN_1_14
+NMSetting *nm_setting_wpan_new(void);
+
+NM_AVAILABLE_IN_1_14
+const char *nm_setting_wpan_get_mac_address(NMSettingWpan *setting);
+NM_AVAILABLE_IN_1_14
+guint16 nm_setting_wpan_get_pan_id(NMSettingWpan *setting);
+NM_AVAILABLE_IN_1_14
+guint16 nm_setting_wpan_get_short_address(NMSettingWpan *setting);
+NM_AVAILABLE_IN_1_16
+gint16 nm_setting_wpan_get_page(NMSettingWpan *setting);
+NM_AVAILABLE_IN_1_16
+gint16 nm_setting_wpan_get_channel(NMSettingWpan *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_WPAN_H__ */
diff --git a/src/libnm-core-public/nm-setting.h b/src/libnm-core-public/nm-setting.h
new file mode 100644
index 00000000..6206a774
--- /dev/null
+++ b/src/libnm-core-public/nm-setting.h
@@ -0,0 +1,263 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright (C) 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_H__
+#define __NM_SETTING_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-core-types.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING            (nm_setting_get_type())
+#define NM_SETTING(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING, NMSetting))
+#define NM_SETTING_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING, NMSettingClass))
+#define NM_IS_SETTING(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING))
+#define NM_IS_SETTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING))
+#define NM_SETTING_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING, NMSettingClass))
+
+/* The property of the #NMSetting is required for the setting to be valid */
+#define NM_SETTING_PARAM_REQUIRED (1 << (1 + G_PARAM_USER_SHIFT))
+
+/* The property of the #NMSetting is a secret */
+#define NM_SETTING_PARAM_SECRET (1 << (2 + G_PARAM_USER_SHIFT))
+
+/* The property of the #NMSetting should be ignored during comparisons that
+ * use the %NM_SETTING_COMPARE_FLAG_FUZZY flag.
+ */
+#define NM_SETTING_PARAM_FUZZY_IGNORE (1 << (3 + G_PARAM_USER_SHIFT))
+
+/* Note: all non-glib GParamFlags bits are reserved by NetworkManager */
+
+#define NM_SETTING_NAME "name"
+
+/**
+ * NMSettingSecretFlags:
+ * @NM_SETTING_SECRET_FLAG_NONE: the system is responsible for providing and
+ * storing this secret (default)
+ * @NM_SETTING_SECRET_FLAG_AGENT_OWNED: a user secret agent is responsible
+ * for providing and storing this secret; when it is required agents will be
+ * asked to retrieve it
+ * @NM_SETTING_SECRET_FLAG_NOT_SAVED: this secret should not be saved, but
+ * should be requested from the user each time it is needed
+ * @NM_SETTING_SECRET_FLAG_NOT_REQUIRED: in situations where it cannot be
+ * automatically determined that the secret is required (some VPNs and PPP
+ * providers don't require all secrets) this flag indicates that the specific
+ * secret is not required
+ *
+ * These flags indicate specific behavior related to handling of a secret.  Each
+ * secret has a corresponding set of these flags which indicate how the secret
+ * is to be stored and/or requested when it is needed.
+ *
+ **/
+typedef enum { /*< flags >*/
+               NM_SETTING_SECRET_FLAG_NONE         = 0x00000000,
+               NM_SETTING_SECRET_FLAG_AGENT_OWNED  = 0x00000001,
+               NM_SETTING_SECRET_FLAG_NOT_SAVED    = 0x00000002,
+               NM_SETTING_SECRET_FLAG_NOT_REQUIRED = 0x00000004
+
+               /* NOTE: if adding flags, update nm-core-internal.h as well */
+} NMSettingSecretFlags;
+
+/**
+ * NMSettingCompareFlags:
+ * @NM_SETTING_COMPARE_FLAG_EXACT: match all properties exactly
+ * @NM_SETTING_COMPARE_FLAG_FUZZY: match only important attributes, like SSID,
+ *   type, security settings, etc.  Does not match, for example, connection ID
+ *   or UUID.
+ * @NM_SETTING_COMPARE_FLAG_IGNORE_ID: ignore the connection's ID
+ * @NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS: ignore all secrets
+ * @NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS: ignore secrets for which
+ *   the secret's flags indicate the secret is owned by a user secret agent
+ *   (ie, the secret's flag includes @NM_SETTING_SECRET_FLAG_AGENT_OWNED)
+ * @NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS: ignore secrets for which
+ *   the secret's flags indicate the secret should not be saved to persistent
+ *   storage (ie, the secret's flag includes @NM_SETTING_SECRET_FLAG_NOT_SAVED)
+ * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT: if this flag is set,
+ *   nm_setting_diff() and nm_connection_diff() will also include properties that
+ *   are set to their default value. See also @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT.
+ * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT: if this flag is set,
+ *   nm_setting_diff() and nm_connection_diff() will not include properties that
+ *   are set to their default value. This is the opposite of
+ *   @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT. If both flags are set together,
+ *   @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT wins. If both flags are unset,
+ *   this means to exclude default properties if there is a setting to compare,
+ *   but include all properties, if the setting 'b' is missing. This is the legacy
+ *   behaviour of libnm-util, where nm_setting_diff() behaved differently depending
+ *   on whether the setting 'b' was available. If @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT
+ *   is set, nm_setting_diff() will also set the flags @NM_SETTING_DIFF_RESULT_IN_A_DEFAULT
+ *   and @NM_SETTING_DIFF_RESULT_IN_B_DEFAULT, if the values are default values.
+ * @NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP: ignore the connection's timestamp
+ *
+ * These flags modify the comparison behavior when comparing two settings or
+ * two connections.
+ *
+ **/
+typedef enum {
+    NM_SETTING_COMPARE_FLAG_EXACT                      = 0x00000000,
+    NM_SETTING_COMPARE_FLAG_FUZZY                      = 0x00000001,
+    NM_SETTING_COMPARE_FLAG_IGNORE_ID                  = 0x00000002,
+    NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS             = 0x00000004,
+    NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS = 0x00000008,
+    NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS   = 0x00000010,
+    NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT   = 0x00000020,
+    NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT     = 0x00000040,
+    NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP           = 0x00000080,
+
+    /* Higher flags like 0x80000000 and 0x40000000 are used internally as private flags */
+} NMSettingCompareFlags;
+
+/**
+ * NMSettingMacRandomization:
+ * @NM_SETTING_MAC_RANDOMIZATION_DEFAULT: the default value, which unless
+ * overridden by user-controlled defaults configuration, is "never".
+ * @NM_SETTING_MAC_RANDOMIZATION_NEVER: the device's MAC address is always used.
+ * @NM_SETTING_MAC_RANDOMIZATION_ALWAYS: a random MAC address is used.
+ *
+ * Controls if and how the MAC address of a device is randomzied.
+ **/
+typedef enum {
+    NM_SETTING_MAC_RANDOMIZATION_DEFAULT = 0,
+    NM_SETTING_MAC_RANDOMIZATION_NEVER,
+    NM_SETTING_MAC_RANDOMIZATION_ALWAYS,
+} NMSettingMacRandomization;
+
+/**
+ * NMSettingClearSecretsWithFlagsFn:
+ * @setting: The setting for which secrets are being iterated
+ * @secret: The secret's name
+ * @flags: The secret's flags, eg %NM_SETTING_SECRET_FLAG_AGENT_OWNED
+ * @user_data: User data passed to nm_connection_clear_secrets_with_flags()
+ *
+ * Returns: %TRUE to clear the secret, %FALSE to not clear the secret
+ */
+typedef gboolean (*NMSettingClearSecretsWithFlagsFn)(NMSetting *          setting,
+                                                     const char *         secret,
+                                                     NMSettingSecretFlags flags,
+                                                     gpointer             user_data);
+
+struct _NMMetaSettingInfo;
+struct _NMSettInfoSetting;
+struct _NMSettInfoProperty;
+
+/**
+ * NMSettingValueIterFn:
+ * @setting: The setting for which properties are being iterated, given to
+ * nm_setting_enumerate_values()
+ * @key: The value/property name
+ * @value: The property's value
+ * @flags: The property's flags, like %NM_SETTING_PARAM_SECRET
+ * @user_data: User data passed to nm_setting_enumerate_values()
+ */
+typedef void (*NMSettingValueIterFn)(NMSetting *   setting,
+                                     const char *  key,
+                                     const GValue *value,
+                                     GParamFlags   flags,
+                                     gpointer      user_data);
+
+/*< private >*/
+typedef gboolean (*_NMConnectionForEachSecretFunc)(NMSettingSecretFlags flags, gpointer user_data);
+
+typedef struct _NMSettingClass NMSettingClass;
+
+GType nm_setting_get_type(void);
+
+GType nm_setting_lookup_type(const char *name);
+
+NMSetting *nm_setting_duplicate(NMSetting *setting);
+
+const char *nm_setting_get_name(NMSetting *setting);
+
+gboolean nm_setting_verify(NMSetting *setting, NMConnection *connection, GError **error);
+
+NM_AVAILABLE_IN_1_2
+gboolean nm_setting_verify_secrets(NMSetting *setting, NMConnection *connection, GError **error);
+
+gboolean nm_setting_compare(NMSetting *a, NMSetting *b, NMSettingCompareFlags flags);
+
+/**
+ * NMSettingDiffResult:
+ * @NM_SETTING_DIFF_RESULT_UNKNOWN: unknown result
+ * @NM_SETTING_DIFF_RESULT_IN_A: the property is present in setting A
+ * @NM_SETTING_DIFF_RESULT_IN_B: the property is present in setting B
+ * @NM_SETTING_DIFF_RESULT_IN_A_DEFAULT: the property is present in
+ * setting A but is set to the default value. This flag is only set,
+ * if you specify @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT.
+ * @NM_SETTING_DIFF_RESULT_IN_B_DEFAULT: analog to @NM_SETTING_DIFF_RESULT_IN_A_DEFAULT.
+ *
+ * These values indicate the result of a setting difference operation.
+ **/
+typedef enum {
+    NM_SETTING_DIFF_RESULT_UNKNOWN      = 0x00000000,
+    NM_SETTING_DIFF_RESULT_IN_A         = 0x00000001,
+    NM_SETTING_DIFF_RESULT_IN_B         = 0x00000002,
+    NM_SETTING_DIFF_RESULT_IN_A_DEFAULT = 0x00000004,
+    NM_SETTING_DIFF_RESULT_IN_B_DEFAULT = 0x00000008,
+} NMSettingDiffResult;
+
+gboolean nm_setting_diff(NMSetting *           a,
+                         NMSetting *           b,
+                         NMSettingCompareFlags flags,
+                         gboolean              invert_results,
+                         GHashTable **         results);
+
+void nm_setting_enumerate_values(NMSetting *setting, NMSettingValueIterFn func, gpointer user_data);
+
+char *nm_setting_to_string(NMSetting *setting);
+
+/*****************************************************************************/
+
+gboolean nm_setting_get_secret_flags(NMSetting *           setting,
+                                     const char *          secret_name,
+                                     NMSettingSecretFlags *out_flags,
+                                     GError **             error);
+
+gboolean nm_setting_set_secret_flags(NMSetting *          setting,
+                                     const char *         secret_name,
+                                     NMSettingSecretFlags flags,
+                                     GError **            error);
+
+/*****************************************************************************/
+
+NM_AVAILABLE_IN_1_26
+GVariant *nm_setting_option_get(NMSetting *setting, const char *opt_name);
+
+NM_AVAILABLE_IN_1_26
+gboolean
+nm_setting_option_get_boolean(NMSetting *setting, const char *opt_name, gboolean *out_value);
+
+NM_AVAILABLE_IN_1_26
+gboolean nm_setting_option_get_uint32(NMSetting *setting, const char *opt_name, guint32 *out_value);
+
+NM_AVAILABLE_IN_1_26
+void nm_setting_option_set(NMSetting *setting, const char *opt_name, GVariant *variant);
+
+NM_AVAILABLE_IN_1_26
+void nm_setting_option_set_uint32(NMSetting *setting, const char *opt_name, guint32 value);
+
+NM_AVAILABLE_IN_1_26
+void nm_setting_option_set_boolean(NMSetting *setting, const char *opt_name, gboolean value);
+
+NM_AVAILABLE_IN_1_26
+const char *const *nm_setting_option_get_all_names(NMSetting *setting, guint *out_len);
+
+NM_AVAILABLE_IN_1_26
+void nm_setting_option_clear_by_name(NMSetting *setting, NMUtilsPredicateStr predicate);
+
+/*****************************************************************************/
+
+const GVariantType *nm_setting_get_dbus_property_type(NMSetting * setting,
+                                                      const char *property_name);
+
+/*****************************************************************************/
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_H__ */
diff --git a/src/libnm-core-public/nm-simple-connection.h b/src/libnm-core-public/nm-simple-connection.h
new file mode 100644
index 00000000..6586c922
--- /dev/null
+++ b/src/libnm-core-public/nm-simple-connection.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_SIMPLE_CONNECTION_H__
+#define __NM_SIMPLE_CONNECTION_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-connection.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SIMPLE_CONNECTION (nm_simple_connection_get_type())
+#define NM_SIMPLE_CONNECTION(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SIMPLE_CONNECTION, NMSimpleConnection))
+#define NM_SIMPLE_CONNECTION_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SIMPLE_CONNECTION, NMSimpleConnectionClass))
+#define NM_IS_SIMPLE_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SIMPLE_CONNECTION))
+#define NM_IS_SIMPLE_CONNECTION_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SIMPLE_CONNECTION))
+#define NM_SIMPLE_CONNECTION_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SIMPLE_CONNECTION, NMSimpleConnectionClass))
+
+typedef struct _NMSimpleConnectionClass NMSimpleConnectionClass;
+
+GType nm_simple_connection_get_type(void);
+
+NMConnection *nm_simple_connection_new(void);
+
+NMConnection *nm_simple_connection_new_from_dbus(GVariant *dict, GError **error);
+
+NMConnection *nm_simple_connection_new_clone(NMConnection *connection);
+
+G_END_DECLS
+
+#endif /* __NM_SIMPLE_CONNECTION__ */
diff --git a/src/libnm-core-public/nm-utils.h b/src/libnm-core-public/nm-utils.h
new file mode 100644
index 00000000..0f8dcda0
--- /dev/null
+++ b/src/libnm-core-public/nm-utils.h
@@ -0,0 +1,259 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2005 - 2017 Red Hat, Inc.
+ */
+
+#ifndef __NM_UTILS_H__
+#define __NM_UTILS_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <glib.h>
+
+#include "nm-core-enum-types.h"
+#include "nm-setting-sriov.h"
+#include "nm-setting-tc-config.h"
+#include "nm-setting-wireless-security.h"
+
+G_BEGIN_DECLS
+
+/*****************************************************************************/
+
+typedef struct _NMVariantAttributeSpec NMVariantAttributeSpec;
+
+/* SSID helpers */
+gboolean    nm_utils_is_empty_ssid(const guint8 *ssid, gsize len);
+const char *nm_utils_escape_ssid(const guint8 *ssid, gsize len);
+gboolean    nm_utils_same_ssid(const guint8 *ssid1,
+                               gsize         len1,
+                               const guint8 *ssid2,
+                               gsize         len2,
+                               gboolean      ignore_trailing_null);
+char *      nm_utils_ssid_to_utf8(const guint8 *ssid, gsize len);
+
+/**
+ * NMUtilsSecurityType:
+ * @NMU_SEC_INVALID: unknown or invalid security, placeholder and not used
+ * @NMU_SEC_NONE: unencrypted and open
+ * @NMU_SEC_STATIC_WEP: static WEP keys are used for encryption
+ * @NMU_SEC_LEAP: Cisco LEAP is used for authentication and for generating the
+ * dynamic WEP keys automatically
+ * @NMU_SEC_DYNAMIC_WEP: standard 802.1x is used for authentication and
+ * generating the dynamic WEP keys automatically
+ * @NMU_SEC_WPA_PSK: WPA1 is used with Pre-Shared Keys (PSK)
+ * @NMU_SEC_WPA_ENTERPRISE: WPA1 is used with 802.1x authentication
+ * @NMU_SEC_WPA2_PSK: WPA2/RSN is used with Pre-Shared Keys (PSK)
+ * @NMU_SEC_WPA2_ENTERPRISE: WPA2 is used with 802.1x authentication
+ * @NMU_SEC_SAE: is used with WPA3 Enterprise
+ * @NMU_SEC_OWE: is used with Enhanced Open
+ * @NMU_SEC_WPA3_SUITE_B_192: is used with WPA3 Enterprise Suite-B 192 bit mode. Since: 1.30.
+ *
+ * Describes generic security mechanisms that 802.11 access points may offer.
+ * Used with nm_utils_security_valid() for checking whether a given access
+ * point is compatible with a network device.
+ **/
+typedef enum {
+    NMU_SEC_INVALID = 0,
+    NMU_SEC_NONE,
+    NMU_SEC_STATIC_WEP,
+    NMU_SEC_LEAP,
+    NMU_SEC_DYNAMIC_WEP,
+    NMU_SEC_WPA_PSK,
+    NMU_SEC_WPA_ENTERPRISE,
+    NMU_SEC_WPA2_PSK,
+    NMU_SEC_WPA2_ENTERPRISE,
+    NMU_SEC_SAE,
+    NMU_SEC_OWE,
+    NMU_SEC_WPA3_SUITE_B_192,
+} NMUtilsSecurityType;
+
+gboolean nm_utils_security_valid(NMUtilsSecurityType      type,
+                                 NMDeviceWifiCapabilities wifi_caps,
+                                 gboolean                 have_ap,
+                                 gboolean                 adhoc,
+                                 NM80211ApFlags           ap_flags,
+                                 NM80211ApSecurityFlags   ap_wpa,
+                                 NM80211ApSecurityFlags   ap_rsn);
+
+gboolean nm_utils_ap_mode_security_valid(NMUtilsSecurityType      type,
+                                         NMDeviceWifiCapabilities wifi_caps);
+
+gboolean nm_utils_wep_key_valid(const char *key, NMWepKeyType wep_type);
+gboolean nm_utils_wpa_psk_valid(const char *psk);
+
+NM_AVAILABLE_IN_1_6
+gboolean nm_utils_is_json_object(const char *str, GError **error);
+
+GVariant * nm_utils_ip4_dns_to_variant(char **dns);
+char **    nm_utils_ip4_dns_from_variant(GVariant *value);
+GVariant * nm_utils_ip4_addresses_to_variant(GPtrArray *addresses, const char *gateway);
+GPtrArray *nm_utils_ip4_addresses_from_variant(GVariant *value, char **out_gateway);
+GVariant * nm_utils_ip4_routes_to_variant(GPtrArray *routes);
+GPtrArray *nm_utils_ip4_routes_from_variant(GVariant *value);
+
+guint32 nm_utils_ip4_netmask_to_prefix(guint32 netmask);
+guint32 nm_utils_ip4_prefix_to_netmask(guint32 prefix);
+guint32 nm_utils_ip4_get_default_prefix(guint32 ip);
+
+GVariant * nm_utils_ip6_dns_to_variant(char **dns);
+char **    nm_utils_ip6_dns_from_variant(GVariant *value);
+GVariant * nm_utils_ip6_addresses_to_variant(GPtrArray *addresses, const char *gateway);
+GPtrArray *nm_utils_ip6_addresses_from_variant(GVariant *value, char **out_gateway);
+GVariant * nm_utils_ip6_routes_to_variant(GPtrArray *routes);
+GPtrArray *nm_utils_ip6_routes_from_variant(GVariant *value);
+
+GVariant * nm_utils_ip_addresses_to_variant(GPtrArray *addresses);
+GPtrArray *nm_utils_ip_addresses_from_variant(GVariant *value, int family);
+GVariant * nm_utils_ip_routes_to_variant(GPtrArray *routes);
+GPtrArray *nm_utils_ip_routes_from_variant(GVariant *value, int family);
+
+char *nm_utils_uuid_generate(void);
+
+gboolean nm_utils_file_is_certificate(const char *filename);
+gboolean nm_utils_file_is_private_key(const char *filename, gboolean *out_encrypted);
+gboolean nm_utils_file_is_pkcs12(const char *filename);
+
+typedef gboolean (*NMUtilsFileSearchInPathsPredicate)(const char *filename, gpointer user_data);
+
+struct stat;
+
+typedef gboolean (*NMUtilsCheckFilePredicate)(const char *       filename,
+                                              const struct stat *stat,
+                                              gpointer           user_data,
+                                              GError **          error);
+
+const char *nm_utils_file_search_in_paths(const char *                      progname,
+                                          const char *                      try_first,
+                                          const char *const *               paths,
+                                          GFileTest                         file_test_flags,
+                                          NMUtilsFileSearchInPathsPredicate predicate,
+                                          gpointer                          user_data,
+                                          GError **                         error);
+
+guint32  nm_utils_wifi_freq_to_channel(guint32 freq);
+guint32  nm_utils_wifi_channel_to_freq(guint32 channel, const char *band);
+guint32  nm_utils_wifi_find_next_channel(guint32 channel, int direction, char *band);
+gboolean nm_utils_wifi_is_channel_valid(guint32 channel, const char *band);
+NM_AVAILABLE_IN_1_2
+const guint *nm_utils_wifi_2ghz_freqs(void);
+NM_AVAILABLE_IN_1_2
+const guint *nm_utils_wifi_5ghz_freqs(void);
+
+const char *nm_utils_wifi_strength_bars(guint8 strength);
+
+/**
+ * NM_UTILS_HWADDR_LEN_MAX:
+ *
+ * The maximum length of hardware addresses handled by NetworkManager itself,
+ * nm_utils_hwaddr_len(), and nm_utils_hwaddr_aton().
+ */
+#define NM_UTILS_HWADDR_LEN_MAX 20 /* INFINIBAND_ALEN */
+
+gsize nm_utils_hwaddr_len(int type) G_GNUC_PURE;
+
+char *      nm_utils_hwaddr_ntoa(gconstpointer addr, gsize length);
+GByteArray *nm_utils_hwaddr_atoba(const char *asc, gsize length);
+guint8 *    nm_utils_hwaddr_aton(const char *asc, gpointer buffer, gsize length);
+
+gboolean nm_utils_hwaddr_valid(const char *asc, gssize length);
+char *   nm_utils_hwaddr_canonical(const char *asc, gssize length);
+gboolean nm_utils_hwaddr_matches(gconstpointer hwaddr1,
+                                 gssize        hwaddr1_len,
+                                 gconstpointer hwaddr2,
+                                 gssize        hwaddr2_len);
+
+char *  nm_utils_bin2hexstr(gconstpointer src, gsize len, int final_len);
+GBytes *nm_utils_hexstr2bin(const char *hex);
+
+NM_DEPRECATED_IN_1_6_FOR(nm_utils_is_valid_iface_name)
+gboolean nm_utils_iface_valid_name(const char *name);
+NM_AVAILABLE_IN_1_6
+gboolean nm_utils_is_valid_iface_name(const char *name, GError **error);
+
+gboolean nm_utils_is_uuid(const char *str);
+
+/**
+ * NM_UTILS_INET_ADDRSTRLEN:
+ *
+ * Defines the minimal length for a char buffer that is suitable as @dst argument
+ * for both nm_utils_inet4_ntop() and nm_utils_inet6_ntop().
+ **/
+#define NM_UTILS_INET_ADDRSTRLEN INET6_ADDRSTRLEN
+
+const char *nm_utils_inet4_ntop(guint32 inaddr, char *dst);
+
+struct in6_addr;
+const char *nm_utils_inet6_ntop(const struct in6_addr *in6addr, char *dst);
+
+gboolean nm_utils_ipaddr_valid(int family, const char *ip);
+
+gboolean nm_utils_check_virtual_device_compatibility(GType virtual_type, GType other_type);
+
+NM_AVAILABLE_IN_1_2
+int nm_utils_bond_mode_string_to_int(const char *mode);
+NM_AVAILABLE_IN_1_2
+const char *nm_utils_bond_mode_int_to_string(int mode);
+
+NM_AVAILABLE_IN_1_2
+char *nm_utils_enum_to_str(GType type, int value);
+
+NM_AVAILABLE_IN_1_2
+gboolean nm_utils_enum_from_str(GType type, const char *str, int *out_value, char **err_token);
+
+NM_AVAILABLE_IN_1_2
+const char **nm_utils_enum_get_values(GType type, int from, int to);
+
+NM_AVAILABLE_IN_1_6
+guint nm_utils_version(void);
+
+NM_AVAILABLE_IN_1_8
+GHashTable *nm_utils_parse_variant_attributes(const char *string,
+                                              char        attr_separator,
+                                              char        key_value_separator,
+                                              gboolean    ignore_unknown,
+                                              const NMVariantAttributeSpec *const *spec,
+                                              GError **                            error);
+
+NM_AVAILABLE_IN_1_8
+char *nm_utils_format_variant_attributes(GHashTable *attributes,
+                                         char        attr_separator,
+                                         char        key_value_separator);
+
+/*****************************************************************************/
+
+NM_AVAILABLE_IN_1_12
+NMTCQdisc *nm_utils_tc_qdisc_from_str(const char *str, GError **error);
+NM_AVAILABLE_IN_1_12
+char *nm_utils_tc_qdisc_to_str(NMTCQdisc *qdisc, GError **error);
+
+NM_AVAILABLE_IN_1_12
+NMTCAction *nm_utils_tc_action_from_str(const char *str, GError **error);
+NM_AVAILABLE_IN_1_12
+char *nm_utils_tc_action_to_str(NMTCAction *action, GError **error);
+
+NM_AVAILABLE_IN_1_12
+NMTCTfilter *nm_utils_tc_tfilter_from_str(const char *str, GError **error);
+NM_AVAILABLE_IN_1_12
+char *nm_utils_tc_tfilter_to_str(NMTCTfilter *tfilter, GError **error);
+
+/*****************************************************************************/
+
+NM_AVAILABLE_IN_1_14
+char *nm_utils_sriov_vf_to_str(const NMSriovVF *vf, gboolean omit_index, GError **error);
+NM_AVAILABLE_IN_1_14
+NMSriovVF *nm_utils_sriov_vf_from_str(const char *str, GError **error);
+
+/*****************************************************************************/
+
+NM_AVAILABLE_IN_1_12
+gint64 nm_utils_get_timestamp_msec(void);
+
+NM_AVAILABLE_IN_1_16
+gboolean
+nm_utils_base64secret_decode(const char *base64_key, gsize required_key_len, guint8 *out_key);
+
+G_END_DECLS
+
+#endif /* __NM_UTILS_H__ */
diff --git a/src/libnm-core-public/nm-version-macros.h b/src/libnm-core-public/nm-version-macros.h
new file mode 100644
index 00000000..c3899eab
--- /dev/null
+++ b/src/libnm-core-public/nm-version-macros.h
@@ -0,0 +1,93 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2011, 2015 Red Hat, Inc.
+ */
+
+#ifndef __NM_VERSION_MACROS_H__
+#define __NM_VERSION_MACROS_H__
+
+/* This header must not include glib or libnm. */
+
+/**
+ * NM_MAJOR_VERSION:
+ *
+ * Evaluates to the major version number of NetworkManager which this source
+ * is compiled against.
+ */
+#define NM_MAJOR_VERSION (1)
+
+/**
+ * NM_MINOR_VERSION:
+ *
+ * Evaluates to the minor version number of NetworkManager which this source
+ * is compiled against.
+ */
+#define NM_MINOR_VERSION (32)
+
+/**
+ * NM_MICRO_VERSION:
+ *
+ * Evaluates to the micro version number of NetworkManager which this source
+ * compiled against.
+ */
+#define NM_MICRO_VERSION (12)
+
+/**
+ * NM_CHECK_VERSION:
+ * @major: major version (e.g. 1 for version 1.2.5)
+ * @minor: minor version (e.g. 2 for version 1.2.5)
+ * @micro: micro version (e.g. 5 for version 1.2.5)
+ *
+ * Returns: %TRUE if the version of the NetworkManager header files
+ * is the same as or newer than the passed-in version.
+ */
+#define NM_CHECK_VERSION(major,minor,micro)                         \
+    (NM_MAJOR_VERSION > (major) ||                                  \
+     (NM_MAJOR_VERSION == (major) && NM_MINOR_VERSION > (minor)) || \
+     (NM_MAJOR_VERSION == (major) && NM_MINOR_VERSION == (minor) && NM_MICRO_VERSION >= (micro)))
+
+
+#define NM_ENCODE_VERSION(major,minor,micro) ((major) << 16 | (minor) << 8 | (micro))
+
+#define NM_VERSION_0_9_8  (NM_ENCODE_VERSION (0, 9, 8))
+#define NM_VERSION_0_9_10 (NM_ENCODE_VERSION (0, 9, 10))
+#define NM_VERSION_1_0    (NM_ENCODE_VERSION (1, 0, 0))
+#define NM_VERSION_1_2    (NM_ENCODE_VERSION (1, 2, 0))
+#define NM_VERSION_1_4    (NM_ENCODE_VERSION (1, 4, 0))
+#define NM_VERSION_1_6    (NM_ENCODE_VERSION (1, 6, 0))
+#define NM_VERSION_1_8    (NM_ENCODE_VERSION (1, 8, 0))
+#define NM_VERSION_1_10   (NM_ENCODE_VERSION (1, 10, 0))
+#define NM_VERSION_1_12   (NM_ENCODE_VERSION (1, 12, 0))
+#define NM_VERSION_1_14   (NM_ENCODE_VERSION (1, 14, 0))
+#define NM_VERSION_1_16   (NM_ENCODE_VERSION (1, 16, 0))
+#define NM_VERSION_1_18   (NM_ENCODE_VERSION (1, 18, 0))
+#define NM_VERSION_1_20   (NM_ENCODE_VERSION (1, 20, 0))
+#define NM_VERSION_1_22   (NM_ENCODE_VERSION (1, 22, 0))
+#define NM_VERSION_1_24   (NM_ENCODE_VERSION (1, 24, 0))
+#define NM_VERSION_1_26   (NM_ENCODE_VERSION (1, 26, 0))
+#define NM_VERSION_1_28   (NM_ENCODE_VERSION (1, 28, 0))
+#define NM_VERSION_1_30   (NM_ENCODE_VERSION (1, 30, 0))
+#define NM_VERSION_1_32   (NM_ENCODE_VERSION (1, 32, 0))
+#define NM_VERSION_1_32_4 (NM_ENCODE_VERSION (1, 32, 4))
+
+/* For releases, NM_API_VERSION is equal to NM_VERSION.
+ *
+ * For development builds, NM_API_VERSION is the next
+ * stable API after NM_VERSION. When you run a development
+ * version, you are already using the future API, even if
+ * it is not yet release. Hence, the currently used API
+ * version is the future one.  */
+#define NM_API_VERSION \
+    (((NM_MINOR_VERSION % 2) == 1) \
+        ? NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION + 1, 0                               ) \
+        : NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION    , ((NM_MICRO_VERSION + 1) / 2) * 2))
+
+/* deprecated. */
+#define NM_VERSION_CUR_STABLE  NM_API_VERSION
+
+/* deprecated. */
+#define NM_VERSION_NEXT_STABLE NM_API_VERSION
+
+#define NM_VERSION NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION, NM_MICRO_VERSION)
+
+#endif  /* __NM_VERSION_MACROS_H__ */
diff --git a/src/libnm-core-public/nm-version-macros.h.in b/src/libnm-core-public/nm-version-macros.h.in
new file mode 100644
index 00000000..35e89287
--- /dev/null
+++ b/src/libnm-core-public/nm-version-macros.h.in
@@ -0,0 +1,93 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2011, 2015 Red Hat, Inc.
+ */
+
+#ifndef __NM_VERSION_MACROS_H__
+#define __NM_VERSION_MACROS_H__
+
+/* This header must not include glib or libnm. */
+
+/**
+ * NM_MAJOR_VERSION:
+ *
+ * Evaluates to the major version number of NetworkManager which this source
+ * is compiled against.
+ */
+#define NM_MAJOR_VERSION (@NM_MAJOR_VERSION@)
+
+/**
+ * NM_MINOR_VERSION:
+ *
+ * Evaluates to the minor version number of NetworkManager which this source
+ * is compiled against.
+ */
+#define NM_MINOR_VERSION (@NM_MINOR_VERSION@)
+
+/**
+ * NM_MICRO_VERSION:
+ *
+ * Evaluates to the micro version number of NetworkManager which this source
+ * compiled against.
+ */
+#define NM_MICRO_VERSION (@NM_MICRO_VERSION@)
+
+/**
+ * NM_CHECK_VERSION:
+ * @major: major version (e.g. 1 for version 1.2.5)
+ * @minor: minor version (e.g. 2 for version 1.2.5)
+ * @micro: micro version (e.g. 5 for version 1.2.5)
+ *
+ * Returns: %TRUE if the version of the NetworkManager header files
+ * is the same as or newer than the passed-in version.
+ */
+#define NM_CHECK_VERSION(major,minor,micro)                         \
+    (NM_MAJOR_VERSION > (major) ||                                  \
+     (NM_MAJOR_VERSION == (major) && NM_MINOR_VERSION > (minor)) || \
+     (NM_MAJOR_VERSION == (major) && NM_MINOR_VERSION == (minor) && NM_MICRO_VERSION >= (micro)))
+
+
+#define NM_ENCODE_VERSION(major,minor,micro) ((major) << 16 | (minor) << 8 | (micro))
+
+#define NM_VERSION_0_9_8  (NM_ENCODE_VERSION (0, 9, 8))
+#define NM_VERSION_0_9_10 (NM_ENCODE_VERSION (0, 9, 10))
+#define NM_VERSION_1_0    (NM_ENCODE_VERSION (1, 0, 0))
+#define NM_VERSION_1_2    (NM_ENCODE_VERSION (1, 2, 0))
+#define NM_VERSION_1_4    (NM_ENCODE_VERSION (1, 4, 0))
+#define NM_VERSION_1_6    (NM_ENCODE_VERSION (1, 6, 0))
+#define NM_VERSION_1_8    (NM_ENCODE_VERSION (1, 8, 0))
+#define NM_VERSION_1_10   (NM_ENCODE_VERSION (1, 10, 0))
+#define NM_VERSION_1_12   (NM_ENCODE_VERSION (1, 12, 0))
+#define NM_VERSION_1_14   (NM_ENCODE_VERSION (1, 14, 0))
+#define NM_VERSION_1_16   (NM_ENCODE_VERSION (1, 16, 0))
+#define NM_VERSION_1_18   (NM_ENCODE_VERSION (1, 18, 0))
+#define NM_VERSION_1_20   (NM_ENCODE_VERSION (1, 20, 0))
+#define NM_VERSION_1_22   (NM_ENCODE_VERSION (1, 22, 0))
+#define NM_VERSION_1_24   (NM_ENCODE_VERSION (1, 24, 0))
+#define NM_VERSION_1_26   (NM_ENCODE_VERSION (1, 26, 0))
+#define NM_VERSION_1_28   (NM_ENCODE_VERSION (1, 28, 0))
+#define NM_VERSION_1_30   (NM_ENCODE_VERSION (1, 30, 0))
+#define NM_VERSION_1_32   (NM_ENCODE_VERSION (1, 32, 0))
+#define NM_VERSION_1_32_4 (NM_ENCODE_VERSION (1, 32, 4))
+
+/* For releases, NM_API_VERSION is equal to NM_VERSION.
+ *
+ * For development builds, NM_API_VERSION is the next
+ * stable API after NM_VERSION. When you run a development
+ * version, you are already using the future API, even if
+ * it is not yet release. Hence, the currently used API
+ * version is the future one.  */
+#define NM_API_VERSION \
+    (((NM_MINOR_VERSION % 2) == 1) \
+        ? NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION + 1, 0                               ) \
+        : NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION    , ((NM_MICRO_VERSION + 1) / 2) * 2))
+
+/* deprecated. */
+#define NM_VERSION_CUR_STABLE  NM_API_VERSION
+
+/* deprecated. */
+#define NM_VERSION_NEXT_STABLE NM_API_VERSION
+
+#define NM_VERSION NM_ENCODE_VERSION (NM_MAJOR_VERSION, NM_MINOR_VERSION, NM_MICRO_VERSION)
+
+#endif  /* __NM_VERSION_MACROS_H__ */
diff --git a/src/libnm-core-public/nm-version.h b/src/libnm-core-public/nm-version.h
new file mode 100644
index 00000000..10ceb581
--- /dev/null
+++ b/src/libnm-core-public/nm-version.h
@@ -0,0 +1,321 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2011, 2015 Red Hat, Inc.
+ */
+
+#ifndef NM_VERSION_H
+#define NM_VERSION_H
+
+#include <glib.h>
+
+#include "nm-version-macros.h"
+
+/* Deprecation / Availability macros */
+
+#if !defined(NM_VERSION_MIN_REQUIRED) || (NM_VERSION_MIN_REQUIRED == 0)
+    #undef NM_VERSION_MIN_REQUIRED
+    #define NM_VERSION_MIN_REQUIRED (NM_API_VERSION)
+#endif
+
+#if !defined(NM_VERSION_MAX_ALLOWED) || (NM_VERSION_MAX_ALLOWED == 0)
+    #undef NM_VERSION_MAX_ALLOWED
+    #define NM_VERSION_MAX_ALLOWED (NM_API_VERSION)
+#endif
+
+/* sanity checks */
+#if NM_VERSION_MIN_REQUIRED > NM_API_VERSION
+    #error "NM_VERSION_MIN_REQUIRED must be <= NM_API_VERSION"
+#endif
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_MIN_REQUIRED
+    #error "NM_VERSION_MAX_ALLOWED must be >= NM_VERSION_MIN_REQUIRED"
+#endif
+#if NM_VERSION_MIN_REQUIRED < NM_VERSION_0_9_8
+    #error "NM_VERSION_MIN_REQUIRED must be >= NM_VERSION_0_9_8"
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_0_9_10
+    #define NM_DEPRECATED_IN_0_9_10        G_DEPRECATED
+    #define NM_DEPRECATED_IN_0_9_10_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_0_9_10
+    #define NM_DEPRECATED_IN_0_9_10_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_0_9_10
+    #define NM_AVAILABLE_IN_0_9_10 G_UNAVAILABLE(0.9, 10)
+#else
+    #define NM_AVAILABLE_IN_0_9_10
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_0
+    #define NM_DEPRECATED_IN_1_0        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_0_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_0
+    #define NM_DEPRECATED_IN_1_0_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_0
+    #define NM_AVAILABLE_IN_1_0 G_UNAVAILABLE(1, 0)
+#else
+    #define NM_AVAILABLE_IN_1_0
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_2
+    #define NM_DEPRECATED_IN_1_2        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_2_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_2
+    #define NM_DEPRECATED_IN_1_2_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_2
+    #define NM_AVAILABLE_IN_1_2 G_UNAVAILABLE(1, 2)
+#else
+    #define NM_AVAILABLE_IN_1_2
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_4
+    #define NM_DEPRECATED_IN_1_4        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_4_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_4
+    #define NM_DEPRECATED_IN_1_4_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_4
+    #define NM_AVAILABLE_IN_1_4 G_UNAVAILABLE(1, 4)
+#else
+    #define NM_AVAILABLE_IN_1_4
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_6
+    #define NM_DEPRECATED_IN_1_6        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_6_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_6
+    #define NM_DEPRECATED_IN_1_6_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_6
+    #define NM_AVAILABLE_IN_1_6 G_UNAVAILABLE(1, 6)
+#else
+    #define NM_AVAILABLE_IN_1_6
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_8
+    #define NM_DEPRECATED_IN_1_8        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_8_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_8
+    #define NM_DEPRECATED_IN_1_8_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_8
+    #define NM_AVAILABLE_IN_1_8 G_UNAVAILABLE(1, 8)
+#else
+    #define NM_AVAILABLE_IN_1_8
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_10
+    #define NM_DEPRECATED_IN_1_10        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_10_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_10
+    #define NM_DEPRECATED_IN_1_10_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_10
+    #define NM_AVAILABLE_IN_1_10 G_UNAVAILABLE(1, 10)
+#else
+    #define NM_AVAILABLE_IN_1_10
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_12
+    #define NM_DEPRECATED_IN_1_12        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_12_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_12
+    #define NM_DEPRECATED_IN_1_12_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_12
+    #define NM_AVAILABLE_IN_1_12 G_UNAVAILABLE(1, 12)
+#else
+    #define NM_AVAILABLE_IN_1_12
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_14
+    #define NM_DEPRECATED_IN_1_14        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_14_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_14
+    #define NM_DEPRECATED_IN_1_14_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_14
+    #define NM_AVAILABLE_IN_1_14 G_UNAVAILABLE(1, 14)
+#else
+    #define NM_AVAILABLE_IN_1_14
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_16
+    #define NM_DEPRECATED_IN_1_16        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_16_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_16
+    #define NM_DEPRECATED_IN_1_16_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_16
+    #define NM_AVAILABLE_IN_1_16 G_UNAVAILABLE(1, 16)
+#else
+    #define NM_AVAILABLE_IN_1_16
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_18
+    #define NM_DEPRECATED_IN_1_18        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_18_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_18
+    #define NM_DEPRECATED_IN_1_18_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_18
+    #define NM_AVAILABLE_IN_1_18 G_UNAVAILABLE(1, 18)
+#else
+    #define NM_AVAILABLE_IN_1_18
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_20
+    #define NM_DEPRECATED_IN_1_20        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_20_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_20
+    #define NM_DEPRECATED_IN_1_20_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_20
+    #define NM_AVAILABLE_IN_1_20 G_UNAVAILABLE(1, 20)
+#else
+    #define NM_AVAILABLE_IN_1_20
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_22
+    #define NM_DEPRECATED_IN_1_22        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_22_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_22
+    #define NM_DEPRECATED_IN_1_22_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_22
+    #define NM_AVAILABLE_IN_1_22 G_UNAVAILABLE(1, 22)
+#else
+    #define NM_AVAILABLE_IN_1_22
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_24
+    #define NM_DEPRECATED_IN_1_24        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_24_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_24
+    #define NM_DEPRECATED_IN_1_24_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_24
+    #define NM_AVAILABLE_IN_1_24 G_UNAVAILABLE(1, 24)
+#else
+    #define NM_AVAILABLE_IN_1_24
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_26
+    #define NM_DEPRECATED_IN_1_26        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_26_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_26
+    #define NM_DEPRECATED_IN_1_26_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_26
+    #define NM_AVAILABLE_IN_1_26 G_UNAVAILABLE(1, 26)
+#else
+    #define NM_AVAILABLE_IN_1_26
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_28
+    #define NM_DEPRECATED_IN_1_28        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_28_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_28
+    #define NM_DEPRECATED_IN_1_28_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_28
+    #define NM_AVAILABLE_IN_1_28 G_UNAVAILABLE(1, 28)
+#else
+    #define NM_AVAILABLE_IN_1_28
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_30
+    #define NM_DEPRECATED_IN_1_30        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_30_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_30
+    #define NM_DEPRECATED_IN_1_30_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_30
+    #define NM_AVAILABLE_IN_1_30 G_UNAVAILABLE(1, 30)
+#else
+    #define NM_AVAILABLE_IN_1_30
+#endif
+
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_32
+    #define NM_DEPRECATED_IN_1_32        G_DEPRECATED
+    #define NM_DEPRECATED_IN_1_32_FOR(f) G_DEPRECATED_FOR(f)
+#else
+    #define NM_DEPRECATED_IN_1_32
+    #define NM_DEPRECATED_IN_1_32_FOR(f)
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_32
+    #define NM_AVAILABLE_IN_1_32 G_UNAVAILABLE(1, 32)
+#else
+    #define NM_AVAILABLE_IN_1_32
+#endif
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_32_4
+    #define NM_AVAILABLE_IN_1_32_4 G_UNAVAILABLE(1, 32.4)
+#else
+    #define NM_AVAILABLE_IN_1_32_4
+#endif
+
+/*
+ * Synchronous API for calling D-Bus in libnm is deprecated. See
+ * https://developer.gnome.org/libnm/stable/usage.html#sync-api
+ *
+ * Note that "deprecated" here does not really mean that the API is going
+ * to be removed. We don't break API. Just comment that it is awkward and
+ * discouraged. The user may:
+ *
+ *   - continue to use this API. It's deprecated, awkward and discouraged,
+ *     but if it works for you, that's fine.
+ *
+ *   - use asynchronous API. That's the only sensible way to use D-Bus.
+ *     If libnm lacks a certain asynchronous counterpart, it should be
+ *     added.
+ *
+ *   - use GDBusConnection directly. There really isn't anything wrong
+ *     with D-Bus or GDBusConnection. This deprecated API is just a wrapper
+ *     around g_dbus_connection_call_sync(). You may call it directly
+ *     without feeling dirty.
+ *
+ * The API is marked as deprecated since 1.22, however the macro only starts
+ * complaining in 1.24. That's intentional, because in 1.22 the asynchronous
+ * alternative was not yet available.
+ */
+#define _NM_DEPRECATED_SYNC_METHOD            NM_DEPRECATED_IN_1_24
+#define _NM_DEPRECATED_SYNC_WRITABLE_PROPERTY /* NM_DEPRECATED_IN_1_22 */
+
+#endif /* NM_VERSION_H */
diff --git a/src/libnm-core-public/nm-vpn-dbus-interface.h b/src/libnm-core-public/nm-vpn-dbus-interface.h
new file mode 100644
index 00000000..c0e23f6f
--- /dev/null
+++ b/src/libnm-core-public/nm-vpn-dbus-interface.h
@@ -0,0 +1,302 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2004 Red Hat, Inc.
+ */
+
+/* D-Bus-related definitions for NetworkManager VPN plugins.
+ *
+ * Note that although this header is installed as part of libnm, it is also
+ * used by some external code that does not link to libnm.
+ */
+
+#ifndef __NM_VPN_DBUS_INTERFACE_H__
+#define __NM_VPN_DBUS_INTERFACE_H__
+
+#include "nm-dbus-interface.h"
+
+#ifndef NM_VERSION_H
+    #define NM_DEPRECATED_IN_1_8_FOR(n)
+#endif
+
+/*
+ * dbus services details
+ */
+#define NM_DBUS_PATH_VPN      "/org/freedesktop/NetworkManager/VPN/Manager"
+#define NM_DBUS_INTERFACE_VPN "org.freedesktop.NetworkManager.VPN.Manager"
+
+#define NM_DBUS_PATH_VPN_CONNECTION      "/org/freedesktop/NetworkManager/VPN/Connection"
+#define NM_DBUS_INTERFACE_VPN_CONNECTION "org.freedesktop.NetworkManager.VPN.Connection"
+
+#define NM_VPN_DBUS_PLUGIN_PATH      "/org/freedesktop/NetworkManager/VPN/Plugin"
+#define NM_VPN_DBUS_PLUGIN_INTERFACE "org.freedesktop.NetworkManager.VPN.Plugin"
+
+/*
+ * VPN Errors
+ */
+#define NM_DBUS_NO_ACTIVE_VPN_CONNECTION \
+    "org.freedesktop.NetworkManager.VPNConnections.NoActiveVPNConnection"
+#define NM_DBUS_NO_VPN_CONNECTIONS "org.freedesktop.NetworkManager.VPNConnections.NoVPNConnections"
+#define NM_DBUS_INVALID_VPN_CONNECTION \
+    "org.freedesktop.NetworkManager.VPNConnections.InvalidVPNConnection"
+
+#define NM_DBUS_VPN_ERROR_PREFIX              "org.freedesktop.NetworkManager.VPN.Error"
+#define NM_DBUS_VPN_STARTING_IN_PROGRESS      "StartingInProgress"
+#define NM_DBUS_VPN_ALREADY_STARTED           "AlreadyStarted"
+#define NM_DBUS_VPN_STOPPING_IN_PROGRESS      "StoppingInProgress"
+#define NM_DBUS_VPN_ALREADY_STOPPED           "AlreadyStopped"
+#define NM_DBUS_VPN_WRONG_STATE               "WrongState"
+#define NM_DBUS_VPN_BAD_ARGUMENTS             "BadArguments"
+#define NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED "InteractiveNotSupported"
+
+/*
+ * VPN daemon signals
+ */
+#define NM_DBUS_VPN_SIGNAL_LOGIN_BANNER   "LoginBanner"
+#define NM_DBUS_VPN_SIGNAL_LOGIN_FAILED   "LoginFailed"
+#define NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED  "LaunchFailed"
+#define NM_DBUS_VPN_SIGNAL_CONNECT_FAILED "ConnectFailed"
+#define NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD "VPNConfigBad"
+#define NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD  "IPConfigBad"
+#define NM_DBUS_VPN_SIGNAL_STATE_CHANGE   "StateChange"
+#define NM_DBUS_VPN_SIGNAL_IP4_CONFIG     "IP4Config"
+
+/**
+ * NMVpnServiceState:
+ * @NM_VPN_SERVICE_STATE_UNKNOWN: The state of the VPN plugin is unknown.
+ * @NM_VPN_SERVICE_STATE_INIT: The VPN plugin is initialized.
+ * @NM_VPN_SERVICE_STATE_SHUTDOWN: Not used.
+ * @NM_VPN_SERVICE_STATE_STARTING: The plugin is attempting to connect to a VPN server.
+ * @NM_VPN_SERVICE_STATE_STARTED: The plugin has connected to a VPN server.
+ * @NM_VPN_SERVICE_STATE_STOPPING: The plugin is disconnecting from the VPN server.
+ * @NM_VPN_SERVICE_STATE_STOPPED: The plugin has disconnected from the VPN server.
+ *
+ * VPN daemon states
+ */
+typedef enum {
+    NM_VPN_SERVICE_STATE_UNKNOWN = 0,
+    NM_VPN_SERVICE_STATE_INIT,
+    NM_VPN_SERVICE_STATE_SHUTDOWN,
+    NM_VPN_SERVICE_STATE_STARTING,
+    NM_VPN_SERVICE_STATE_STARTED,
+    NM_VPN_SERVICE_STATE_STOPPING,
+    NM_VPN_SERVICE_STATE_STOPPED
+} NMVpnServiceState;
+
+/**
+ * NMVpnConnectionState:
+ * @NM_VPN_CONNECTION_STATE_UNKNOWN: The state of the VPN connection is
+ *   unknown.
+ * @NM_VPN_CONNECTION_STATE_PREPARE: The VPN connection is preparing to
+ *   connect.
+ * @NM_VPN_CONNECTION_STATE_NEED_AUTH: The VPN connection needs authorization
+ *   credentials.
+ * @NM_VPN_CONNECTION_STATE_CONNECT: The VPN connection is being established.
+ * @NM_VPN_CONNECTION_STATE_IP_CONFIG_GET: The VPN connection is getting an IP
+ *   address.
+ * @NM_VPN_CONNECTION_STATE_ACTIVATED: The VPN connection is active.
+ * @NM_VPN_CONNECTION_STATE_FAILED: The VPN connection failed.
+ * @NM_VPN_CONNECTION_STATE_DISCONNECTED: The VPN connection is disconnected.
+ *
+ * VPN connection states
+ */
+typedef enum {
+    NM_VPN_CONNECTION_STATE_UNKNOWN = 0,
+    NM_VPN_CONNECTION_STATE_PREPARE,
+    NM_VPN_CONNECTION_STATE_NEED_AUTH,
+    NM_VPN_CONNECTION_STATE_CONNECT,
+    NM_VPN_CONNECTION_STATE_IP_CONFIG_GET,
+    NM_VPN_CONNECTION_STATE_ACTIVATED,
+    NM_VPN_CONNECTION_STATE_FAILED,
+    NM_VPN_CONNECTION_STATE_DISCONNECTED
+} NMVpnConnectionState;
+
+/**
+ * NMVpnConnectionStateReason:
+ * @NM_VPN_CONNECTION_STATE_REASON_UNKNOWN: The reason for the VPN connection
+ *   state change is unknown.
+ * @NM_VPN_CONNECTION_STATE_REASON_NONE: No reason was given for the VPN
+ *   connection state change.
+ * @NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED: The VPN connection changed
+ *   state because the user disconnected it.
+ * @NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED: The VPN connection
+ *   changed state because the device it was using was disconnected.
+ * @NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED: The service providing the
+ *   VPN connection was stopped.
+ * @NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID: The IP config of the VPN
+ *   connection was invalid.
+ * @NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT: The connection attempt to
+ *   the VPN service timed out.
+ * @NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT: A timeout occurred
+ *   while starting the service providing the VPN connection.
+ * @NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED: Starting the service
+ *   starting the service providing the VPN connection failed.
+ * @NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS: Necessary secrets for the VPN
+ *   connection were not provided.
+ * @NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED: Authentication to the VPN
+ *   server failed.
+ * @NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED: The connection was
+ *   deleted from settings.
+ *
+ * VPN connection state reasons
+ */
+NM_DEPRECATED_IN_1_8_FOR(NMActiveConnectionStateReason)
+typedef enum {
+    NM_VPN_CONNECTION_STATE_REASON_UNKNOWN               = 0,
+    NM_VPN_CONNECTION_STATE_REASON_NONE                  = 1,
+    NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED     = 2,
+    NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED   = 3,
+    NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED       = 4,
+    NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID     = 5,
+    NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT       = 6,
+    NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT = 7,
+    NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED  = 8,
+    NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS            = 9,
+    NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED          = 10,
+    NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED    = 11,
+} NMVpnConnectionStateReason;
+
+/**
+ * NMVpnPluginFailure:
+ * @NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED: Login failed.
+ * @NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED: Connect failed.
+ * @NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG: Invalid IP configuration returned from
+ *   the VPN plugin.
+ *
+ * VPN plugin failure reasons
+ */
+typedef enum {
+    NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED,
+    NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED,
+    NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG
+} NMVpnPluginFailure;
+
+#ifndef NM_VERSION_H
+    #undef NM_DEPRECATED_IN_1_8_FOR
+#endif
+
+/*** Generic config ***/
+
+/* string: VPN interface name (tun0, tap0, etc) */
+#define NM_VPN_PLUGIN_CONFIG_TUNDEV "tundev"
+
+/* string: Proxy PAC */
+#define NM_VPN_PLUGIN_CONFIG_PROXY_PAC "pac"
+
+/* string: Login message */
+#define NM_VPN_PLUGIN_CONFIG_BANNER "banner"
+
+/* uint32 / array of uint8: IP address of the public external VPN gateway (network byte order) */
+#define NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY "gateway"
+
+/* uint32: Maximum Transfer Unit that the VPN interface should use */
+#define NM_VPN_PLUGIN_CONFIG_MTU "mtu"
+
+/* boolean: Has IP4 configuration? */
+#define NM_VPN_PLUGIN_CONFIG_HAS_IP4 "has-ip4"
+
+/* boolean: Has IP6 configuration? */
+#define NM_VPN_PLUGIN_CONFIG_HAS_IP6 "has-ip6"
+
+/* boolean: If %TRUE the VPN plugin can persist/reconnect the connection over
+ * link changes and VPN server dropouts.
+ */
+#define NM_VPN_PLUGIN_CAN_PERSIST "can-persist"
+
+/*** Ip4Config ***/
+
+/* uint32: IP address of the internal gateway of the subnet the VPN interface is
+ *         on, if the VPN uses subnet configuration (network byte order)
+ */
+#define NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY "internal-gateway"
+
+/* uint32: internal IP address of the local VPN interface (network byte order) */
+#define NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS "address"
+
+/* uint32: IP address of the other side of Point-to-Point connection if the VPN
+ *         uses Point-to-Point configuration. (network byte order)
+ */
+#define NM_VPN_PLUGIN_IP4_CONFIG_PTP "ptp"
+
+/* uint32: IP prefix of the VPN interface; 1 - 32 inclusive */
+#define NM_VPN_PLUGIN_IP4_CONFIG_PREFIX "prefix"
+
+/* array of uint32: IP addresses of DNS servers for the VPN (network byte order) */
+#define NM_VPN_PLUGIN_IP4_CONFIG_DNS "dns"
+
+/* array of uint32: IP addresses of NBNS/WINS servers for the VPN (network byte order) */
+#define NM_VPN_PLUGIN_IP4_CONFIG_NBNS "nbns"
+
+/* uint32: Message Segment Size that the VPN interface should use */
+#define NM_VPN_PLUGIN_IP4_CONFIG_MSS "mss"
+
+/* string: DNS domain name */
+#define NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN "domain"
+
+/* array of strings: DNS domain names */
+#define NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS "domains"
+
+/* [ip4 routes]: custom routes the client should apply, in the format used
+ *         by nm_utils_ip4_routes_to/from_gvalue
+ */
+#define NM_VPN_PLUGIN_IP4_CONFIG_ROUTES "routes"
+
+/* whether the previous IP4 routing configuration should be preserved. */
+#define NM_VPN_PLUGIN_IP4_CONFIG_PRESERVE_ROUTES "preserve-routes"
+
+/* boolean: prevent this VPN connection from ever getting the default route */
+#define NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT "never-default"
+
+/* Deprecated */
+#define NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY
+
+/* Legacy IP4 items; these are included in the IP4 config by older plugins,
+ * but in the generic config by newer plugins.
+ */
+
+#define NM_VPN_PLUGIN_IP4_CONFIG_BANNER      NM_VPN_PLUGIN_CONFIG_BANNER
+#define NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY
+#define NM_VPN_PLUGIN_IP4_CONFIG_MTU         NM_VPN_PLUGIN_CONFIG_MTU
+#define NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV      NM_VPN_PLUGIN_CONFIG_TUNDEV
+
+/*** Ip6Config ***/
+
+/* array of uint8: IP address of the internal gateway of the subnet the VPN interface is
+ *         on, if the VPN uses subnet configuration (network byte order)
+ */
+#define NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY "internal-gateway"
+
+/* array of uint8: internal IP address of the local VPN interface (network byte order) */
+#define NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS "address"
+
+/* array of uint8: IP address of the other side of Point-to-Point connection if the VPN
+ *         uses Point-to-Point configuration. (network byte order)
+ */
+#define NM_VPN_PLUGIN_IP6_CONFIG_PTP "ptp"
+
+/* uint32: prefix length of the VPN interface; 1 - 128 inclusive */
+#define NM_VPN_PLUGIN_IP6_CONFIG_PREFIX "prefix"
+
+/* array of array of uint8: IP addresses of DNS servers for the VPN (network byte order) */
+#define NM_VPN_PLUGIN_IP6_CONFIG_DNS "dns"
+
+/* uint32: Message Segment Size that the VPN interface should use */
+#define NM_VPN_PLUGIN_IP6_CONFIG_MSS "mss"
+
+/* string: DNS domain name */
+#define NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN "domain"
+
+/* array of strings: DNS domain names */
+#define NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS "domains"
+
+/* [ip6 routes]: custom routes the client should apply, in the format used
+ *         by nm_utils_ip6_routes_to/from_gvalue
+ */
+#define NM_VPN_PLUGIN_IP6_CONFIG_ROUTES "routes"
+
+/* whether the previous IP6 routing configuration should be preserved. */
+#define NM_VPN_PLUGIN_IP6_CONFIG_PRESERVE_ROUTES "preserve-routes"
+
+/* boolean: prevent this VPN connection from ever getting the default route */
+#define NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT "never-default"
+
+#endif /* __NM_VPN_DBUS_INTERFACE_H__ */
diff --git a/src/libnm-core-public/nm-vpn-dbus-types.xml b/src/libnm-core-public/nm-vpn-dbus-types.xml
new file mode 100644
index 00000000..5da02420
--- /dev/null
+++ b/src/libnm-core-public/nm-vpn-dbus-types.xml
@@ -0,0 +1,246 @@
+<?xml version='1.0'?>
+<?xml-stylesheet type="text/xsl" href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<refentry id="nm-vpn-dbus-types">
+  <refmeta>
+    <refentrytitle role="top_of_page" id="nm-vpn-dbus-types.top_of_page">VPN Plugin D-Bus API Types</refentrytitle>
+    <manvolnum>3</manvolnum>
+    <refmiscinfo>VPN Plugin D-Bus API Types</refmiscinfo>
+  </refmeta>
+  <refnamediv>
+    <refname>VPN Plugin D-Bus API Types</refname>
+    <refpurpose></refpurpose>
+  </refnamediv>
+
+  <refsect2 id="NMVpnServiceState" role="enum">
+    <title>enum NMVpnServiceState</title>
+    <indexterm zone="NMVpnServiceState">
+      <primary>NMVpnServiceState</primary>
+    </indexterm>
+    <para><para>VPN daemon states</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_SERVICE_STATE_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The state of the VPN plugin is unknown.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_SERVICE_STATE_INIT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The VPN plugin is initialized.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_SERVICE_STATE_SHUTDOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Not used.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_SERVICE_STATE_STARTING</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The plugin is attempting to connect to a VPN server.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_SERVICE_STATE_STARTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The plugin has connected to a VPN server.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_SERVICE_STATE_STOPPING</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>5</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The plugin is disconnecting from the VPN server.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_SERVICE_STATE_STOPPED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>6</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The plugin has disconnected from the VPN server.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMVpnConnectionState" role="enum">
+    <title>enum NMVpnConnectionState</title>
+    <indexterm zone="NMVpnConnectionState">
+      <primary>NMVpnConnectionState</primary>
+    </indexterm>
+    <para><para>VPN connection states</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The state of the VPN connection is unknown.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_PREPARE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The VPN connection is preparing to connect.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_NEED_AUTH</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The VPN connection needs authorization credentials.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_CONNECT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The VPN connection is being established.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_IP_CONFIG_GET</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The VPN connection is getting an IP address.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_ACTIVATED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>5</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The VPN connection is active.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>6</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The VPN connection failed.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_DISCONNECTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>7</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The VPN connection is disconnected.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMVpnConnectionStateReason" role="enum">
+    <title>enum NMVpnConnectionStateReason</title>
+    <indexterm zone="NMVpnConnectionStateReason">
+      <primary>NMVpnConnectionStateReason</primary>
+    </indexterm>
+    <para><para>VPN connection state reasons</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_REASON_UNKNOWN</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The reason for the VPN connection state change is unknown.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_REASON_NONE</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>No reason was given for the VPN connection state change.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The VPN connection changed state because the user disconnected it.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>3</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The VPN connection changed state because the device it was using was disconnected.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>4</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The service providing the VPN connection was stopped.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>5</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The IP config of the VPN connection was invalid.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>6</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The connection attempt to the VPN service timed out.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>7</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>A timeout occurred while starting the service providing the VPN connection.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>8</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Starting the service starting the service providing the VPN connection failed.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>9</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Necessary secrets for the VPN connection were not provided.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>10</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Authentication to the VPN server failed.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>11</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>The connection was deleted from settings.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+  <refsect2 id="NMVpnPluginFailure" role="enum">
+    <title>enum NMVpnPluginFailure</title>
+    <indexterm zone="NMVpnPluginFailure">
+      <primary>NMVpnPluginFailure</primary>
+    </indexterm>
+    <para><para>VPN plugin failure reasons</para><para></para></para>
+    <refsect3 role="enum_members">
+      <title>Values</title>
+      <informaltable role="enum_members_table" pgwide="1" frame="none">
+        <tgroup cols="4">
+          <colspec colname="enum_members_name" colwidth="300px" />
+          <colspec colname="enum_members_value" colwidth="100px"/>
+          <colspec colname="enum_members_description" />
+          <tbody>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>0</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Login failed.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>1</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Connect failed.</para><para></para></entry>
+            </row>
+            <row role="constant">
+              <entry role="enum_member_name"><para>NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG</para><para></para></entry>
+              <entry role="enum_member_value"><para>= <literal>2</literal></para><para></para></entry>
+              <entry role="enum_member_description"><para>Invalid IP configuration returned from the VPN plugin.</para><para></para></entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+    </refsect3>
+  </refsect2>
+
+</refentry>
diff --git a/src/libnm-core-public/nm-vpn-editor-plugin.h b/src/libnm-core-public/nm-vpn-editor-plugin.h
new file mode 100644
index 00000000..e318da07
--- /dev/null
+++ b/src/libnm-core-public/nm-vpn-editor-plugin.h
@@ -0,0 +1,159 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2008 Novell, Inc.
+ * Copyright (C) 2008 - 2015 Red Hat, Inc.
+ */
+
+#ifndef __NM_VPN_EDITOR_PLUGIN_H__
+#define __NM_VPN_EDITOR_PLUGIN_H__
+
+#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
+    #error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "nm-connection.h"
+#include "nm-utils.h"
+
+G_BEGIN_DECLS
+
+typedef struct _NMVpnPluginInfo NMVpnPluginInfo;
+
+typedef struct _NMVpnEditorPlugin NMVpnEditorPlugin;
+typedef struct _NMVpnEditor       NMVpnEditor;
+
+/* Plugin's factory function that returns a GObject that implements
+ * NMVpnEditorPlugin.
+ */
+#ifndef __GI_SCANNER__
+typedef NMVpnEditorPlugin *(*NMVpnEditorPluginFactory)(GError **error);
+NMVpnEditorPlugin *nm_vpn_editor_plugin_factory(GError **error);
+#endif
+
+/*****************************************************************************/
+/* Editor plugin interface                        */
+/*****************************************************************************/
+
+#define NM_TYPE_VPN_EDITOR_PLUGIN (nm_vpn_editor_plugin_get_type())
+#define NM_VPN_EDITOR_PLUGIN(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_VPN_EDITOR_PLUGIN, NMVpnEditorPlugin))
+#define NM_IS_VPN_EDITOR_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_VPN_EDITOR_PLUGIN))
+#define NM_VPN_EDITOR_PLUGIN_GET_INTERFACE(obj) \
+    (G_TYPE_INSTANCE_GET_INTERFACE((obj), NM_TYPE_VPN_EDITOR_PLUGIN, NMVpnEditorPluginInterface))
+
+/**
+ * NMVpnEditorPluginCapability:
+ * @NM_VPN_EDITOR_PLUGIN_CAPABILITY_NONE: unknown or no capability
+ * @NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT: the plugin can import new connections
+ * @NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT: the plugin can export connections
+ * @NM_VPN_EDITOR_PLUGIN_CAPABILITY_IPV6: the plugin supports IPv6 addressing
+ *
+ * Flags that indicate certain capabilities of the plugin to editor programs.
+ **/
+typedef enum /*< flags >*/ {
+    NM_VPN_EDITOR_PLUGIN_CAPABILITY_NONE   = 0x00,
+    NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT = 0x01,
+    NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT = 0x02,
+    NM_VPN_EDITOR_PLUGIN_CAPABILITY_IPV6   = 0x04
+} NMVpnEditorPluginCapability;
+
+/* Short display name of the VPN plugin */
+#define NM_VPN_EDITOR_PLUGIN_NAME "name"
+
+/* Longer description of the VPN plugin */
+#define NM_VPN_EDITOR_PLUGIN_DESCRIPTION "description"
+
+/* D-Bus service name of the plugin's VPN service */
+#define NM_VPN_EDITOR_PLUGIN_SERVICE "service"
+
+typedef struct _NMVpnEditorPluginVT NMVpnEditorPluginVT;
+
+/**
+ * NMVpnEditorPluginInterface:
+ * @g_iface: the parent interface
+ * @get_editor: returns an #NMVpnEditor, pre-filled with values from @connection
+ *   if non-%NULL.
+ * @get_capabilities: returns a bitmask of capabilities.
+ * @import_from_file: Try to import a connection from the specified path.  On
+ *   success, return a partial #NMConnection object.  On error, return %NULL and
+ *   set @error with additional information.  Note that @error can be %NULL, in
+ *   which case no additional error information should be provided.
+ * @export_to_file: Export the given connection to the specified path.  Return
+ *   %TRUE on success.  On error, return %FALSE and set @error with additional
+ *   error information.  Note that @error can be %NULL, in which case no
+ *   additional error information should be provided.
+ * @get_suggested_filename: For a given connection, return a suggested file
+ *   name.  Returned value will be %NULL or a suggested file name to be freed by
+ *   the caller.
+ * @notify_plugin_info_set: A callback to be called when the plugin info is set.
+ * @get_vt: return a virtual function table to implement further functions in
+ *   the plugin, without requiring to update libnm. Used by nm_vpn_editor_plugin_get_vt().
+ *
+ * Interface for VPN editor plugins.
+ */
+typedef struct {
+    GTypeInterface g_iface;
+
+    NMVpnEditor *(*get_editor)(NMVpnEditorPlugin *plugin, NMConnection *connection, GError **error);
+
+    NMVpnEditorPluginCapability (*get_capabilities)(NMVpnEditorPlugin *plugin);
+
+    NMConnection *(*import_from_file)(NMVpnEditorPlugin *plugin, const char *path, GError **error);
+
+    gboolean (*export_to_file)(NMVpnEditorPlugin *plugin,
+                               const char *       path,
+                               NMConnection *     connection,
+                               GError **          error);
+
+    char *(*get_suggested_filename)(NMVpnEditorPlugin *plugin, NMConnection *connection);
+
+    void (*notify_plugin_info_set)(NMVpnEditorPlugin *plugin, NMVpnPluginInfo *plugin_info);
+
+    const NMVpnEditorPluginVT *(*get_vt)(NMVpnEditorPlugin *plugin, gsize *out_vt_size);
+} NMVpnEditorPluginInterface;
+
+GType nm_vpn_editor_plugin_get_type(void);
+
+NMVpnEditor *nm_vpn_editor_plugin_get_editor(NMVpnEditorPlugin *plugin,
+                                             NMConnection *     connection,
+                                             GError **          error);
+
+NMVpnEditorPluginCapability nm_vpn_editor_plugin_get_capabilities(NMVpnEditorPlugin *plugin);
+
+NM_AVAILABLE_IN_1_4
+gsize
+nm_vpn_editor_plugin_get_vt(NMVpnEditorPlugin *plugin, NMVpnEditorPluginVT *vt, gsize vt_size);
+
+NMConnection *
+         nm_vpn_editor_plugin_import(NMVpnEditorPlugin *plugin, const char *path, GError **error);
+gboolean nm_vpn_editor_plugin_export(NMVpnEditorPlugin *plugin,
+                                     const char *       path,
+                                     NMConnection *     connection,
+                                     GError **          error);
+char *   nm_vpn_editor_plugin_get_suggested_filename(NMVpnEditorPlugin *plugin,
+                                                     NMConnection *     connection);
+
+NM_AVAILABLE_IN_1_2
+NMVpnEditorPlugin *nm_vpn_editor_plugin_load_from_file(const char *              plugin_name,
+                                                       const char *              check_service,
+                                                       int                       check_owner,
+                                                       NMUtilsCheckFilePredicate check_file,
+                                                       gpointer                  user_data,
+                                                       GError **                 error);
+
+NM_AVAILABLE_IN_1_4
+NMVpnEditorPlugin *
+nm_vpn_editor_plugin_load(const char *plugin_name, const char *check_service, GError **error);
+
+NM_AVAILABLE_IN_1_4
+NMVpnPluginInfo *nm_vpn_editor_plugin_get_plugin_info(NMVpnEditorPlugin *plugin);
+NM_AVAILABLE_IN_1_4
+void nm_vpn_editor_plugin_set_plugin_info(NMVpnEditorPlugin *plugin, NMVpnPluginInfo *plugin_info);
+
+#include "nm-vpn-plugin-info.h"
+
+G_END_DECLS
+
+#endif /* __NM_VPN_EDITOR_PLUGIN_H__ */
diff --git a/src/libnm-core-public/nm-vpn-plugin-info.h b/src/libnm-core-public/nm-vpn-plugin-info.h
new file mode 100644
index 00000000..1e9870c8
--- /dev/null
+++ b/src/libnm-core-public/nm-vpn-plugin-info.h
@@ -0,0 +1,105 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2015 Red Hat, Inc.
+ */
+
+#ifndef __NM_VPN_PLUGIN_INFO_H__
+#define __NM_VPN_PLUGIN_INFO_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "nm-utils.h"
+#include "nm-vpn-editor-plugin.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_VPN_PLUGIN_INFO (nm_vpn_plugin_info_get_type())
+#define NM_VPN_PLUGIN_INFO(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_VPN_PLUGIN_INFO, NMVpnPluginInfo))
+#define NM_VPN_PLUGIN_INFO_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_VPN_PLUGIN_INFO, NMVpnPluginInfoClass))
+#define NM_IS_VPN_PLUGIN_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_VPN_PLUGIN_INFO))
+#define NM_IS_VPN_PLUGIN_INFO_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_VPN_PLUGIN_INFO))
+#define NM_VPN_PLUGIN_INFO_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_VPN_PLUGIN_INFO, NMVpnPluginInfoClass))
+
+#define NM_VPN_PLUGIN_INFO_NAME     "name"
+#define NM_VPN_PLUGIN_INFO_FILENAME "filename"
+#define NM_VPN_PLUGIN_INFO_KEYFILE  "keyfile"
+
+#define NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION "VPN Connection"
+#define NM_VPN_PLUGIN_INFO_KF_GROUP_LIBNM      "libnm"
+#define NM_VPN_PLUGIN_INFO_KF_GROUP_GNOME      "GNOME"
+
+typedef struct _NMVpnPluginInfoClass NMVpnPluginInfoClass;
+
+NM_AVAILABLE_IN_1_2
+GType nm_vpn_plugin_info_get_type(void);
+
+NM_AVAILABLE_IN_1_2
+NMVpnPluginInfo *nm_vpn_plugin_info_new_from_file(const char *filename, GError **error);
+
+NM_AVAILABLE_IN_1_2
+NMVpnPluginInfo *
+nm_vpn_plugin_info_new_with_data(const char *filename, GKeyFile *keyfile, GError **error);
+
+NM_AVAILABLE_IN_1_4
+NMVpnPluginInfo *nm_vpn_plugin_info_new_search_file(const char *name, const char *service);
+
+NM_AVAILABLE_IN_1_2
+const char *nm_vpn_plugin_info_get_name(NMVpnPluginInfo *self);
+NM_AVAILABLE_IN_1_2
+const char *nm_vpn_plugin_info_get_filename(NMVpnPluginInfo *self);
+NM_AVAILABLE_IN_1_4
+const char *nm_vpn_plugin_info_get_service(NMVpnPluginInfo *self);
+NM_AVAILABLE_IN_1_2
+const char *nm_vpn_plugin_info_get_plugin(NMVpnPluginInfo *self);
+NM_AVAILABLE_IN_1_2
+const char *nm_vpn_plugin_info_get_program(NMVpnPluginInfo *self);
+NM_AVAILABLE_IN_1_4
+const char *nm_vpn_plugin_info_get_auth_dialog(NMVpnPluginInfo *self);
+NM_AVAILABLE_IN_1_4
+gboolean nm_vpn_plugin_info_supports_hints(NMVpnPluginInfo *self);
+NM_AVAILABLE_IN_1_2
+gboolean nm_vpn_plugin_info_supports_multiple(NMVpnPluginInfo *self);
+NM_AVAILABLE_IN_1_4
+const char *const *nm_vpn_plugin_info_get_aliases(NMVpnPluginInfo *self);
+NM_AVAILABLE_IN_1_2
+const char *
+nm_vpn_plugin_info_lookup_property(NMVpnPluginInfo *self, const char *group, const char *key);
+
+NM_AVAILABLE_IN_1_2
+gboolean nm_vpn_plugin_info_validate_filename(const char *filename);
+
+NM_AVAILABLE_IN_1_2
+GSList *nm_vpn_plugin_info_list_load(void);
+NM_AVAILABLE_IN_1_2
+gboolean nm_vpn_plugin_info_list_add(GSList **list, NMVpnPluginInfo *plugin_info, GError **error);
+NM_AVAILABLE_IN_1_2
+gboolean nm_vpn_plugin_info_list_remove(GSList **list, NMVpnPluginInfo *plugin_info);
+NM_AVAILABLE_IN_1_2
+NMVpnPluginInfo *nm_vpn_plugin_info_list_find_by_name(GSList *list, const char *name);
+NM_AVAILABLE_IN_1_2
+NMVpnPluginInfo *nm_vpn_plugin_info_list_find_by_filename(GSList *list, const char *filename);
+NM_AVAILABLE_IN_1_2
+NMVpnPluginInfo *nm_vpn_plugin_info_list_find_by_service(GSList *list, const char *service);
+
+NM_AVAILABLE_IN_1_4
+char *nm_vpn_plugin_info_list_find_service_type(GSList *list, const char *name);
+NM_AVAILABLE_IN_1_4
+char **nm_vpn_plugin_info_list_get_service_types(GSList * list,
+                                                 gboolean only_existing,
+                                                 gboolean with_abbreviations);
+
+NM_AVAILABLE_IN_1_2
+NMVpnEditorPlugin *nm_vpn_plugin_info_get_editor_plugin(NMVpnPluginInfo *self);
+NM_AVAILABLE_IN_1_2
+void nm_vpn_plugin_info_set_editor_plugin(NMVpnPluginInfo *self, NMVpnEditorPlugin *plugin);
+NM_AVAILABLE_IN_1_2
+NMVpnEditorPlugin *nm_vpn_plugin_info_load_editor_plugin(NMVpnPluginInfo *self, GError **error);
+
+G_END_DECLS
+
+#endif /* __NM_VPN_PLUGIN_INFO_H__ */