From 2bceb27e30369f1e5a6b19434a22f5eab5dfe7a9 Mon Sep 17 00:00:00 2001 From: Packit Service Date: Feb 12 2021 08:18:06 +0000 Subject: NetworkManager-1.30.0 base --- diff --git a/Makefile.am b/Makefile.am index 7ae9648..f2fb928 100644 --- a/Makefile.am +++ b/Makefile.am @@ -354,7 +354,6 @@ shared_nm_std_aux_libnm_std_aux_la_CPPFLAGS = \ $(CODE_COVERAGE_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION='0' \ $(NULL) shared_nm_std_aux_libnm_std_aux_la_SOURCES = \ @@ -362,6 +361,8 @@ shared_nm_std_aux_libnm_std_aux_la_SOURCES = \ shared/nm-std-aux/c-list-util.c \ shared/nm-std-aux/c-list-util.h \ shared/nm-std-aux/nm-dbus-compat.h \ + shared/nm-std-aux/nm-default-std.h \ + shared/nm-std-aux/nm-networkmanager-compilation.h \ shared/nm-std-aux/nm-std-aux.h \ shared/nm-std-aux/nm-std-utils.c \ shared/nm-std-aux/nm-std-utils.h \ @@ -382,7 +383,6 @@ shared_nm_glib_aux_cppflags = \ $(SANITIZER_LIB_CFLAGS) \ $(GLIB_CFLAGS) \ -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)' \ $(NULL) noinst_LTLIBRARIES += shared/nm-glib-aux/libnm-glib-aux.la @@ -397,10 +397,14 @@ shared_nm_glib_aux_libnm_glib_aux_la_SOURCES = \ shared/nm-glib-aux/nm-dbus-aux.h \ shared/nm-glib-aux/nm-dedup-multi.c \ shared/nm-glib-aux/nm-dedup-multi.h \ + shared/nm-glib-aux/nm-default-glib-i18n-lib.h \ + shared/nm-glib-aux/nm-default-glib-i18n-prog.h \ + shared/nm-glib-aux/nm-default-glib.h \ shared/nm-glib-aux/nm-enum-utils.c \ shared/nm-glib-aux/nm-enum-utils.h \ shared/nm-glib-aux/nm-errno.c \ shared/nm-glib-aux/nm-errno.h \ + shared/nm-glib-aux/nm-gassert-patch.h \ shared/nm-glib-aux/nm-glib.h \ shared/nm-glib-aux/nm-hash-utils.c \ shared/nm-glib-aux/nm-hash-utils.h \ @@ -499,7 +503,6 @@ shared_nm_log_core_libnm_log_core_la_CPPFLAGS = \ $(GLIB_CFLAGS) \ $(SYSTEMD_JOURNAL_CFLAGS) \ -DG_LOG_DOMAIN=\""NetworkManager"\" \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)' \ $(NULL) shared_nm_log_core_libnm_log_core_la_SOURCES = \ @@ -551,8 +554,7 @@ check_programs += shared/nm-platform/tests/test-nm-platform shared_nm_platform_tests_test_nm_platform_CPPFLAGS = \ $(dflt_cppflags) \ -I$(srcdir)/shared \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)' \ + -DG_LOG_DOMAIN=\""test"\" \ $(CODE_COVERAGE_CFLAGS) \ $(SYSTEMD_JOURNAL_CFLAGS) \ $(GLIB_CFLAGS) \ @@ -592,7 +594,6 @@ libnm_core_nm_libnm_core_intern_libnm_libnm_core_intern_la_CPPFLAGS = \ $(GLIB_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE \ $(NULL) libnm_core_nm_libnm_core_intern_libnm_libnm_core_intern_la_SOURCES = \ @@ -630,7 +631,6 @@ libnm_core_nm_libnm_core_aux_libnm_libnm_core_aux_la_CPPFLAGS = \ $(GLIB_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_WITH_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)' \ $(NULL) libnm_core_nm_libnm_core_aux_libnm_libnm_core_aux_la_SOURCES = \ @@ -654,41 +654,6 @@ EXTRA_DIST += libnm-core/nm-libnm-core-aux/README.md ############################################################################### -noinst_LTLIBRARIES += libnm-core/nm-keyfile/libnm-keyfile.la - -libnm_core_nm_keyfile_libnm_keyfile_la_CPPFLAGS = \ - $(dflt_cppflags) \ - -I$(srcdir)/shared \ - -I$(builddir)/shared \ - -I$(srcdir)/libnm-core \ - -I$(builddir)/libnm-core \ - $(CODE_COVERAGE_CFLAGS) \ - $(GLIB_CFLAGS) \ - $(SANITIZER_LIB_CFLAGS) \ - -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)' \ - $(NULL) - -libnm_core_nm_keyfile_libnm_keyfile_la_SOURCES = \ - libnm-core/nm-keyfile/nm-keyfile-internal.h \ - libnm-core/nm-keyfile/nm-keyfile-utils.c \ - libnm-core/nm-keyfile/nm-keyfile-utils.h \ - libnm-core/nm-keyfile/nm-keyfile.c \ - $(NULL) - -libnm_core_nm_keyfile_libnm_keyfile_la_LDFLAGS = \ - $(CODE_COVERAGE_LDFLAGS) \ - $(SANITIZER_LIB_LDFLAGS) \ - $(NULL) - -libnm_core_nm_keyfile_libnm_keyfile_la_LIBADD = \ - $(GLIB_LIBS) \ - $(NULL) - -$(libnm_core_nm_keyfile_libnm_keyfile_la_OBJECTS): $(libnm_core_lib_h_pub_mkenums) - -############################################################################### - noinst_LTLIBRARIES += libnm/nm-libnm-aux/libnm-libnm-aux.la libnm_nm_libnm_aux_libnm_libnm_aux_la_CPPFLAGS = \ @@ -703,7 +668,6 @@ libnm_nm_libnm_aux_libnm_libnm_aux_la_CPPFLAGS = \ $(GLIB_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ -DG_LOG_DOMAIN=\""libnmc"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ $(NULL) libnm_nm_libnm_aux_libnm_libnm_aux_la_SOURCES = \ @@ -740,8 +704,7 @@ check_programs += shared/nm-glib-aux/tests/test-shared-general shared_nm_glib_aux_tests_test_shared_general_CPPFLAGS = \ $(dflt_cppflags) \ -I$(srcdir)/shared \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)' \ + -DG_LOG_DOMAIN=\""test"\" \ $(CODE_COVERAGE_CFLAGS) \ $(GLIB_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ @@ -769,8 +732,7 @@ check_programs += shared/nm-glib-aux/tests/test-json-aux shared_nm_glib_aux_tests_test_json_aux_CPPFLAGS = \ $(dflt_cppflags) \ -I$(srcdir)/shared \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)' \ + -DG_LOG_DOMAIN=\""test"\" \ $(CODE_COVERAGE_CFLAGS) \ $(GLIB_CFLAGS) \ $(JANSSON_CFLAGS) \ @@ -1041,7 +1003,6 @@ check_local += check-docs ############################################################################### libnm_core_lib_h_pub_real = \ - shared/nm-version-macros.h \ libnm-core/nm-connection.h \ libnm-core/nm-core-types.h \ libnm-core/nm-dbus-interface.h \ @@ -1102,6 +1063,7 @@ libnm_core_lib_h_pub_real = \ libnm-core/nm-setting.h \ libnm-core/nm-simple-connection.h \ libnm-core/nm-utils.h \ + libnm-core/nm-version-macros.h \ libnm-core/nm-version.h \ libnm-core/nm-vpn-dbus-interface.h \ libnm-core/nm-vpn-editor-plugin.h \ @@ -1111,12 +1073,16 @@ libnm_core_lib_h_pub_mkenums = \ libnm-core/nm-core-enum-types.h \ $(NULL) libnm_core_lib_h_priv = \ - shared/nm-meta-setting.h \ libnm-core/nm-connection-private.h \ libnm-core/nm-core-internal.h \ libnm-core/nm-core-types-internal.h \ libnm-core/nm-crypto-impl.h \ libnm-core/nm-crypto.h \ + libnm-core/nm-default-libnm-core.h \ + libnm-core/nm-keyfile-internal.h \ + libnm-core/nm-keyfile-utils.h \ + libnm-core/nm-meta-setting-base-impl.h \ + libnm-core/nm-meta-setting-base.h \ libnm-core/nm-property-compare.h \ libnm-core/nm-setting-private.h \ libnm-core/nm-team-utils.h \ @@ -1178,11 +1144,13 @@ libnm_core_lib_c_settings_real = \ $(NULL) libnm_core_lib_c_real = \ $(libnm_core_lib_c_settings_real) \ - shared/nm-meta-setting.c \ libnm-core/nm-connection.c \ libnm-core/nm-crypto.c \ libnm-core/nm-dbus-utils.c \ libnm-core/nm-errors.c \ + libnm-core/nm-keyfile-utils.c \ + libnm-core/nm-keyfile.c \ + libnm-core/nm-meta-setting-base-impl.c \ libnm-core/nm-property-compare.c \ libnm-core/nm-setting.c \ libnm-core/nm-simple-connection.c \ @@ -1222,7 +1190,7 @@ GLIB_GENERATED += \ $(libnm_core_lib_c_mkenums) nm_core_enum_types_sources = $(libnm_core_lib_h_pub_real) -nm_core_enum_types_MKENUMS_C_FLAGS = --identifier-prefix NM --fhead '\#include "nm-default.h"\n' +nm_core_enum_types_MKENUMS_C_FLAGS = --identifier-prefix NM --fhead '\#include "libnm-core/nm-default-libnm-core.h"\n' libnm-core/nm-core-enum-types.h.stamp: libnm-core/.dirstamp libnm-core/nm-core-enum-types.c.stamp: libnm-core/.dirstamp @@ -1243,7 +1211,6 @@ $(src_core_devices_ovs_libnm_device_plugin_ovs_la_OBJECTS): $(li libnm_core_libnm_core_la_CPPFLAGS = \ $(dflt_cppflags_libnm_core) \ -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE \ $(NULL) libnm_core_libnm_core_la_SOURCES = \ @@ -1268,8 +1235,6 @@ libnm_core_libnm_core_la_LDFLAGS = \ EXTRA_DIST += \ libnm-core/nm-crypto-gnutls.c \ libnm-core/nm-crypto-nss.c \ - libnm-core/nm-core-enum-types.c.template \ - libnm-core/nm-core-enum-types.h.template \ libnm-core/meson.build \ $(NULL) @@ -1344,7 +1309,7 @@ GLIB_GENERATED += \ libnm-core/tests/nm-core-tests-enum-types.h \ libnm-core/tests/nm-core-tests-enum-types.c nm_core_tests_enum_types_sources = libnm-core/tests/test-general-enums.h -nm_core_tests_enum_types_MKENUMS_C_FLAGS = --fhead '\#include "nm-default.h"\n' +nm_core_tests_enum_types_MKENUMS_C_FLAGS = --fhead '\#include "libnm-core/nm-default-libnm-core.h"\n' libnm-core/tests/nm-core-tests-enum-types.h.stamp: libnm-core/tests/.dirstamp libnm-core/tests/nm-core-tests-enum-types.c.stamp: libnm-core/tests/.dirstamp @@ -1355,8 +1320,7 @@ libnm_core_tests_cppflags = \ -I$(srcdir)/libnm-core/tests \ -I$(builddir)/libnm-core/tests \ $(dflt_cppflags_libnm_core) \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE \ + -DG_LOG_DOMAIN=\""test"\" \ $(SANITIZER_EXEC_CFLAGS) \ $(NULL) @@ -1380,7 +1344,6 @@ nodist_libnm_core_tests_test_general_SOURCES = \ libnm_core_tests_ldadd = \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -1457,7 +1420,6 @@ EXTRA_DIST += \ ############################################################################### libnm_lib_h_pub_real = \ - shared/nm-version-macros.h \ libnm/NetworkManager.h \ libnm/nm-access-point.h \ libnm/nm-active-connection.h \ @@ -1510,14 +1472,16 @@ libnm_lib_h_pub_real = \ libnm_lib_h_pub_mkenums = \ libnm/nm-enum-types.h libnm_lib_h_priv = \ - libnm/nm-libnm-utils.h \ libnm/nm-dbus-helpers.h \ + libnm/nm-default-client.h \ + libnm/nm-default-libnm.h \ libnm/nm-device-private.h \ libnm/nm-dhcp4-config.h \ libnm/nm-dhcp6-config.h \ libnm/nm-dns-manager.h \ libnm/nm-ip4-config.h \ libnm/nm-ip6-config.h \ + libnm/nm-libnm-utils.h \ libnm/nm-object-private.h \ libnm/nm-remote-connection-private.h \ $(NULL) @@ -1584,7 +1548,6 @@ libnm_lib_cppflags = \ -I$(builddir)/libnm \ $(dflt_cppflags_libnm_core) \ -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM \ $(NULL) libnminclude_HEADERS += \ @@ -1613,7 +1576,6 @@ nodist_libnm_libnm_static_la_SOURCES = \ libnm_libnm_static_la_LIBADD = \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -1645,7 +1607,7 @@ nm_enum_types_sources = \ $(libnm_lib_h_pub_mkenums) \ $(libnm_lib_h_pub_real) nm_enum_types_MKENUMS_H_FLAGS = --identifier-prefix NM --fhead '\#include "nm-core-enum-types.h"\n' -nm_enum_types_MKENUMS_C_FLAGS = --identifier-prefix NM --fhead '\#include "nm-default.h"\n' +nm_enum_types_MKENUMS_C_FLAGS = --identifier-prefix NM --fhead '\#include "libnm/nm-default-libnm.h"\n' $(dispatcher_nm_dispatcher_OBJECTS): $(libnm_lib_h_pub_mkenums) $(dispatcher_libnm_dispatcher_core_la_OBJECTS): $(libnm_lib_h_pub_mkenums) @@ -1699,7 +1661,10 @@ libnm/NM-1.0.gir: libnm/libnm.la libnm_NM_1_0_gir_INCLUDES = Gio-2.0 libnm_NM_1_0_gir_PACKAGES = gio-2.0 libnm_NM_1_0_gir_EXPORT_PACKAGES = libnm -libnm_NM_1_0_gir_CFLAGS = $(libnm_libnm_la_CPPFLAGS) +libnm_NM_1_0_gir_CFLAGS = \ + $(libnm_libnm_la_CPPFLAGS) \ + -DNETWORKMANAGER_COMPILATION \ + $(NULL) libnm_NM_1_0_gir_LIBS = libnm/libnm.la libnm_NM_1_0_gir_FILES = \ $(libnm_core_lib_h_pub_mkenums) \ @@ -1708,7 +1673,6 @@ libnm_NM_1_0_gir_FILES = \ $(libnm_core_lib_c_real) \ $(libnm_lib_h_pub_mkenums) \ $(libnm_lib_h_pub_real) \ - libnm-core/nm-keyfile/nm-keyfile.c \ $(libnm_lib_c_mkenums) \ $(libnm_lib_c_real) libnm_NM_1_0_gir_SCANNERFLAGS = --warn-all --identifier-prefix=NM --symbol-prefix=nm @@ -1777,8 +1741,6 @@ EXTRA_DIST += \ tools/generate-docs-nm-settings-docs-merge.py \ tools/generate-docs-nm-settings-docs-gir.py \ libnm/meson.build \ - libnm/nm-enum-types.c.template \ - libnm/nm-enum-types.h.template \ $(NULL) ############################################################################### @@ -1800,8 +1762,7 @@ libnm_tests_cppflags = \ -I$(srcdir)/libnm \ -I$(builddir)/libnm \ $(dflt_cppflags_libnm_core) \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM \ + -DG_LOG_DOMAIN=\""test"\" \ $(SANITIZER_EXEC_CFLAGS) \ $(NULL) @@ -1880,8 +1841,7 @@ libnm_tests_libnm_vpn_plugin_utils_test_la_CFLAGS = \ -I$(builddir)/libnm \ $(GLIB_CFLAGS) \ $(SANITIZER_EXEC_CFLAGS) \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ + -DG_LOG_DOMAIN=\""test"\" \ $(NULL) libnm_tests_libnm_vpn_plugin_utils_test_la_LIBADD = \ @@ -1898,13 +1858,12 @@ EXTRA_DIST += \ src_core_cppflags_base = \ -I$(srcdir)/src/core \ $(dflt_cppflags_libnm_core) \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_DAEMON \ + -DG_LOG_DOMAIN=\""NetworkManager"\" \ $(SANITIZER_EXEC_CFLAGS) \ $(NULL) src_core_cppflags_base_test = \ $(src_core_cppflags_base) \ - -DNETWORKMANAGER_COMPILATION_TEST \ $(NULL) src_core_cppflags_device_plugin = \ @@ -1925,7 +1884,6 @@ src_core_cppflags = \ src_core_cppflags_test = \ $(src_core_cppflags) \ - -DNETWORKMANAGER_COMPILATION_TEST \ $(NULL) if REQUIRE_ROOT_TESTS @@ -1970,7 +1928,6 @@ noinst_LTLIBRARIES += shared/systemd/libnm-systemd-logging-stub.la shared_systemd_libnm_systemd_logging_stub_la_CPPFLAGS = \ $(libsystemd_cppflags) \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD_SHARED \ -DG_LOG_DOMAIN=\""libnm"\" \ $(NULL) @@ -1987,11 +1944,11 @@ noinst_LTLIBRARIES += shared/systemd/libnm-systemd-shared.la shared_systemd_libnm_systemd_shared_la_CPPFLAGS = \ $(libsystemd_cppflags) \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD_SHARED \ -DG_LOG_DOMAIN=\""libnm"\" \ $(NULL) shared_systemd_libnm_systemd_shared_la_SOURCES = \ + shared/systemd/nm-default-systemd-shared.h \ shared/systemd/nm-sd-utils-shared.c \ shared/systemd/nm-sd-utils-shared.h \ shared/systemd/sd-adapt-shared/architecture.h \ @@ -2018,7 +1975,6 @@ shared_systemd_libnm_systemd_shared_la_SOURCES = \ shared/systemd/sd-adapt-shared/mkdir.h \ shared/systemd/sd-adapt-shared/namespace-util.h \ shared/systemd/sd-adapt-shared/nm-sd-adapt-shared.h \ - shared/systemd/sd-adapt-shared/nm-sd-adapt-shared.h \ shared/systemd/sd-adapt-shared/nulstr-util.h \ shared/systemd/sd-adapt-shared/raw-clone.h \ shared/systemd/sd-adapt-shared/rlimit-util.h \ @@ -2137,7 +2093,7 @@ src_core_libnm_systemd_core_la_cppflags = \ -I$(srcdir)/src/core/systemd/src/systemd \ -I$(srcdir)/src/core/systemd/src/libsystemd-network \ -I$(srcdir)/src/core/systemd/src/libsystemd/sd-event \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD \ + -DG_LOG_DOMAIN=\""NetworkManager"\" \ $(NULL) src_core_libnm_systemd_core_la_libadd = \ @@ -2146,6 +2102,7 @@ src_core_libnm_systemd_core_la_libadd = \ $(NULL) src_core_libnm_systemd_core_la_SOURCES = \ + src/core/systemd/nm-default-systemd.h \ src/core/systemd/nm-sd-utils-core.c \ src/core/systemd/nm-sd-utils-core.h \ src/core/systemd/nm-sd.c \ @@ -2318,6 +2275,8 @@ src_core_libNetworkManager_la_CPPFLAGS = $(src_core_cppflags) src_core_libNetworkManager_la_SOURCES = \ \ + src/core/nm-default-daemon.h \ + \ src/core/nm-checkpoint.c \ src/core/nm-checkpoint.h \ src/core/nm-checkpoint-manager.c \ @@ -2496,7 +2455,6 @@ src_core_libNetworkManager_la_SOURCES = \ src_core_libNetworkManager_la_LIBADD = \ src/core/libNetworkManagerBase.la \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -2610,7 +2568,6 @@ src_core_nm_iface_helper_SOURCES = \ src_core_nm_iface_helper_LDADD = \ src/core/libNetworkManagerBase.la \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -2665,7 +2622,6 @@ src_core_initrd_nm_initrd_generator_LDADD = \ src/core/initrd/libnmi-core.la \ src/core/libNetworkManagerBase.la \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -2691,13 +2647,13 @@ src_core_initrd_nm_initrd_generator_LDFLAGS = \ check_programs += src/core/initrd/tests/test-dt-reader src_core_initrd_tests_test_dt_reader_CPPFLAGS = \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DTEST_INITRD_DIR=\"$(abs_srcdir)/src/core/initrd/tests\" \ - $(src_core_cppflags) + $(src_core_cppflags) \ + $(NULL) src_core_initrd_tests_test_dt_reader_LDFLAGS = \ $(CODE_COVERAGE_LDFLAGS) \ - $(SANITIZER_EXEC_LDFLAGS) + $(SANITIZER_EXEC_LDFLAGS) \ + $(NULL) src_core_initrd_tests_test_dt_reader_LDADD = \ src/core/initrd/libnmi-core.la \ @@ -2711,13 +2667,13 @@ src_core_initrd_tests_test_dt_reader_LDADD = \ check_programs += src/core/initrd/tests/test-ibft-reader src_core_initrd_tests_test_ibft_reader_CPPFLAGS = \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DTEST_INITRD_DIR=\"$(abs_srcdir)/src/core/initrd/tests\" \ - $(src_core_cppflags) + $(src_core_cppflags) \ + $(NULL) src_core_initrd_tests_test_ibft_reader_LDFLAGS = \ $(CODE_COVERAGE_LDFLAGS) \ - $(SANITIZER_EXEC_LDFLAGS) + $(SANITIZER_EXEC_LDFLAGS) \ + $(NULL) src_core_initrd_tests_test_ibft_reader_LDADD = \ src/core/initrd/libnmi-core.la \ @@ -2947,9 +2903,8 @@ EXTRA_DIST += \ check_programs += src/core/initrd/tests/test-cmdline-reader src_core_initrd_tests_test_cmdline_reader_CPPFLAGS = \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DTEST_INITRD_DIR=\"$(abs_srcdir)/src/core/initrd/tests\" \ - $(src_core_cppflags) + $(src_core_cppflags) \ + $(NULL) src_core_initrd_tests_test_cmdline_reader_LDFLAGS = \ $(CODE_COVERAGE_LDFLAGS) \ @@ -2988,7 +2943,6 @@ src_core_dhcp_nm_dhcp_helper_CPPFLAGS = \ -I$(srcdir)/shared \ -I$(builddir)/shared \ -DG_LOG_DOMAIN=\""nm-dhcp-helper"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_GLIB \ $(GLIB_CFLAGS) \ $(NULL) @@ -3051,7 +3005,6 @@ src_core_ppp_nm_pppd_plugin_la_CPPFLAGS = \ -I$(builddir)/shared \ -I$(srcdir)/libnm-core \ -DG_LOG_DOMAIN=\""nm-pppd-plugin"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_GLIB \ $(GLIB_CFLAGS) src_core_ppp_nm_pppd_plugin_la_SOURCES = \ @@ -4330,7 +4283,6 @@ $(src_core_tests_test_wired_defname_OBJECTS): $(libnm_core_lib_h_pub_mkenums) src_core_tests_test_systemd_CPPFLAGS = \ $(src_core_libnm_systemd_core_la_cppflags) \ - -DNETWORKMANAGER_COMPILATION_TEST \ $(NULL) src_core_tests_test_systemd_LDFLAGS = \ @@ -4391,7 +4343,6 @@ dispatcher_cppflags = \ -I$(builddir)/dispatcher \ $(GLIB_CFLAGS) \ -DG_LOG_DOMAIN=\""nm-dispatcher"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ $(NULL) dispatcher_libnm_dispatcher_core_la_SOURCES = \ @@ -4472,8 +4423,7 @@ dispatcher_tests_test_dispatcher_envp_CPPFLAGS = \ -I$(builddir)/libnm \ -I$(srcdir)/dispatcher \ -I$(builddir)/dispatcher \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ + -DG_LOG_DOMAIN=\""NetworkManager"\" \ $(GLIB_CFLAGS) \ $(SANITIZER_EXEC_CFLAGS) \ $(INTROSPECTION_EXTRA_CFLAGS) \ @@ -4529,7 +4479,6 @@ clients_nm_online_CPPFLAGS = \ -I$(builddir)/libnm \ $(GLIB_CFLAGS) \ -DG_LOG_DOMAIN=\""nm-online"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ $(NULL) clients_nm_online_LDFLAGS = \ @@ -4565,7 +4514,6 @@ clients_cppflags = \ -I$(srcdir)/libnm \ -I$(builddir)/libnm \ -I$(srcdir)/clients/common \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ $(GLIB_CFLAGS) \ $(SANITIZER_EXEC_CFLAGS) \ $(NULL) @@ -4625,8 +4573,9 @@ EXTRA_LTLIBRARIES += clients/common/libnmc.la endif clients_common_libnmc_la_SOURCES = \ - shared/nm-meta-setting.c \ - shared/nm-meta-setting.h \ + clients/common/nm-meta-setting-base-impl.c \ + clients/common/nm-meta-setting-base-impl.h \ + clients/common/nm-meta-setting-base.h \ \ clients/common/nm-meta-setting-desc.c \ clients/common/nm-meta-setting-desc.h \ @@ -4660,7 +4609,7 @@ endif clients_common_tests_test_clients_common_CPPFLAGS = \ -I$(srcdir)/clients/common/tests \ $(clients_cppflags) \ - -DNETWORKMANAGER_COMPILATION_TEST \ + -DG_LOG_DOMAIN=\""test"\" \ $(NULL) clients_common_tests_test_clients_common_LDFLAGS = \ @@ -4701,8 +4650,7 @@ clients_common_tests_test_libnm_core_aux_CPPFLAGS = \ -I$(srcdir)/libnm-core \ -I$(builddir)/libnm \ -I$(srcdir)/libnm \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ + -DG_LOG_DOMAIN=\""test"\" \ $(CODE_COVERAGE_CFLAGS) \ $(GLIB_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ @@ -5042,10 +4990,9 @@ EXTRA_DIST += \ if BUILD_NM_CLOUD_SETUP -libexec_PROGRAMS += clients/cloud-setup/nm-cloud-setup +noinst_LIBRARIES += clients/cloud-setup/libnm-cloud-setup-core.a -clients_cloud_setup_nm_cloud_setup_SOURCES = \ - clients/cloud-setup/main.c \ +clients_cloud_setup_libnm_cloud_setup_core_a_SOURCES = \ clients/cloud-setup/nm-cloud-setup-utils.c \ clients/cloud-setup/nm-cloud-setup-utils.h \ clients/cloud-setup/nm-http-client.c \ @@ -5060,6 +5007,21 @@ clients_cloud_setup_nm_cloud_setup_SOURCES = \ clients/cloud-setup/nmcs-provider-azure.h \ $(NULL) +clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS = \ + $(clients_cppflags) \ + -DG_LOG_DOMAIN=\""nm-cloud-setup"\" \ + $(LIBCURL_CFLAGS) \ + $(NULL) + +$(clients_cloud_setup_libnm_cloud_setup_core_a_OBJECTS): $(libnm_core_lib_h_pub_mkenums) +$(clients_cloud_setup_libnm_cloud_setup_core_a_OBJECTS): $(libnm_lib_h_pub_mkenums) + +libexec_PROGRAMS += clients/cloud-setup/nm-cloud-setup + +clients_cloud_setup_nm_cloud_setup_SOURCES = \ + clients/cloud-setup/main.c \ + $(NULL) + clients_cloud_setup_nm_cloud_setup_CPPFLAGS = \ $(clients_cppflags) \ -DG_LOG_DOMAIN=\""nm-cloud-setup"\" \ @@ -5072,6 +5034,7 @@ clients_cloud_setup_nm_cloud_setup_LDFLAGS = \ $(NULL) clients_cloud_setup_nm_cloud_setup_LDADD = \ + clients/cloud-setup/libnm-cloud-setup-core.a \ libnm/nm-libnm-aux/libnm-libnm-aux.la \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -5116,11 +5079,43 @@ EXTRA_DIST += \ clients/cloud-setup/meson.build \ clients/cloud-setup/nm-cloud-setup.service.in \ clients/cloud-setup/nm-cloud-setup.timer \ + clients/cloud-setup/tests/meson.build \ $(NULL) CLEANFILES += \ clients/cloud-setup/nm-cloud-setup.service +check_programs += clients/cloud-setup/tests/test-cloud-setup-general + +clients_cloud_setup_tests_test_cloud_setup_general_CPPFLAGS = \ + $(clients_cppflags) \ + -I$(srcdir)/clients/cloud-setup \ + -DG_LOG_DOMAIN=\""tests"\" \ + $(LIBCURL_CFLAGS) \ + $(NULL) + +clients_cloud_setup_tests_test_cloud_setup_general_LDFLAGS = \ + $(CODE_COVERAGE_LDFLAGS) \ + $(SANITIZER_EXEC_LDFLAGS) \ + $(NULL) + +clients_cloud_setup_tests_test_cloud_setup_general_LDADD = \ + clients/cloud-setup/libnm-cloud-setup-core.a \ + libnm/nm-libnm-aux/libnm-libnm-aux.la \ + libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ + libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ + shared/nm-base/libnm-base.la \ + shared/nm-glib-aux/libnm-glib-aux.la \ + shared/nm-std-aux/libnm-std-aux.la \ + shared/libcsiphash.la \ + libnm/libnm.la \ + $(GLIB_LIBS) \ + $(LIBCURL_LIBS) \ + $(NULL) + +$(clients_cloud_setup_tests_test_cloud_setup_general_OBJECTS): $(libnm_core_lib_h_pub_mkenums) +$(clients_cloud_setup_tests_test_cloud_setup_general_OBJECTS): $(libnm_lib_h_pub_mkenums) + endif ############################################################################### @@ -5435,8 +5430,6 @@ EXTRA_DIST += \ \ po/meson.build \ \ - shared/nm-default.h \ - shared/nm-gassert-patch.h \ shared/nm-test-libnm-utils.h \ shared/nm-test-utils-impl.c \ shared/nm-utils/nm-compat.c \ @@ -5446,14 +5439,16 @@ EXTRA_DIST += \ shared/nm-utils/nm-vpn-plugin-macros.h \ shared/nm-utils/nm-vpn-plugin-utils.c \ shared/nm-utils/nm-vpn-plugin-utils.h \ - shared/nm-version-macros.h.in \ shared/meson.build \ \ + libnm-core/nm-version-macros.h.in \ + \ tools/check-config-options.sh \ tools/check-docs.sh \ tools/check-exports.sh \ tools/check-compare-generated.sh \ tools/check-gitlab-ci.sh \ + tools/check-tree.sh \ tools/create-exports-NetworkManager.sh \ tools/debug-helper.py \ tools/meson-post-install.sh \ @@ -5489,6 +5484,11 @@ endif ############################################################################### +check-tree: + "$(top_srcdir)/tools/check-tree.sh" + +check_local += check-tree + check-po-msgfmt: @echo "check-po-msgfmt: check $(top_srcdir)/po/*.po files with msgfmt -vc" @for f in "$(top_srcdir)/po"/*.po ; do \ diff --git a/Makefile.in b/Makefile.in index c076955..7e095e5 100644 --- a/Makefile.in +++ b/Makefile.in @@ -137,16 +137,16 @@ build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = src/core/NetworkManager-all-sym$(EXEEXT) \ clients/cli/generate-docs-nm-settings-nmcli$(EXEEXT) \ - $(am__EXEEXT_19) -check_PROGRAMS = $(am__EXEEXT_17) + $(am__EXEEXT_20) +check_PROGRAMS = $(am__EXEEXT_18) sbin_PROGRAMS = src/core/NetworkManager$(EXEEXT) bin_PROGRAMS = clients/nm-online$(EXEEXT) $(am__EXEEXT_1) \ $(am__EXEEXT_2) libexec_PROGRAMS = src/core/nm-iface-helper$(EXEEXT) \ src/core/initrd/nm-initrd-generator$(EXEEXT) \ src/core/dhcp/nm-dhcp-helper$(EXEEXT) \ - dispatcher/nm-dispatcher$(EXEEXT) $(am__EXEEXT_18) -TESTS = $(am__EXEEXT_12) + dispatcher/nm-dispatcher$(EXEEXT) $(am__EXEEXT_19) +TESTS = $(am__EXEEXT_13) @HAVE_DOCS_TRUE@am__append_1 = \ @HAVE_DOCS_TRUE@ docs/libnm \ @HAVE_DOCS_TRUE@ docs/api @@ -290,76 +290,79 @@ TESTS = $(am__EXEEXT_12) ############################################################################### # clients/nm-cloud-setup ############################################################################### -@BUILD_NM_CLOUD_SETUP_TRUE@am__append_63 = clients/cloud-setup/nm-cloud-setup -@BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@am__append_64 = \ +@BUILD_NM_CLOUD_SETUP_TRUE@am__append_63 = clients/cloud-setup/libnm-cloud-setup-core.a +@BUILD_NM_CLOUD_SETUP_TRUE@am__append_64 = clients/cloud-setup/nm-cloud-setup +@BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@am__append_65 = \ @BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@ clients/cloud-setup/nm-cloud-setup.service \ @BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@ clients/cloud-setup/nm-cloud-setup.timer \ @BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@ $(NULL) -@BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@am__append_65 = install-data-hook-cloud-setup -@BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@am__append_66 = uninstall-hook-cloud-setup -@BUILD_NM_CLOUD_SETUP_TRUE@am__append_67 = \ +@BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@am__append_66 = install-data-hook-cloud-setup +@BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@am__append_67 = uninstall-hook-cloud-setup +@BUILD_NM_CLOUD_SETUP_TRUE@am__append_68 = \ @BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/90-nm-cloud-setup.sh \ @BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/meson.build \ @BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nm-cloud-setup.service.in \ @BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nm-cloud-setup.timer \ +@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/tests/meson.build \ @BUILD_NM_CLOUD_SETUP_TRUE@ $(NULL) -@BUILD_NM_CLOUD_SETUP_TRUE@am__append_68 = \ +@BUILD_NM_CLOUD_SETUP_TRUE@am__append_69 = \ @BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nm-cloud-setup.service +@BUILD_NM_CLOUD_SETUP_TRUE@am__append_70 = clients/cloud-setup/tests/test-cloud-setup-general ############################################################################### # data ############################################################################### -@HAVE_SYSTEMD_TRUE@am__append_69 = \ +@HAVE_SYSTEMD_TRUE@am__append_71 = \ @HAVE_SYSTEMD_TRUE@ data/NetworkManager.service \ @HAVE_SYSTEMD_TRUE@ data/NetworkManager-wait-online.service \ @HAVE_SYSTEMD_TRUE@ data/NetworkManager-dispatcher.service \ @HAVE_SYSTEMD_TRUE@ $(NULL) -@HAVE_INTROSPECTION_TRUE@am__append_70 = $(man_nm_settings_xml) -@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_71 = man/nm-settings-ifcfg-rh.5 -@CONFIG_PLUGIN_IFCFG_RH_FALSE@am__append_72 = man/nm-settings-ifcfg-rh.5 -@CONFIG_PLUGIN_IFCFG_RH_FALSE@am__append_73 = man/nm-settings-ifcfg-rh.5 -@WITH_OPENVSWITCH_TRUE@am__append_74 = man/nm-openvswitch.7 -@WITH_OPENVSWITCH_FALSE@am__append_75 = man/nm-openvswitch.7 -@WITH_OPENVSWITCH_FALSE@am__append_76 = man/nm-openvswitch.7 -@BUILD_NM_CLOUD_SETUP_TRUE@am__append_77 = man/nm-cloud-setup.8 -@BUILD_NM_CLOUD_SETUP_FALSE@am__append_78 = man/nm-cloud-setup.8 -@BUILD_NM_CLOUD_SETUP_FALSE@am__append_79 = man/nm-cloud-setup.8 -@HAVE_DOCS_TRUE@am__append_80 = install-data-hook-man -@HAVE_DOCS_TRUE@am__append_81 = uninstall-hook-man -@HAVE_DOCS_TRUE@am__append_82 = $(man_pages) $(man_pages_autogen) -@BUILD_DOCS_TRUE@am__append_83 = $(man_pages) $(man_pages_autogen) +@HAVE_INTROSPECTION_TRUE@am__append_72 = $(man_nm_settings_xml) +@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_73 = man/nm-settings-ifcfg-rh.5 +@CONFIG_PLUGIN_IFCFG_RH_FALSE@am__append_74 = man/nm-settings-ifcfg-rh.5 +@CONFIG_PLUGIN_IFCFG_RH_FALSE@am__append_75 = man/nm-settings-ifcfg-rh.5 +@WITH_OPENVSWITCH_TRUE@am__append_76 = man/nm-openvswitch.7 +@WITH_OPENVSWITCH_FALSE@am__append_77 = man/nm-openvswitch.7 +@WITH_OPENVSWITCH_FALSE@am__append_78 = man/nm-openvswitch.7 +@BUILD_NM_CLOUD_SETUP_TRUE@am__append_79 = man/nm-cloud-setup.8 +@BUILD_NM_CLOUD_SETUP_FALSE@am__append_80 = man/nm-cloud-setup.8 +@BUILD_NM_CLOUD_SETUP_FALSE@am__append_81 = man/nm-cloud-setup.8 +@HAVE_DOCS_TRUE@am__append_82 = install-data-hook-man +@HAVE_DOCS_TRUE@am__append_83 = uninstall-hook-man +@HAVE_DOCS_TRUE@am__append_84 = $(man_pages) $(man_pages_autogen) +@BUILD_DOCS_TRUE@am__append_85 = $(man_pages) $(man_pages_autogen) ############################################################################### # vapi ############################################################################### -@ENABLE_VAPIGEN_TRUE@am__append_84 = \ +@ENABLE_VAPIGEN_TRUE@am__append_86 = \ @ENABLE_VAPIGEN_TRUE@ vapi/libnm.vapi -@ENABLE_VAPIGEN_TRUE@am__append_85 = \ +@ENABLE_VAPIGEN_TRUE@am__append_87 = \ @ENABLE_VAPIGEN_TRUE@ $(VAPIGEN_VAPIS) \ @ENABLE_VAPIGEN_TRUE@ $(VAPIGEN_VAPIS:.vapi=.deps) -@ENABLE_VAPIGEN_TRUE@am__append_86 = $(VAPIGEN_VAPIS) +@ENABLE_VAPIGEN_TRUE@am__append_88 = $(VAPIGEN_VAPIS) ############################################################################### -@ENABLE_TESTS_TRUE@am__append_87 = $(check_programs) $(check_programs_norun) -@ENABLE_TESTS_TRUE@am__append_88 = $(check_ltlibraries) -@ENABLE_TESTS_FALSE@am__append_89 = $(check_programs) $(check_programs_norun) -@ENABLE_TESTS_FALSE@am__append_90 = $(check_ltlibraries) -@WITH_QT_TRUE@am__append_91 = \ +@ENABLE_TESTS_TRUE@am__append_89 = $(check_programs) $(check_programs_norun) +@ENABLE_TESTS_TRUE@am__append_90 = $(check_ltlibraries) +@ENABLE_TESTS_FALSE@am__append_91 = $(check_programs) $(check_programs_norun) +@ENABLE_TESTS_FALSE@am__append_92 = $(check_ltlibraries) +@WITH_QT_TRUE@am__append_93 = \ @WITH_QT_TRUE@ examples/C/qt/add-connection-wired \ @WITH_QT_TRUE@ examples/C/qt/list-connections \ @WITH_QT_TRUE@ examples/C/qt/change-ipv4-addresses \ @WITH_QT_TRUE@ examples/C/qt/monitor-nm-running -@WITH_QT_TRUE@am__append_92 = \ +@WITH_QT_TRUE@am__append_94 = \ @WITH_QT_TRUE@ examples/C/qt/monitor-nm-running.moc -@WITH_PYTHON_BLACK_TRUE@am__append_93 = check-python-black +@WITH_PYTHON_BLACK_TRUE@am__append_95 = check-python-black subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/attributes.m4 \ @@ -385,7 +388,7 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = shared/nm-version-macros.h libnm/libnm.pc \ +CONFIG_CLEAN_FILES = libnm-core/nm-version-macros.h libnm/libnm.pc \ data/org.freedesktop.NetworkManager.policy.in \ NetworkManager.pc CONFIG_CLEAN_VPATH_FILES = @@ -416,7 +419,8 @@ am__EXEEXT_4 = libnm/tests/test-nm-client$(EXEEXT) \ @WITH_WIFI_TRUE@am__EXEEXT_9 = src/core/devices/wifi/tests/test-devices-wifi$(EXEEXT) @HAVE_INTROSPECTION_TRUE@am__EXEEXT_10 = clients/common/tests/test-clients-common$(EXEEXT) @BUILD_NMCLI_TRUE@@HAVE_INTROSPECTION_FALSE@am__EXEEXT_11 = clients/common/tests/test-clients-common$(EXEEXT) -am__EXEEXT_12 = shared/nm-platform/tests/test-nm-platform$(EXEEXT) \ +@BUILD_NM_CLOUD_SETUP_TRUE@am__EXEEXT_12 = clients/cloud-setup/tests/test-cloud-setup-general$(EXEEXT) +am__EXEEXT_13 = shared/nm-platform/tests/test-nm-platform$(EXEEXT) \ shared/nm-glib-aux/tests/test-shared-general$(EXEEXT) \ $(am__EXEEXT_3) libnm-core/tests/test-compare$(EXEEXT) \ libnm-core/tests/test-crypto$(EXEEXT) \ @@ -463,15 +467,16 @@ am__EXEEXT_12 = shared/nm-platform/tests/test-nm-platform$(EXEEXT) \ src/core/tests/test-wired-defname$(EXEEXT) \ dispatcher/tests/test-dispatcher-envp$(EXEEXT) \ $(am__EXEEXT_10) $(am__EXEEXT_11) \ - clients/common/tests/test-libnm-core-aux$(EXEEXT) -@HAVE_INTROSPECTION_FALSE@am__EXEEXT_13 = $(am__EXEEXT_4) -@WITH_MODEM_MANAGER_1_TRUE@am__EXEEXT_14 = src/core/devices/bluetooth/tests/nm-bt-test$(EXEEXT) -@WITH_QT_TRUE@am__EXEEXT_15 = \ + clients/common/tests/test-libnm-core-aux$(EXEEXT) \ + $(am__EXEEXT_12) +@HAVE_INTROSPECTION_FALSE@am__EXEEXT_14 = $(am__EXEEXT_4) +@WITH_MODEM_MANAGER_1_TRUE@am__EXEEXT_15 = src/core/devices/bluetooth/tests/nm-bt-test$(EXEEXT) +@WITH_QT_TRUE@am__EXEEXT_16 = \ @WITH_QT_TRUE@ examples/C/qt/add-connection-wired$(EXEEXT) \ @WITH_QT_TRUE@ examples/C/qt/list-connections$(EXEEXT) \ @WITH_QT_TRUE@ examples/C/qt/change-ipv4-addresses$(EXEEXT) \ @WITH_QT_TRUE@ examples/C/qt/monitor-nm-running$(EXEEXT) -am__EXEEXT_16 = $(am__EXEEXT_13) $(am__EXEEXT_14) \ +am__EXEEXT_17 = $(am__EXEEXT_14) $(am__EXEEXT_15) \ src/core/platform/tests/monitor$(EXEEXT) \ src/core/ndisc/tests/test-ndisc-linux$(EXEEXT) \ examples/C/glib/add-connection-gdbus$(EXEEXT) \ @@ -482,10 +487,10 @@ am__EXEEXT_16 = $(am__EXEEXT_13) $(am__EXEEXT_14) \ examples/C/glib/list-connections-libnm$(EXEEXT) \ examples/C/glib/monitor-nm-running-gdbus$(EXEEXT) \ examples/C/glib/monitor-nm-state-gdbus$(EXEEXT) \ - $(am__EXEEXT_15) -@ENABLE_TESTS_FALSE@am__EXEEXT_17 = $(am__EXEEXT_12) $(am__EXEEXT_16) -@BUILD_NM_CLOUD_SETUP_TRUE@am__EXEEXT_18 = clients/cloud-setup/nm-cloud-setup$(EXEEXT) -@ENABLE_TESTS_TRUE@am__EXEEXT_19 = $(am__EXEEXT_12) $(am__EXEEXT_16) + $(am__EXEEXT_16) +@ENABLE_TESTS_FALSE@am__EXEEXT_18 = $(am__EXEEXT_13) $(am__EXEEXT_17) +@BUILD_NM_CLOUD_SETUP_TRUE@am__EXEEXT_19 = clients/cloud-setup/nm-cloud-setup$(EXEEXT) +@ENABLE_TESTS_TRUE@am__EXEEXT_20 = $(am__EXEEXT_13) $(am__EXEEXT_17) PROGRAMS = $(bin_PROGRAMS) $(libexec_PROGRAMS) $(noinst_PROGRAMS) \ $(sbin_PROGRAMS) LIBRARIES = $(noinst_LIBRARIES) @@ -523,6 +528,30 @@ AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = +clients_cloud_setup_libnm_cloud_setup_core_a_AR = $(AR) $(ARFLAGS) +clients_cloud_setup_libnm_cloud_setup_core_a_LIBADD = +am__clients_cloud_setup_libnm_cloud_setup_core_a_SOURCES_DIST = \ + clients/cloud-setup/nm-cloud-setup-utils.c \ + clients/cloud-setup/nm-cloud-setup-utils.h \ + clients/cloud-setup/nm-http-client.c \ + clients/cloud-setup/nm-http-client.h \ + clients/cloud-setup/nmcs-provider.c \ + clients/cloud-setup/nmcs-provider.h \ + clients/cloud-setup/nmcs-provider-ec2.c \ + clients/cloud-setup/nmcs-provider-ec2.h \ + clients/cloud-setup/nmcs-provider-gcp.c \ + clients/cloud-setup/nmcs-provider-gcp.h \ + clients/cloud-setup/nmcs-provider-azure.c \ + clients/cloud-setup/nmcs-provider-azure.h +am__dirstamp = $(am__leading_dot)dirstamp +@BUILD_NM_CLOUD_SETUP_TRUE@am_clients_cloud_setup_libnm_cloud_setup_core_a_OBJECTS = clients/cloud-setup/libnm_cloud_setup_core_a-nm-cloud-setup-utils.$(OBJEXT) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/libnm_cloud_setup_core_a-nm-http-client.$(OBJEXT) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider.$(OBJEXT) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-ec2.$(OBJEXT) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-gcp.$(OBJEXT) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-azure.$(OBJEXT) +clients_cloud_setup_libnm_cloud_setup_core_a_OBJECTS = \ + $(am_clients_cloud_setup_libnm_cloud_setup_core_a_OBJECTS) clients_tui_newt_libnmt_newt_a_AR = $(AR) $(ARFLAGS) clients_tui_newt_libnmt_newt_a_LIBADD = am__clients_tui_newt_libnmt_newt_a_SOURCES_DIST = \ @@ -567,7 +596,6 @@ am__clients_tui_newt_libnmt_newt_a_SOURCES_DIST = \ clients/tui/newt/nmt-newt-utils.h \ clients/tui/newt/nmt-newt-widget.c \ clients/tui/newt/nmt-newt-widget.h -am__dirstamp = $(am__leading_dot)dirstamp @BUILD_NMTUI_TRUE@am_clients_tui_newt_libnmt_newt_a_OBJECTS = clients/tui/newt/libnmt_newt_a-nmt-newt-button.$(OBJEXT) \ @BUILD_NMTUI_TRUE@ clients/tui/newt/libnmt_newt_a-nmt-newt-button-box.$(OBJEXT) \ @BUILD_NMTUI_TRUE@ clients/tui/newt/libnmt_newt_a-nmt-newt-checkbox.$(OBJEXT) \ @@ -609,7 +637,7 @@ am__v_lt_1 = clients_common_libnmc_la_DEPENDENCIES = libnm/libnm.la \ $(am__DEPENDENCIES_1) am_clients_common_libnmc_la_OBJECTS = \ - shared/clients_common_libnmc_la-nm-meta-setting.lo \ + clients/common/libnmc_la-nm-meta-setting-base-impl.lo \ clients/common/libnmc_la-nm-meta-setting-desc.lo \ clients/common/libnmc_la-nm-meta-setting-access.lo clients_common_libnmc_la_OBJECTS = \ @@ -731,11 +759,13 @@ am__objects_3 = libnm-core/libnm_core_la-nm-setting-6lowpan.lo \ libnm-core/libnm_core_la-nm-setting-wireless.lo \ libnm-core/libnm_core_la-nm-setting-wpan.lo am__objects_4 = $(am__objects_3) \ - shared/libnm_core_libnm_core_la-nm-meta-setting.lo \ libnm-core/libnm_core_la-nm-connection.lo \ libnm-core/libnm_core_la-nm-crypto.lo \ libnm-core/libnm_core_la-nm-dbus-utils.lo \ libnm-core/libnm_core_la-nm-errors.lo \ + libnm-core/libnm_core_la-nm-keyfile-utils.lo \ + libnm-core/libnm_core_la-nm-keyfile.lo \ + libnm-core/libnm_core_la-nm-meta-setting-base-impl.lo \ libnm-core/libnm_core_la-nm-property-compare.lo \ libnm-core/libnm_core_la-nm-setting.lo \ libnm-core/libnm_core_la-nm-simple-connection.lo \ @@ -785,18 +815,6 @@ libnm_core_libnm_crypto_nss_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @ENABLE_TESTS_FALSE@@HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_FALSE@am_libnm_core_libnm_crypto_nss_la_rpath = @ENABLE_TESTS_TRUE@@HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_FALSE@am_libnm_core_libnm_crypto_nss_la_rpath = @HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_TRUE@am_libnm_core_libnm_crypto_nss_la_rpath = -libnm_core_nm_keyfile_libnm_keyfile_la_DEPENDENCIES = \ - $(am__DEPENDENCIES_1) -am_libnm_core_nm_keyfile_libnm_keyfile_la_OBJECTS = \ - libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile-utils.lo \ - libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile.lo -libnm_core_nm_keyfile_libnm_keyfile_la_OBJECTS = \ - $(am_libnm_core_nm_keyfile_libnm_keyfile_la_OBJECTS) -libnm_core_nm_keyfile_libnm_keyfile_la_LINK = $(LIBTOOL) $(AM_V_lt) \ - --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ - $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libnm_core_nm_keyfile_libnm_keyfile_la_LDFLAGS) $(LDFLAGS) \ - -o $@ libnm_core_nm_libnm_core_aux_libnm_libnm_core_aux_la_DEPENDENCIES = \ $(am__DEPENDENCIES_1) am_libnm_core_nm_libnm_core_aux_libnm_libnm_core_aux_la_OBJECTS = libnm-core/nm-libnm-core-aux/libnm_libnm_core_aux_la-nm-libnm-core-aux.lo @@ -825,7 +843,6 @@ libnm_libnm_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $@ libnm_libnm_static_la_DEPENDENCIES = \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-base/libnm-base.la introspection/libnmdbus.la \ @@ -1285,7 +1302,6 @@ src_core_initrd_libnmi_core_la_OBJECTS = \ src_core_libNetworkManager_la_DEPENDENCIES = \ src/core/libNetworkManagerBase.la \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-platform/libnm-platform.la \ @@ -1642,29 +1658,12 @@ clients_cli_nmcli_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_CFLAGS) $(CFLAGS) $(clients_cli_nmcli_LDFLAGS) $(LDFLAGS) \ -o $@ am__clients_cloud_setup_nm_cloud_setup_SOURCES_DIST = \ - clients/cloud-setup/main.c \ - clients/cloud-setup/nm-cloud-setup-utils.c \ - clients/cloud-setup/nm-cloud-setup-utils.h \ - clients/cloud-setup/nm-http-client.c \ - clients/cloud-setup/nm-http-client.h \ - clients/cloud-setup/nmcs-provider.c \ - clients/cloud-setup/nmcs-provider.h \ - clients/cloud-setup/nmcs-provider-ec2.c \ - clients/cloud-setup/nmcs-provider-ec2.h \ - clients/cloud-setup/nmcs-provider-gcp.c \ - clients/cloud-setup/nmcs-provider-gcp.h \ - clients/cloud-setup/nmcs-provider-azure.c \ - clients/cloud-setup/nmcs-provider-azure.h -@BUILD_NM_CLOUD_SETUP_TRUE@am_clients_cloud_setup_nm_cloud_setup_OBJECTS = clients/cloud-setup/nm_cloud_setup-main.$(OBJEXT) \ -@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nm_cloud_setup-nm-cloud-setup-utils.$(OBJEXT) \ -@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nm_cloud_setup-nm-http-client.$(OBJEXT) \ -@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nm_cloud_setup-nmcs-provider.$(OBJEXT) \ -@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nm_cloud_setup-nmcs-provider-ec2.$(OBJEXT) \ -@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nm_cloud_setup-nmcs-provider-gcp.$(OBJEXT) \ -@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nm_cloud_setup-nmcs-provider-azure.$(OBJEXT) + clients/cloud-setup/main.c +@BUILD_NM_CLOUD_SETUP_TRUE@am_clients_cloud_setup_nm_cloud_setup_OBJECTS = clients/cloud-setup/nm_cloud_setup-main.$(OBJEXT) clients_cloud_setup_nm_cloud_setup_OBJECTS = \ $(am_clients_cloud_setup_nm_cloud_setup_OBJECTS) -@BUILD_NM_CLOUD_SETUP_TRUE@clients_cloud_setup_nm_cloud_setup_DEPENDENCIES = libnm/nm-libnm-aux/libnm-libnm-aux.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@clients_cloud_setup_nm_cloud_setup_DEPENDENCIES = clients/cloud-setup/libnm-cloud-setup-core.a \ +@BUILD_NM_CLOUD_SETUP_TRUE@ libnm/nm-libnm-aux/libnm-libnm-aux.la \ @BUILD_NM_CLOUD_SETUP_TRUE@ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ @BUILD_NM_CLOUD_SETUP_TRUE@ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @BUILD_NM_CLOUD_SETUP_TRUE@ shared/nm-base/libnm-base.la \ @@ -1678,6 +1677,25 @@ clients_cloud_setup_nm_cloud_setup_LINK = $(LIBTOOL) $(AM_V_lt) \ --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(clients_cloud_setup_nm_cloud_setup_LDFLAGS) $(LDFLAGS) -o $@ +clients_cloud_setup_tests_test_cloud_setup_general_SOURCES = \ + clients/cloud-setup/tests/test-cloud-setup-general.c +clients_cloud_setup_tests_test_cloud_setup_general_OBJECTS = clients/cloud-setup/tests/test_cloud_setup_general-test-cloud-setup-general.$(OBJEXT) +@BUILD_NM_CLOUD_SETUP_TRUE@clients_cloud_setup_tests_test_cloud_setup_general_DEPENDENCIES = clients/cloud-setup/libnm-cloud-setup-core.a \ +@BUILD_NM_CLOUD_SETUP_TRUE@ libnm/nm-libnm-aux/libnm-libnm-aux.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ shared/nm-base/libnm-base.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ shared/nm-glib-aux/libnm-glib-aux.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ shared/nm-std-aux/libnm-std-aux.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ shared/libcsiphash.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ libnm/libnm.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(am__DEPENDENCIES_1) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(am__DEPENDENCIES_1) +clients_cloud_setup_tests_test_cloud_setup_general_LINK = $(LIBTOOL) \ + $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(clients_cloud_setup_tests_test_cloud_setup_general_LDFLAGS) \ + $(LDFLAGS) -o $@ clients_common_tests_test_clients_common_SOURCES = \ clients/common/tests/test-clients-common.c clients_common_tests_test_clients_common_OBJECTS = clients/common/tests/test_clients_common-test-clients-common.$(OBJEXT) @@ -1930,7 +1948,6 @@ libnm_core_tests_test_compare_OBJECTS = \ libnm-core/tests/test_compare-test-compare.$(OBJEXT) am__DEPENDENCIES_3 = \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-base/libnm-base.la \ @@ -2207,7 +2224,6 @@ src_core_initrd_nm_initrd_generator_DEPENDENCIES = \ src/core/initrd/libnmi-core.la \ src/core/libNetworkManagerBase.la \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-platform/libnm-platform.la \ @@ -2298,7 +2314,6 @@ src_core_nm_iface_helper_OBJECTS = \ src_core_nm_iface_helper_DEPENDENCIES = \ src/core/libNetworkManagerBase.la \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-platform/libnm-platform.la \ @@ -2616,18 +2631,20 @@ am__depfiles_remade = clients/$(DEPDIR)/nm_online-nm-online.Po \ clients/cli/$(DEPDIR)/nmcli-polkit-agent.Po \ clients/cli/$(DEPDIR)/nmcli-settings.Po \ clients/cli/$(DEPDIR)/nmcli-utils.Po \ + clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-cloud-setup-utils.Po \ + clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-http-client.Po \ + clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-azure.Po \ + clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-ec2.Po \ + clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-gcp.Po \ + clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider.Po \ clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-main.Po \ - clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-cloud-setup-utils.Po \ - clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-http-client.Po \ - clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-azure.Po \ - clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-ec2.Po \ - clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-gcp.Po \ - clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider.Po \ + clients/cloud-setup/tests/$(DEPDIR)/test_cloud_setup_general-test-cloud-setup-general.Po \ clients/common/$(DEPDIR)/libnmc_base_la-nm-client-utils.Plo \ clients/common/$(DEPDIR)/libnmc_base_la-nm-polkit-listener.Plo \ clients/common/$(DEPDIR)/libnmc_base_la-nm-secret-agent-simple.Plo \ clients/common/$(DEPDIR)/libnmc_base_la-nm-vpn-helpers.Plo \ clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-access.Plo \ + clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-base-impl.Plo \ clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-desc.Plo \ clients/common/tests/$(DEPDIR)/test_clients_common-test-clients-common.Po \ clients/common/tests/$(DEPDIR)/test_libnm_core_aux-test-libnm-core-aux.Po \ @@ -2760,6 +2777,9 @@ am__depfiles_remade = clients/$(DEPDIR)/nm_online-nm-online.Po \ libnm-core/$(DEPDIR)/libnm_core_la-nm-crypto.Plo \ libnm-core/$(DEPDIR)/libnm_core_la-nm-dbus-utils.Plo \ libnm-core/$(DEPDIR)/libnm_core_la-nm-errors.Plo \ + libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile-utils.Plo \ + libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile.Plo \ + libnm-core/$(DEPDIR)/libnm_core_la-nm-meta-setting-base-impl.Plo \ libnm-core/$(DEPDIR)/libnm_core_la-nm-property-compare.Plo \ libnm-core/$(DEPDIR)/libnm_core_la-nm-setting-6lowpan.Plo \ libnm-core/$(DEPDIR)/libnm_core_la-nm-setting-8021x.Plo \ @@ -2821,8 +2841,6 @@ am__depfiles_remade = clients/$(DEPDIR)/nm_online-nm-online.Po \ libnm-core/$(DEPDIR)/libnm_core_la-nm-vpn-plugin-info.Plo \ libnm-core/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo \ libnm-core/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo \ - libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile-utils.Plo \ - libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile.Plo \ libnm-core/nm-libnm-core-aux/$(DEPDIR)/libnm_libnm_core_aux_la-nm-libnm-core-aux.Plo \ libnm-core/nm-libnm-core-intern/$(DEPDIR)/libnm_libnm_core_intern_la-nm-auth-subject.Plo \ libnm-core/nm-libnm-core-intern/$(DEPDIR)/libnm_libnm_core_intern_la-nm-libnm-core-utils.Plo \ @@ -2892,8 +2910,6 @@ am__depfiles_remade = clients/$(DEPDIR)/nm_online-nm-online.Po \ libnm/tests/$(DEPDIR)/test_nm_client-test-nm-client.Po \ libnm/tests/$(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Po \ libnm/tests/$(DEPDIR)/test_secret_agent-test-secret-agent.Po \ - shared/$(DEPDIR)/clients_common_libnmc_la-nm-meta-setting.Plo \ - shared/$(DEPDIR)/libnm_core_libnm_core_la-nm-meta-setting.Plo \ shared/$(DEPDIR)/libnm_tests_test_nm_client-nm-test-utils-impl.Po \ shared/$(DEPDIR)/libnm_tests_test_remote_settings_client-nm-test-utils-impl.Po \ shared/$(DEPDIR)/libnm_tests_test_secret_agent-nm-test-utils-impl.Po \ @@ -3242,7 +3258,8 @@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = -SOURCES = $(clients_tui_newt_libnmt_newt_a_SOURCES) \ +SOURCES = $(clients_cloud_setup_libnm_cloud_setup_core_a_SOURCES) \ + $(clients_tui_newt_libnmt_newt_a_SOURCES) \ $(clients_common_libnmc_base_la_SOURCES) \ $(clients_common_libnmc_la_SOURCES) \ $(dispatcher_libnm_dispatcher_core_la_SOURCES) \ @@ -3251,7 +3268,6 @@ SOURCES = $(clients_tui_newt_libnmt_newt_a_SOURCES) \ $(nodist_libnm_core_libnm_core_la_SOURCES) \ $(libnm_core_libnm_crypto_gnutls_la_SOURCES) \ $(libnm_core_libnm_crypto_nss_la_SOURCES) \ - $(libnm_core_nm_keyfile_libnm_keyfile_la_SOURCES) \ $(libnm_core_nm_libnm_core_aux_libnm_libnm_core_aux_la_SOURCES) \ $(libnm_core_nm_libnm_core_intern_libnm_libnm_core_intern_la_SOURCES) \ $(libnm_libnm_la_SOURCES) $(libnm_libnm_static_la_SOURCES) \ @@ -3293,6 +3309,7 @@ SOURCES = $(clients_tui_newt_libnmt_newt_a_SOURCES) \ $(clients_cli_generate_docs_nm_settings_nmcli_SOURCES) \ $(clients_cli_nmcli_SOURCES) \ $(clients_cloud_setup_nm_cloud_setup_SOURCES) \ + clients/cloud-setup/tests/test-cloud-setup-general.c \ clients/common/tests/test-clients-common.c \ clients/common/tests/test-libnm-core-aux.c clients/nm-online.c \ $(clients_tui_nmtui_SOURCES) \ @@ -3367,14 +3384,14 @@ SOURCES = $(clients_tui_newt_libnmt_newt_a_SOURCES) \ src/core/tests/test-ip6-config.c src/core/tests/test-l3cfg.c \ src/core/tests/test-systemd.c src/core/tests/test-utils.c \ src/core/tests/test-wired-defname.c -DIST_SOURCES = $(am__clients_tui_newt_libnmt_newt_a_SOURCES_DIST) \ +DIST_SOURCES = $(am__clients_cloud_setup_libnm_cloud_setup_core_a_SOURCES_DIST) \ + $(am__clients_tui_newt_libnmt_newt_a_SOURCES_DIST) \ $(clients_common_libnmc_base_la_SOURCES) \ $(clients_common_libnmc_la_SOURCES) \ $(dispatcher_libnm_dispatcher_core_la_SOURCES) \ $(libnm_core_libnm_core_la_SOURCES) \ $(am__libnm_core_libnm_crypto_gnutls_la_SOURCES_DIST) \ $(am__libnm_core_libnm_crypto_nss_la_SOURCES_DIST) \ - $(libnm_core_nm_keyfile_libnm_keyfile_la_SOURCES) \ $(libnm_core_nm_libnm_core_aux_libnm_libnm_core_aux_la_SOURCES) \ $(libnm_core_nm_libnm_core_intern_libnm_libnm_core_intern_la_SOURCES) \ $(libnm_libnm_la_SOURCES) $(libnm_libnm_static_la_SOURCES) \ @@ -3415,6 +3432,7 @@ DIST_SOURCES = $(am__clients_tui_newt_libnmt_newt_a_SOURCES_DIST) \ $(clients_cli_generate_docs_nm_settings_nmcli_SOURCES) \ $(am__clients_cli_nmcli_SOURCES_DIST) \ $(am__clients_cloud_setup_nm_cloud_setup_SOURCES_DIST) \ + clients/cloud-setup/tests/test-cloud-setup-general.c \ clients/common/tests/test-clients-common.c \ clients/common/tests/test-libnm-core-aux.c clients/nm-online.c \ $(am__clients_tui_nmtui_SOURCES_DIST) \ @@ -3733,9 +3751,9 @@ am__DIST_COMMON = $(srcdir)/Makefile.examples $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/tap-driver.sh \ $(top_srcdir)/build-aux/test-driver \ $(top_srcdir)/data/org.freedesktop.NetworkManager.policy.in.in \ - $(top_srcdir)/libnm/libnm.pc.in \ - $(top_srcdir)/shared/nm-version-macros.h.in ABOUT-NLS AUTHORS \ - COPYING ChangeLog INSTALL NEWS README TODO build-aux/compile \ + $(top_srcdir)/libnm-core/nm-version-macros.h.in \ + $(top_srcdir)/libnm/libnm.pc.in ABOUT-NLS AUTHORS COPYING \ + ChangeLog INSTALL NEWS README TODO build-aux/compile \ build-aux/config.guess build-aux/config.rpath \ build-aux/config.sub build-aux/depcomp build-aux/install-sh \ build-aux/ltmain.sh build-aux/missing @@ -4111,8 +4129,6 @@ AUTOMAKE_OPTIONS = subdir-objects ############################################################################### ############################################################################### - -############################################################################### noinst_LTLIBRARIES = shared/libcsiphash.la shared/libcrbtree.la \ shared/libnacd.la shared/libndhcp4.la \ shared/nm-std-aux/libnm-std-aux.la \ @@ -4123,7 +4139,6 @@ noinst_LTLIBRARIES = shared/libcsiphash.la shared/libcrbtree.la \ shared/nm-platform/libnm-platform.la \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm/nm-libnm-aux/libnm-libnm-aux.la \ introspection/libnmdbus.la libnm-core/libnm-core.la \ $(libnm_crypto_lib) libnm/libnm_static.la \ @@ -4133,9 +4148,9 @@ noinst_LTLIBRARIES = shared/libcsiphash.la shared/libcrbtree.la \ shared/systemd/libnm-systemd-shared.la \ src/core/initrd/libnmi-core.la $(am__append_22) \ $(am__append_30) $(am__append_37) $(am__append_42) \ - dispatcher/libnm-dispatcher-core.la $(am__append_88) -check_LTLIBRARIES = $(am__append_90) -noinst_LIBRARIES = $(am__append_59) + dispatcher/libnm-dispatcher-core.la $(am__append_90) +check_LTLIBRARIES = $(am__append_92) +noinst_LIBRARIES = $(am__append_59) $(am__append_63) noinst_DATA = $(am__append_10) dist_libexec_SCRIPTS = $(am__append_26) @@ -4151,20 +4166,20 @@ core_plugins = $(am__append_19) $(am__append_21) $(am__append_29) \ $(am__append_33) $(am__append_44) $(am__append_47) \ $(am__append_49) service_DATA = -man_MANS = $(am__append_82) +man_MANS = $(am__append_84) examples_DATA = data/server.conf CLEANFILES = $(introspection_sources) $(DBUS_INTERFACE_DOCS) \ src/core/NetworkManager.ver $(am__append_23) \ $(dispatcher_nmdbus_dispatcher_sources) \ dispatcher/org.freedesktop.nm_dispatcher.service \ - $(am__append_68) clients/tests/test-client.log \ + $(am__append_69) clients/tests/test-client.log \ data/NetworkManager-dispatcher.service \ data/NetworkManager-wait-online.service \ data/NetworkManager.service data/server.conf $(NULL) \ - $(am__append_70) man/common.ent $(am__append_83) \ - $(am__append_86) $(GLIB_GENERATED) $(INTROSPECTION_GIRS) \ + $(am__append_72) man/common.ent $(am__append_85) \ + $(am__append_88) $(GLIB_GENERATED) $(INTROSPECTION_GIRS) \ $(typelib_DATA) cscope.in.out cscope.out cscope.po.out $(NULL) \ - $(am__append_92) + $(am__append_94) ############################################################################### DISTCLEANFILES = config-extra.h intltool-extract intltool-merge \ @@ -4205,8 +4220,6 @@ EXTRA_DIST = shared/c-stdaux/src/c-stdaux.h $(NULL) \ shared/nm-glib-aux/tests/meson.build shared/README.md $(NULL) \ $(dbusinterfaces_DATA) introspection/meson.build \ libnm-core/nm-crypto-gnutls.c libnm-core/nm-crypto-nss.c \ - libnm-core/nm-core-enum-types.c.template \ - libnm-core/nm-core-enum-types.h.template \ libnm-core/meson.build $(NULL) \ libnm-core/tests/certs/ca-no-ending-newline.pem \ libnm-core/tests/certs/pkcs8-decrypted.der \ @@ -4233,7 +4246,6 @@ EXTRA_DIST = shared/c-stdaux/src/c-stdaux.h $(NULL) \ $(am__append_11) tools/generate-docs-nm-property-infos.pl \ tools/generate-docs-nm-settings-docs-merge.py \ tools/generate-docs-nm-settings-docs-gir.py libnm/meson.build \ - libnm/nm-enum-types.c.template libnm/nm-enum-types.h.template \ $(NULL) libnm/tests/meson.build src/core/systemd/meson.build \ src/core/platform/linux/nl802154.h src/core/initrd/meson.build \ src/core/initrd/tests/meson.build \ @@ -4772,7 +4784,7 @@ EXTRA_DIST = shared/c-stdaux/src/c-stdaux.h $(NULL) \ clients/cli/nmcli-completion clients/cli/meson.build \ clients/common/settings-docs.xsl clients/common/meson.build \ clients/common/tests/meson.build clients/tui/meson.build \ - clients/tui/newt/meson.build $(am__append_67) \ + clients/tui/newt/meson.build $(am__append_68) \ clients/tests/test-client.py \ clients/tests/test-client.check-on-disk/test_001.expected \ clients/tests/test-client.check-on-disk/test_002.expected \ @@ -4785,7 +4797,7 @@ EXTRA_DIST = shared/c-stdaux/src/c-stdaux.h $(NULL) \ data/NetworkManager-wait-online.service.in \ data/NetworkManager.service.in data/meson.build \ data/nm-shared.xml data/server.conf.in $(NULL) \ - $(am__append_72) $(am__append_75) $(am__append_78) \ + $(am__append_74) $(am__append_77) $(am__append_80) \ man/common.ent.in $(man_nm_settings_xml) $(addsuffix \ .xsl,$(basename $(man_nm_settings_xml))) $(man_pages) \ $(addsuffix .xml,$(basename $(man_pages))) \ @@ -4798,18 +4810,17 @@ EXTRA_DIST = shared/c-stdaux/src/c-stdaux.h $(NULL) \ Makefile.glib autogen.sh lsan.suppressions \ valgrind.suppressions meson.build meson_options.txt \ config.h.meson config-extra.h.meson docs/meson.build \ - po/meson.build shared/nm-default.h shared/nm-gassert-patch.h \ - shared/nm-test-libnm-utils.h shared/nm-test-utils-impl.c \ - shared/nm-utils/nm-compat.c shared/nm-utils/nm-compat.h \ - shared/nm-utils/nm-test-utils.h \ + po/meson.build shared/nm-test-libnm-utils.h \ + shared/nm-test-utils-impl.c shared/nm-utils/nm-compat.c \ + shared/nm-utils/nm-compat.h shared/nm-utils/nm-test-utils.h \ shared/nm-utils/nm-vpn-editor-plugin-call.h \ shared/nm-utils/nm-vpn-plugin-macros.h \ shared/nm-utils/nm-vpn-plugin-utils.c \ - shared/nm-utils/nm-vpn-plugin-utils.h \ - shared/nm-version-macros.h.in shared/meson.build \ + shared/nm-utils/nm-vpn-plugin-utils.h shared/meson.build \ + libnm-core/nm-version-macros.h.in \ tools/check-config-options.sh tools/check-docs.sh \ tools/check-exports.sh tools/check-compare-generated.sh \ - tools/check-gitlab-ci.sh \ + tools/check-gitlab-ci.sh tools/check-tree.sh \ tools/create-exports-NetworkManager.sh tools/debug-helper.py \ tools/meson-post-install.sh tools/run-nm-test.sh \ tools/test-networkmanager-service.py \ @@ -4874,15 +4885,15 @@ EXTRA_DIST = shared/c-stdaux/src/c-stdaux.h $(NULL) \ EXTRA_LTLIBRARIES = $(am__append_53) dist_hook = dist-hook-settings-ifcfg-rh-alias-files dist_dependencies = libnm-core/nm-vpn-dbus-types.xml \ - libnm-core/nm-dbus-types.xml $(am__append_73) $(am__append_76) \ - $(am__append_79) $(man_pages) $(man_pages_autogen) + libnm-core/nm-dbus-types.xml $(am__append_75) $(am__append_78) \ + $(am__append_81) $(man_pages) $(man_pages_autogen) dist_configure_check = $(am__append_2) install_data_hook = install-data-hook-dirs $(am__append_27) \ - install-data-hook-dispatcher $(am__append_57) $(am__append_65) \ - $(am__append_80) + install-data-hook-dispatcher $(am__append_57) $(am__append_66) \ + $(am__append_82) install_exec_hook = $(am__append_61) -uninstall_hook = $(am__append_58) $(am__append_62) $(am__append_66) \ - $(am__append_81) +uninstall_hook = $(am__append_58) $(am__append_62) $(am__append_67) \ + $(am__append_83) BUILT_SOURCES = libnm-core/nm-vpn-dbus-types.xml \ libnm-core/nm-dbus-types.xml $(gir_DATA) $(typelib_DATA) GLIB_GENERATED = $(libnm_core_lib_h_pub_mkenums) \ @@ -4892,9 +4903,9 @@ GLIB_GENERATED = $(libnm_core_lib_h_pub_mkenums) \ $(libnm_lib_h_pub_mkenums) $(libnm_lib_c_mkenums) man_pages = man/NetworkManager.8 man/NetworkManager.conf.5 \ man/nm-online.1 man/nm-initrd-generator.8 man/nmcli-examples.7 \ - man/nmcli.1 man/nmtui.1 $(am__append_74) $(am__append_77) + man/nmcli.1 man/nmtui.1 $(am__append_76) $(am__append_79) man_pages_autogen = man/nm-settings-dbus.5 man/nm-settings-keyfile.5 \ - man/nm-settings-nmcli.5 $(NULL) $(am__append_71) + man/nm-settings-nmcli.5 $(NULL) $(am__append_73) ############################################################################### @@ -4961,7 +4972,8 @@ check_programs = shared/nm-platform/tests/test-nm-platform \ src/core/tests/test-l3cfg src/core/tests/test-systemd \ src/core/tests/test-utils src/core/tests/test-wired-defname \ $(NULL) dispatcher/tests/test-dispatcher-envp $(am__append_54) \ - $(am__append_55) clients/common/tests/test-libnm-core-aux + $(am__append_55) clients/common/tests/test-libnm-core-aux \ + $(am__append_70) check_programs_norun = $(am__append_16) $(am__append_41) \ src/core/platform/tests/monitor \ src/core/ndisc/tests/test-ndisc-linux \ @@ -4972,7 +4984,7 @@ check_programs_norun = $(am__append_16) $(am__append_41) \ examples/C/glib/list-connections-gdbus \ examples/C/glib/list-connections-libnm \ examples/C/glib/monitor-nm-running-gdbus \ - examples/C/glib/monitor-nm-state-gdbus $(am__append_91) + examples/C/glib/monitor-nm-state-gdbus $(am__append_93) ############################################################################### @@ -4988,13 +5000,13 @@ check_local = check-docs check-local-exports-libnm $(am__append_12) \ check-local-devices-adsl $(am__append_35) $(am__append_45) \ $(am__append_48) $(am__append_51) \ check-local-clients-tests-test-client check-local-gitlab-ci \ - $(am__append_93) check-po-msgfmt -VAPIGEN_VAPIS = $(am__append_84) + $(am__append_95) check-tree check-po-msgfmt +VAPIGEN_VAPIS = $(am__append_86) dbusservice_DATA = $(am__append_28) dispatcher/nm-dispatcher.conf \ src/core/org.freedesktop.NetworkManager.conf dbusactivation_DATA = \ dispatcher/org.freedesktop.nm_dispatcher.service -systemdsystemunit_DATA = $(am__append_64) $(am__append_69) +systemdsystemunit_DATA = $(am__append_65) $(am__append_71) INTROSPECTION_GIRS = $(am__append_9) INTROSPECTION_SCANNER_ARGS = INTROSPECTION_COMPILER_ARGS = @@ -5011,7 +5023,7 @@ pkgconfig_DATA = libnm/libnm.pc pppd_plugindir = $(PPPD_PLUGIN_DIR) pppd_plugin_LTLIBRARIES = $(am__append_20) vapidir = $(datadir)/vala/vapi -vapi_DATA = $(am__append_85) +vapi_DATA = $(am__append_87) examplesdir = $(docdir)/examples rundir = $(runstatedir)/NetworkManager statedir = $(localstatedir)/lib/NetworkManager @@ -5186,7 +5198,6 @@ shared_nm_std_aux_libnm_std_aux_la_CPPFLAGS = \ $(CODE_COVERAGE_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION='0' \ $(NULL) shared_nm_std_aux_libnm_std_aux_la_SOURCES = \ @@ -5194,6 +5205,8 @@ shared_nm_std_aux_libnm_std_aux_la_SOURCES = \ shared/nm-std-aux/c-list-util.c \ shared/nm-std-aux/c-list-util.h \ shared/nm-std-aux/nm-dbus-compat.h \ + shared/nm-std-aux/nm-default-std.h \ + shared/nm-std-aux/nm-networkmanager-compilation.h \ shared/nm-std-aux/nm-std-aux.h \ shared/nm-std-aux/nm-std-utils.c \ shared/nm-std-aux/nm-std-utils.h \ @@ -5214,7 +5227,6 @@ shared_nm_glib_aux_cppflags = \ $(SANITIZER_LIB_CFLAGS) \ $(GLIB_CFLAGS) \ -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)' \ $(NULL) shared_nm_glib_aux_libnm_glib_aux_la_CPPFLAGS = \ @@ -5227,10 +5239,14 @@ shared_nm_glib_aux_libnm_glib_aux_la_SOURCES = \ shared/nm-glib-aux/nm-dbus-aux.h \ shared/nm-glib-aux/nm-dedup-multi.c \ shared/nm-glib-aux/nm-dedup-multi.h \ + shared/nm-glib-aux/nm-default-glib-i18n-lib.h \ + shared/nm-glib-aux/nm-default-glib-i18n-prog.h \ + shared/nm-glib-aux/nm-default-glib.h \ shared/nm-glib-aux/nm-enum-utils.c \ shared/nm-glib-aux/nm-enum-utils.h \ shared/nm-glib-aux/nm-errno.c \ shared/nm-glib-aux/nm-errno.h \ + shared/nm-glib-aux/nm-gassert-patch.h \ shared/nm-glib-aux/nm-glib.h \ shared/nm-glib-aux/nm-hash-utils.c \ shared/nm-glib-aux/nm-hash-utils.h \ @@ -5317,7 +5333,6 @@ shared_nm_log_core_libnm_log_core_la_CPPFLAGS = \ $(GLIB_CFLAGS) \ $(SYSTEMD_JOURNAL_CFLAGS) \ -DG_LOG_DOMAIN=\""NetworkManager"\" \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)' \ $(NULL) shared_nm_log_core_libnm_log_core_la_SOURCES = \ @@ -5361,8 +5376,7 @@ shared_nm_platform_libnm_platform_la_LIBADD = \ shared_nm_platform_tests_test_nm_platform_CPPFLAGS = \ $(dflt_cppflags) \ -I$(srcdir)/shared \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)' \ + -DG_LOG_DOMAIN=\""test"\" \ $(CODE_COVERAGE_CFLAGS) \ $(SYSTEMD_JOURNAL_CFLAGS) \ $(GLIB_CFLAGS) \ @@ -5394,7 +5408,6 @@ libnm_core_nm_libnm_core_intern_libnm_libnm_core_intern_la_CPPFLAGS = \ $(GLIB_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE \ $(NULL) libnm_core_nm_libnm_core_intern_libnm_libnm_core_intern_la_SOURCES = \ @@ -5424,7 +5437,6 @@ libnm_core_nm_libnm_core_aux_libnm_libnm_core_aux_la_CPPFLAGS = \ $(GLIB_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_WITH_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)' \ $(NULL) libnm_core_nm_libnm_core_aux_libnm_libnm_core_aux_la_SOURCES = \ @@ -5442,35 +5454,6 @@ libnm_core_nm_libnm_core_aux_libnm_libnm_core_aux_la_LIBADD = \ $(GLIB_LIBS) \ $(NULL) -libnm_core_nm_keyfile_libnm_keyfile_la_CPPFLAGS = \ - $(dflt_cppflags) \ - -I$(srcdir)/shared \ - -I$(builddir)/shared \ - -I$(srcdir)/libnm-core \ - -I$(builddir)/libnm-core \ - $(CODE_COVERAGE_CFLAGS) \ - $(GLIB_CFLAGS) \ - $(SANITIZER_LIB_CFLAGS) \ - -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)' \ - $(NULL) - -libnm_core_nm_keyfile_libnm_keyfile_la_SOURCES = \ - libnm-core/nm-keyfile/nm-keyfile-internal.h \ - libnm-core/nm-keyfile/nm-keyfile-utils.c \ - libnm-core/nm-keyfile/nm-keyfile-utils.h \ - libnm-core/nm-keyfile/nm-keyfile.c \ - $(NULL) - -libnm_core_nm_keyfile_libnm_keyfile_la_LDFLAGS = \ - $(CODE_COVERAGE_LDFLAGS) \ - $(SANITIZER_LIB_LDFLAGS) \ - $(NULL) - -libnm_core_nm_keyfile_libnm_keyfile_la_LIBADD = \ - $(GLIB_LIBS) \ - $(NULL) - libnm_nm_libnm_aux_libnm_libnm_aux_la_CPPFLAGS = \ $(dflt_cppflags) \ -I$(srcdir)/shared \ @@ -5483,7 +5466,6 @@ libnm_nm_libnm_aux_libnm_libnm_aux_la_CPPFLAGS = \ $(GLIB_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ -DG_LOG_DOMAIN=\""libnmc"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ $(NULL) libnm_nm_libnm_aux_libnm_libnm_aux_la_SOURCES = \ @@ -5504,8 +5486,7 @@ libnm_nm_libnm_aux_libnm_libnm_aux_la_LIBADD = \ shared_nm_glib_aux_tests_test_shared_general_CPPFLAGS = \ $(dflt_cppflags) \ -I$(srcdir)/shared \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)' \ + -DG_LOG_DOMAIN=\""test"\" \ $(CODE_COVERAGE_CFLAGS) \ $(GLIB_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ @@ -5527,8 +5508,7 @@ shared_nm_glib_aux_tests_test_shared_general_LDADD = \ @WITH_JANSSON_TRUE@shared_nm_glib_aux_tests_test_json_aux_CPPFLAGS = \ @WITH_JANSSON_TRUE@ $(dflt_cppflags) \ @WITH_JANSSON_TRUE@ -I$(srcdir)/shared \ -@WITH_JANSSON_TRUE@ -DNETWORKMANAGER_COMPILATION_TEST \ -@WITH_JANSSON_TRUE@ -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)' \ +@WITH_JANSSON_TRUE@ -DG_LOG_DOMAIN=\""test"\" \ @WITH_JANSSON_TRUE@ $(CODE_COVERAGE_CFLAGS) \ @WITH_JANSSON_TRUE@ $(GLIB_CFLAGS) \ @WITH_JANSSON_TRUE@ $(JANSSON_CFLAGS) \ @@ -5761,7 +5741,6 @@ dbusinterfaces_DATA = \ ############################################################################### libnm_core_lib_h_pub_real = \ - shared/nm-version-macros.h \ libnm-core/nm-connection.h \ libnm-core/nm-core-types.h \ libnm-core/nm-dbus-interface.h \ @@ -5822,6 +5801,7 @@ libnm_core_lib_h_pub_real = \ libnm-core/nm-setting.h \ libnm-core/nm-simple-connection.h \ libnm-core/nm-utils.h \ + libnm-core/nm-version-macros.h \ libnm-core/nm-version.h \ libnm-core/nm-vpn-dbus-interface.h \ libnm-core/nm-vpn-editor-plugin.h \ @@ -5833,12 +5813,16 @@ libnm_core_lib_h_pub_mkenums = \ $(NULL) libnm_core_lib_h_priv = \ - shared/nm-meta-setting.h \ libnm-core/nm-connection-private.h \ libnm-core/nm-core-internal.h \ libnm-core/nm-core-types-internal.h \ libnm-core/nm-crypto-impl.h \ libnm-core/nm-crypto.h \ + libnm-core/nm-default-libnm-core.h \ + libnm-core/nm-keyfile-internal.h \ + libnm-core/nm-keyfile-utils.h \ + libnm-core/nm-meta-setting-base-impl.h \ + libnm-core/nm-meta-setting-base.h \ libnm-core/nm-property-compare.h \ libnm-core/nm-setting-private.h \ libnm-core/nm-team-utils.h \ @@ -5902,11 +5886,13 @@ libnm_core_lib_c_settings_real = \ libnm_core_lib_c_real = \ $(libnm_core_lib_c_settings_real) \ - shared/nm-meta-setting.c \ libnm-core/nm-connection.c \ libnm-core/nm-crypto.c \ libnm-core/nm-dbus-utils.c \ libnm-core/nm-errors.c \ + libnm-core/nm-keyfile-utils.c \ + libnm-core/nm-keyfile.c \ + libnm-core/nm-meta-setting-base-impl.c \ libnm-core/nm-property-compare.c \ libnm-core/nm-setting.c \ libnm-core/nm-simple-connection.c \ @@ -5934,11 +5920,10 @@ dflt_cppflags_libnm_core = \ $(NULL) nm_core_enum_types_sources = $(libnm_core_lib_h_pub_real) -nm_core_enum_types_MKENUMS_C_FLAGS = --identifier-prefix NM --fhead '\#include "nm-default.h"\n' +nm_core_enum_types_MKENUMS_C_FLAGS = --identifier-prefix NM --fhead '\#include "libnm-core/nm-default-libnm-core.h"\n' libnm_core_libnm_core_la_CPPFLAGS = \ $(dflt_cppflags_libnm_core) \ -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE \ $(NULL) libnm_core_libnm_core_la_SOURCES = \ @@ -5989,13 +5974,12 @@ libnm_core_libnm_core_la_LDFLAGS = \ @HAVE_CRYPTO_NSS_TRUE@ $(NSS_LIBS) nm_core_tests_enum_types_sources = libnm-core/tests/test-general-enums.h -nm_core_tests_enum_types_MKENUMS_C_FLAGS = --fhead '\#include "nm-default.h"\n' +nm_core_tests_enum_types_MKENUMS_C_FLAGS = --fhead '\#include "libnm-core/nm-default-libnm-core.h"\n' libnm_core_tests_cppflags = \ -I$(srcdir)/libnm-core/tests \ -I$(builddir)/libnm-core/tests \ $(dflt_cppflags_libnm_core) \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE \ + -DG_LOG_DOMAIN=\""test"\" \ $(SANITIZER_EXEC_CFLAGS) \ $(NULL) @@ -6018,7 +6002,6 @@ nodist_libnm_core_tests_test_general_SOURCES = \ libnm_core_tests_ldadd = \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -6052,7 +6035,6 @@ libnm_core_tests_test_settings_defaults_LDFLAGS = $(libnm_core_tests_ldflags) ############################################################################### libnm_lib_h_pub_real = \ - shared/nm-version-macros.h \ libnm/NetworkManager.h \ libnm/nm-access-point.h \ libnm/nm-active-connection.h \ @@ -6107,14 +6089,16 @@ libnm_lib_h_pub_mkenums = \ libnm/nm-enum-types.h libnm_lib_h_priv = \ - libnm/nm-libnm-utils.h \ libnm/nm-dbus-helpers.h \ + libnm/nm-default-client.h \ + libnm/nm-default-libnm.h \ libnm/nm-device-private.h \ libnm/nm-dhcp4-config.h \ libnm/nm-dhcp6-config.h \ libnm/nm-dns-manager.h \ libnm/nm-ip4-config.h \ libnm/nm-ip6-config.h \ + libnm/nm-libnm-utils.h \ libnm/nm-object-private.h \ libnm/nm-remote-connection-private.h \ $(NULL) @@ -6183,7 +6167,6 @@ libnm_lib_cppflags = \ -I$(builddir)/libnm \ $(dflt_cppflags_libnm_core) \ -DG_LOG_DOMAIN=\""libnm"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM \ $(NULL) libnm_libnm_static_la_CPPFLAGS = \ @@ -6202,7 +6185,6 @@ nodist_libnm_libnm_static_la_SOURCES = \ libnm_libnm_static_la_LIBADD = \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -6225,7 +6207,7 @@ nm_enum_types_sources = \ $(libnm_lib_h_pub_real) nm_enum_types_MKENUMS_H_FLAGS = --identifier-prefix NM --fhead '\#include "nm-core-enum-types.h"\n' -nm_enum_types_MKENUMS_C_FLAGS = --identifier-prefix NM --fhead '\#include "nm-default.h"\n' +nm_enum_types_MKENUMS_C_FLAGS = --identifier-prefix NM --fhead '\#include "libnm/nm-default-libnm.h"\n' libnm_libnm_la_CPPFLAGS = \ $(libnm_lib_cppflags) \ $(LIBUDEV_CFLAGS) \ @@ -6254,7 +6236,11 @@ libnm_NM_1_0_typelib = $(am__append_8) @HAVE_INTROSPECTION_TRUE@libnm_NM_1_0_gir_INCLUDES = Gio-2.0 @HAVE_INTROSPECTION_TRUE@libnm_NM_1_0_gir_PACKAGES = gio-2.0 @HAVE_INTROSPECTION_TRUE@libnm_NM_1_0_gir_EXPORT_PACKAGES = libnm -@HAVE_INTROSPECTION_TRUE@libnm_NM_1_0_gir_CFLAGS = $(libnm_libnm_la_CPPFLAGS) +@HAVE_INTROSPECTION_TRUE@libnm_NM_1_0_gir_CFLAGS = \ +@HAVE_INTROSPECTION_TRUE@ $(libnm_libnm_la_CPPFLAGS) \ +@HAVE_INTROSPECTION_TRUE@ -DNETWORKMANAGER_COMPILATION \ +@HAVE_INTROSPECTION_TRUE@ $(NULL) + @HAVE_INTROSPECTION_TRUE@libnm_NM_1_0_gir_LIBS = libnm/libnm.la @HAVE_INTROSPECTION_TRUE@libnm_NM_1_0_gir_FILES = \ @HAVE_INTROSPECTION_TRUE@ $(libnm_core_lib_h_pub_mkenums) \ @@ -6263,7 +6249,6 @@ libnm_NM_1_0_typelib = $(am__append_8) @HAVE_INTROSPECTION_TRUE@ $(libnm_core_lib_c_real) \ @HAVE_INTROSPECTION_TRUE@ $(libnm_lib_h_pub_mkenums) \ @HAVE_INTROSPECTION_TRUE@ $(libnm_lib_h_pub_real) \ -@HAVE_INTROSPECTION_TRUE@ libnm-core/nm-keyfile/nm-keyfile.c \ @HAVE_INTROSPECTION_TRUE@ $(libnm_lib_c_mkenums) \ @HAVE_INTROSPECTION_TRUE@ $(libnm_lib_c_real) @@ -6289,8 +6274,7 @@ libnm_tests_cppflags = \ -I$(srcdir)/libnm \ -I$(builddir)/libnm \ $(dflt_cppflags_libnm_core) \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM \ + -DG_LOG_DOMAIN=\""test"\" \ $(SANITIZER_EXEC_CFLAGS) \ $(NULL) @@ -6349,8 +6333,7 @@ libnm_tests_libnm_vpn_plugin_utils_test_la_CFLAGS = \ -I$(builddir)/libnm \ $(GLIB_CFLAGS) \ $(SANITIZER_EXEC_CFLAGS) \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ + -DG_LOG_DOMAIN=\""test"\" \ $(NULL) libnm_tests_libnm_vpn_plugin_utils_test_la_LIBADD = \ @@ -6364,13 +6347,12 @@ libnm_tests_libnm_vpn_plugin_utils_test_la_LIBADD = \ src_core_cppflags_base = \ -I$(srcdir)/src/core \ $(dflt_cppflags_libnm_core) \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_DAEMON \ + -DG_LOG_DOMAIN=\""NetworkManager"\" \ $(SANITIZER_EXEC_CFLAGS) \ $(NULL) src_core_cppflags_base_test = \ $(src_core_cppflags_base) \ - -DNETWORKMANAGER_COMPILATION_TEST \ $(NULL) src_core_cppflags_device_plugin = \ @@ -6389,8 +6371,7 @@ src_core_cppflags = \ \ $(NULL) -src_core_cppflags_test = $(src_core_cppflags) \ - -DNETWORKMANAGER_COMPILATION_TEST $(NULL) $(am__append_17) +src_core_cppflags_test = $(src_core_cppflags) $(NULL) $(am__append_17) src_core_ldflags = $(CODE_COVERAGE_LDFLAGS) ############################################################################### @@ -6409,7 +6390,6 @@ libsystemd_cppflags = \ shared_systemd_libnm_systemd_logging_stub_la_CPPFLAGS = \ $(libsystemd_cppflags) \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD_SHARED \ -DG_LOG_DOMAIN=\""libnm"\" \ $(NULL) @@ -6424,11 +6404,11 @@ shared_systemd_libnm_systemd_logging_stub_la_LIBADD = \ shared_systemd_libnm_systemd_shared_la_CPPFLAGS = \ $(libsystemd_cppflags) \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD_SHARED \ -DG_LOG_DOMAIN=\""libnm"\" \ $(NULL) shared_systemd_libnm_systemd_shared_la_SOURCES = \ + shared/systemd/nm-default-systemd-shared.h \ shared/systemd/nm-sd-utils-shared.c \ shared/systemd/nm-sd-utils-shared.h \ shared/systemd/sd-adapt-shared/architecture.h \ @@ -6455,7 +6435,6 @@ shared_systemd_libnm_systemd_shared_la_SOURCES = \ shared/systemd/sd-adapt-shared/mkdir.h \ shared/systemd/sd-adapt-shared/namespace-util.h \ shared/systemd/sd-adapt-shared/nm-sd-adapt-shared.h \ - shared/systemd/sd-adapt-shared/nm-sd-adapt-shared.h \ shared/systemd/sd-adapt-shared/nulstr-util.h \ shared/systemd/sd-adapt-shared/raw-clone.h \ shared/systemd/sd-adapt-shared/rlimit-util.h \ @@ -6574,7 +6553,7 @@ src_core_libnm_systemd_core_la_cppflags = \ -I$(srcdir)/src/core/systemd/src/systemd \ -I$(srcdir)/src/core/systemd/src/libsystemd-network \ -I$(srcdir)/src/core/systemd/src/libsystemd/sd-event \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD \ + -DG_LOG_DOMAIN=\""NetworkManager"\" \ $(NULL) src_core_libnm_systemd_core_la_libadd = \ @@ -6583,6 +6562,7 @@ src_core_libnm_systemd_core_la_libadd = \ $(NULL) src_core_libnm_systemd_core_la_SOURCES = \ + src/core/systemd/nm-default-systemd.h \ src/core/systemd/nm-sd-utils-core.c \ src/core/systemd/nm-sd-utils-core.h \ src/core/systemd/nm-sd.c \ @@ -6710,6 +6690,8 @@ src_core_libNetworkManagerBase_la_LIBADD = \ src_core_libNetworkManager_la_CPPFLAGS = $(src_core_cppflags) src_core_libNetworkManager_la_SOURCES = \ \ + src/core/nm-default-daemon.h \ + \ src/core/nm-checkpoint.c \ src/core/nm-checkpoint.h \ src/core/nm-checkpoint-manager.c \ @@ -6888,7 +6870,6 @@ src_core_libNetworkManager_la_SOURCES = \ src_core_libNetworkManager_la_LIBADD = \ src/core/libNetworkManagerBase.la \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -6976,7 +6957,6 @@ src_core_nm_iface_helper_SOURCES = \ src_core_nm_iface_helper_LDADD = \ src/core/libNetworkManagerBase.la \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -7023,7 +7003,6 @@ src_core_initrd_nm_initrd_generator_LDADD = \ src/core/initrd/libnmi-core.la \ src/core/libNetworkManagerBase.la \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ - libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -7047,13 +7026,13 @@ src_core_initrd_nm_initrd_generator_LDFLAGS = \ $(SANITIZER_EXEC_LDFLAGS) src_core_initrd_tests_test_dt_reader_CPPFLAGS = \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DTEST_INITRD_DIR=\"$(abs_srcdir)/src/core/initrd/tests\" \ - $(src_core_cppflags) + $(src_core_cppflags) \ + $(NULL) src_core_initrd_tests_test_dt_reader_LDFLAGS = \ $(CODE_COVERAGE_LDFLAGS) \ - $(SANITIZER_EXEC_LDFLAGS) + $(SANITIZER_EXEC_LDFLAGS) \ + $(NULL) src_core_initrd_tests_test_dt_reader_LDADD = \ src/core/initrd/libnmi-core.la \ @@ -7065,13 +7044,13 @@ src_core_initrd_tests_test_dt_reader_LDADD = \ $(NULL) src_core_initrd_tests_test_ibft_reader_CPPFLAGS = \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DTEST_INITRD_DIR=\"$(abs_srcdir)/src/core/initrd/tests\" \ - $(src_core_cppflags) + $(src_core_cppflags) \ + $(NULL) src_core_initrd_tests_test_ibft_reader_LDFLAGS = \ $(CODE_COVERAGE_LDFLAGS) \ - $(SANITIZER_EXEC_LDFLAGS) + $(SANITIZER_EXEC_LDFLAGS) \ + $(NULL) src_core_initrd_tests_test_ibft_reader_LDADD = \ src/core/initrd/libnmi-core.la \ @@ -7083,9 +7062,8 @@ src_core_initrd_tests_test_ibft_reader_LDADD = \ $(NULL) src_core_initrd_tests_test_cmdline_reader_CPPFLAGS = \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DTEST_INITRD_DIR=\"$(abs_srcdir)/src/core/initrd/tests\" \ - $(src_core_cppflags) + $(src_core_cppflags) \ + $(NULL) src_core_initrd_tests_test_cmdline_reader_LDFLAGS = \ $(CODE_COVERAGE_LDFLAGS) \ @@ -7105,7 +7083,6 @@ src_core_dhcp_nm_dhcp_helper_CPPFLAGS = \ -I$(srcdir)/shared \ -I$(builddir)/shared \ -DG_LOG_DOMAIN=\""nm-dhcp-helper"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_GLIB \ $(GLIB_CFLAGS) \ $(NULL) @@ -7138,7 +7115,6 @@ src_core_dhcp_tests_test_dhcp_utils_LDFLAGS = $(src_core_tests_ldflags) @WITH_PPP_TRUE@ -I$(builddir)/shared \ @WITH_PPP_TRUE@ -I$(srcdir)/libnm-core \ @WITH_PPP_TRUE@ -DG_LOG_DOMAIN=\""nm-pppd-plugin"\" \ -@WITH_PPP_TRUE@ -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_GLIB \ @WITH_PPP_TRUE@ $(GLIB_CFLAGS) @WITH_PPP_TRUE@src_core_ppp_nm_pppd_plugin_la_SOURCES = \ @@ -7681,7 +7657,6 @@ src_core_tests_test_l3cfg_LDFLAGS = $(src_core_devices_tests_ldflags) src_core_tests_test_l3cfg_LDADD = $(src_core_tests_ldadd) src_core_tests_test_systemd_CPPFLAGS = \ $(src_core_libnm_systemd_core_la_cppflags) \ - -DNETWORKMANAGER_COMPILATION_TEST \ $(NULL) src_core_tests_test_systemd_LDFLAGS = \ @@ -7717,7 +7692,6 @@ dispatcher_cppflags = \ -I$(builddir)/dispatcher \ $(GLIB_CFLAGS) \ -DG_LOG_DOMAIN=\""nm-dispatcher"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ $(NULL) dispatcher_libnm_dispatcher_core_la_SOURCES = \ @@ -7758,8 +7732,7 @@ dispatcher_tests_test_dispatcher_envp_CPPFLAGS = \ -I$(builddir)/libnm \ -I$(srcdir)/dispatcher \ -I$(builddir)/dispatcher \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ + -DG_LOG_DOMAIN=\""NetworkManager"\" \ $(GLIB_CFLAGS) \ $(SANITIZER_EXEC_CFLAGS) \ $(INTROSPECTION_EXTRA_CFLAGS) \ @@ -7793,7 +7766,6 @@ clients_nm_online_CPPFLAGS = \ -I$(builddir)/libnm \ $(GLIB_CFLAGS) \ -DG_LOG_DOMAIN=\""nm-online"\" \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ $(NULL) clients_nm_online_LDFLAGS = \ @@ -7823,7 +7795,6 @@ clients_cppflags = \ -I$(srcdir)/libnm \ -I$(builddir)/libnm \ -I$(srcdir)/clients/common \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ $(GLIB_CFLAGS) \ $(SANITIZER_EXEC_CFLAGS) \ $(NULL) @@ -7851,8 +7822,9 @@ clients_common_libnmc_base_la_LIBADD = \ clients_common_settings_doc_h = clients/common/settings-docs.h clients_common_libnmc_la_SOURCES = \ - shared/nm-meta-setting.c \ - shared/nm-meta-setting.h \ + clients/common/nm-meta-setting-base-impl.c \ + clients/common/nm-meta-setting-base-impl.h \ + clients/common/nm-meta-setting-base.h \ \ clients/common/nm-meta-setting-desc.c \ clients/common/nm-meta-setting-desc.h \ @@ -7874,7 +7846,7 @@ clients_common_libnmc_la_LIBADD = \ clients_common_tests_test_clients_common_CPPFLAGS = \ -I$(srcdir)/clients/common/tests \ $(clients_cppflags) \ - -DNETWORKMANAGER_COMPILATION_TEST \ + -DG_LOG_DOMAIN=\""test"\" \ $(NULL) clients_common_tests_test_clients_common_LDFLAGS = \ @@ -7900,8 +7872,7 @@ clients_common_tests_test_libnm_core_aux_CPPFLAGS = \ -I$(srcdir)/libnm-core \ -I$(builddir)/libnm \ -I$(srcdir)/libnm \ - -DNETWORKMANAGER_COMPILATION_TEST \ - -DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT \ + -DG_LOG_DOMAIN=\""test"\" \ $(CODE_COVERAGE_CFLAGS) \ $(GLIB_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ @@ -8157,8 +8128,7 @@ clients_cli_generate_docs_nm_settings_nmcli_LDFLAGS = \ @BUILD_NMTUI_TRUE@ $(NULL) @BUILD_NMTUI_TRUE@nmtui_links = nmtui-edit nmtui-connect nmtui-hostname -@BUILD_NM_CLOUD_SETUP_TRUE@clients_cloud_setup_nm_cloud_setup_SOURCES = \ -@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/main.c \ +@BUILD_NM_CLOUD_SETUP_TRUE@clients_cloud_setup_libnm_cloud_setup_core_a_SOURCES = \ @BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nm-cloud-setup-utils.c \ @BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nm-cloud-setup-utils.h \ @BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nm-http-client.c \ @@ -8173,6 +8143,16 @@ clients_cli_generate_docs_nm_settings_nmcli_LDFLAGS = \ @BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/nmcs-provider-azure.h \ @BUILD_NM_CLOUD_SETUP_TRUE@ $(NULL) +@BUILD_NM_CLOUD_SETUP_TRUE@clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS = \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(clients_cppflags) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ -DG_LOG_DOMAIN=\""nm-cloud-setup"\" \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(LIBCURL_CFLAGS) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(NULL) + +@BUILD_NM_CLOUD_SETUP_TRUE@clients_cloud_setup_nm_cloud_setup_SOURCES = \ +@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/main.c \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(NULL) + @BUILD_NM_CLOUD_SETUP_TRUE@clients_cloud_setup_nm_cloud_setup_CPPFLAGS = \ @BUILD_NM_CLOUD_SETUP_TRUE@ $(clients_cppflags) \ @BUILD_NM_CLOUD_SETUP_TRUE@ -DG_LOG_DOMAIN=\""nm-cloud-setup"\" \ @@ -8185,6 +8165,33 @@ clients_cli_generate_docs_nm_settings_nmcli_LDFLAGS = \ @BUILD_NM_CLOUD_SETUP_TRUE@ $(NULL) @BUILD_NM_CLOUD_SETUP_TRUE@clients_cloud_setup_nm_cloud_setup_LDADD = \ +@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/libnm-cloud-setup-core.a \ +@BUILD_NM_CLOUD_SETUP_TRUE@ libnm/nm-libnm-aux/libnm-libnm-aux.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ shared/nm-base/libnm-base.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ shared/nm-glib-aux/libnm-glib-aux.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ shared/nm-std-aux/libnm-std-aux.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ shared/libcsiphash.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ libnm/libnm.la \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(GLIB_LIBS) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(LIBCURL_LIBS) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(NULL) + +@BUILD_NM_CLOUD_SETUP_TRUE@clients_cloud_setup_tests_test_cloud_setup_general_CPPFLAGS = \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(clients_cppflags) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ -I$(srcdir)/clients/cloud-setup \ +@BUILD_NM_CLOUD_SETUP_TRUE@ -DG_LOG_DOMAIN=\""tests"\" \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(LIBCURL_CFLAGS) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(NULL) + +@BUILD_NM_CLOUD_SETUP_TRUE@clients_cloud_setup_tests_test_cloud_setup_general_LDFLAGS = \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(CODE_COVERAGE_LDFLAGS) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(SANITIZER_EXEC_LDFLAGS) \ +@BUILD_NM_CLOUD_SETUP_TRUE@ $(NULL) + +@BUILD_NM_CLOUD_SETUP_TRUE@clients_cloud_setup_tests_test_cloud_setup_general_LDADD = \ +@BUILD_NM_CLOUD_SETUP_TRUE@ clients/cloud-setup/libnm-cloud-setup-core.a \ @BUILD_NM_CLOUD_SETUP_TRUE@ libnm/nm-libnm-aux/libnm-libnm-aux.la \ @BUILD_NM_CLOUD_SETUP_TRUE@ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ @BUILD_NM_CLOUD_SETUP_TRUE@ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -8369,7 +8376,7 @@ $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) distclean-hdr: -rm -f config.h stamp-h1 -shared/nm-version-macros.h: $(top_builddir)/config.status $(top_srcdir)/shared/nm-version-macros.h.in +libnm-core/nm-version-macros.h: $(top_builddir)/config.status $(top_srcdir)/libnm-core/nm-version-macros.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ libnm/libnm.pc: $(top_builddir)/config.status $(top_srcdir)/libnm/libnm.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ @@ -8672,6 +8679,35 @@ clean-pppd_pluginLTLIBRARIES: echo rm -f $${locs}; \ rm -f $${locs}; \ } +clients/cloud-setup/$(am__dirstamp): + @$(MKDIR_P) clients/cloud-setup + @: > clients/cloud-setup/$(am__dirstamp) +clients/cloud-setup/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) clients/cloud-setup/$(DEPDIR) + @: > clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) +clients/cloud-setup/libnm_cloud_setup_core_a-nm-cloud-setup-utils.$(OBJEXT): \ + clients/cloud-setup/$(am__dirstamp) \ + clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) +clients/cloud-setup/libnm_cloud_setup_core_a-nm-http-client.$(OBJEXT): \ + clients/cloud-setup/$(am__dirstamp) \ + clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) +clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider.$(OBJEXT): \ + clients/cloud-setup/$(am__dirstamp) \ + clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) +clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-ec2.$(OBJEXT): \ + clients/cloud-setup/$(am__dirstamp) \ + clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) +clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-gcp.$(OBJEXT): \ + clients/cloud-setup/$(am__dirstamp) \ + clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) +clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-azure.$(OBJEXT): \ + clients/cloud-setup/$(am__dirstamp) \ + clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) + +clients/cloud-setup/libnm-cloud-setup-core.a: $(clients_cloud_setup_libnm_cloud_setup_core_a_OBJECTS) $(clients_cloud_setup_libnm_cloud_setup_core_a_DEPENDENCIES) $(EXTRA_clients_cloud_setup_libnm_cloud_setup_core_a_DEPENDENCIES) clients/cloud-setup/$(am__dirstamp) + $(AM_V_at)-rm -f clients/cloud-setup/libnm-cloud-setup-core.a + $(AM_V_AR)$(clients_cloud_setup_libnm_cloud_setup_core_a_AR) clients/cloud-setup/libnm-cloud-setup-core.a $(clients_cloud_setup_libnm_cloud_setup_core_a_OBJECTS) $(clients_cloud_setup_libnm_cloud_setup_core_a_LIBADD) + $(AM_V_at)$(RANLIB) clients/cloud-setup/libnm-cloud-setup-core.a clients/tui/newt/$(am__dirstamp): @$(MKDIR_P) clients/tui/newt @: > clients/tui/newt/$(am__dirstamp) @@ -8764,14 +8800,9 @@ clients/common/libnmc_base_la-nm-polkit-listener.lo: \ clients/common/libnmc-base.la: $(clients_common_libnmc_base_la_OBJECTS) $(clients_common_libnmc_base_la_DEPENDENCIES) $(EXTRA_clients_common_libnmc_base_la_DEPENDENCIES) clients/common/$(am__dirstamp) $(AM_V_CCLD)$(LINK) $(am_clients_common_libnmc_base_la_rpath) $(clients_common_libnmc_base_la_OBJECTS) $(clients_common_libnmc_base_la_LIBADD) $(LIBS) -shared/$(am__dirstamp): - @$(MKDIR_P) shared - @: > shared/$(am__dirstamp) -shared/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) shared/$(DEPDIR) - @: > shared/$(DEPDIR)/$(am__dirstamp) -shared/clients_common_libnmc_la-nm-meta-setting.lo: \ - shared/$(am__dirstamp) shared/$(DEPDIR)/$(am__dirstamp) +clients/common/libnmc_la-nm-meta-setting-base-impl.lo: \ + clients/common/$(am__dirstamp) \ + clients/common/$(DEPDIR)/$(am__dirstamp) clients/common/libnmc_la-nm-meta-setting-desc.lo: \ clients/common/$(am__dirstamp) \ clients/common/$(DEPDIR)/$(am__dirstamp) @@ -9108,8 +9139,6 @@ libnm-core/libnm_core_la-nm-setting-wireless.lo: \ libnm-core/libnm_core_la-nm-setting-wpan.lo: \ libnm-core/$(am__dirstamp) \ libnm-core/$(DEPDIR)/$(am__dirstamp) -shared/libnm_core_libnm_core_la-nm-meta-setting.lo: \ - shared/$(am__dirstamp) shared/$(DEPDIR)/$(am__dirstamp) libnm-core/libnm_core_la-nm-connection.lo: libnm-core/$(am__dirstamp) \ libnm-core/$(DEPDIR)/$(am__dirstamp) libnm-core/libnm_core_la-nm-crypto.lo: libnm-core/$(am__dirstamp) \ @@ -9118,6 +9147,14 @@ libnm-core/libnm_core_la-nm-dbus-utils.lo: libnm-core/$(am__dirstamp) \ libnm-core/$(DEPDIR)/$(am__dirstamp) libnm-core/libnm_core_la-nm-errors.lo: libnm-core/$(am__dirstamp) \ libnm-core/$(DEPDIR)/$(am__dirstamp) +libnm-core/libnm_core_la-nm-keyfile-utils.lo: \ + libnm-core/$(am__dirstamp) \ + libnm-core/$(DEPDIR)/$(am__dirstamp) +libnm-core/libnm_core_la-nm-keyfile.lo: libnm-core/$(am__dirstamp) \ + libnm-core/$(DEPDIR)/$(am__dirstamp) +libnm-core/libnm_core_la-nm-meta-setting-base-impl.lo: \ + libnm-core/$(am__dirstamp) \ + libnm-core/$(DEPDIR)/$(am__dirstamp) libnm-core/libnm_core_la-nm-property-compare.lo: \ libnm-core/$(am__dirstamp) \ libnm-core/$(DEPDIR)/$(am__dirstamp) @@ -9154,21 +9191,6 @@ libnm-core/libnm_crypto_nss_la-nm-crypto-nss.lo: \ libnm-core/libnm-crypto-nss.la: $(libnm_core_libnm_crypto_nss_la_OBJECTS) $(libnm_core_libnm_crypto_nss_la_DEPENDENCIES) $(EXTRA_libnm_core_libnm_crypto_nss_la_DEPENDENCIES) libnm-core/$(am__dirstamp) $(AM_V_CCLD)$(libnm_core_libnm_crypto_nss_la_LINK) $(am_libnm_core_libnm_crypto_nss_la_rpath) $(libnm_core_libnm_crypto_nss_la_OBJECTS) $(libnm_core_libnm_crypto_nss_la_LIBADD) $(LIBS) -libnm-core/nm-keyfile/$(am__dirstamp): - @$(MKDIR_P) libnm-core/nm-keyfile - @: > libnm-core/nm-keyfile/$(am__dirstamp) -libnm-core/nm-keyfile/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) libnm-core/nm-keyfile/$(DEPDIR) - @: > libnm-core/nm-keyfile/$(DEPDIR)/$(am__dirstamp) -libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile-utils.lo: \ - libnm-core/nm-keyfile/$(am__dirstamp) \ - libnm-core/nm-keyfile/$(DEPDIR)/$(am__dirstamp) -libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile.lo: \ - libnm-core/nm-keyfile/$(am__dirstamp) \ - libnm-core/nm-keyfile/$(DEPDIR)/$(am__dirstamp) - -libnm-core/nm-keyfile/libnm-keyfile.la: $(libnm_core_nm_keyfile_libnm_keyfile_la_OBJECTS) $(libnm_core_nm_keyfile_libnm_keyfile_la_DEPENDENCIES) $(EXTRA_libnm_core_nm_keyfile_libnm_keyfile_la_DEPENDENCIES) libnm-core/nm-keyfile/$(am__dirstamp) - $(AM_V_CCLD)$(libnm_core_nm_keyfile_libnm_keyfile_la_LINK) $(libnm_core_nm_keyfile_libnm_keyfile_la_OBJECTS) $(libnm_core_nm_keyfile_libnm_keyfile_la_LIBADD) $(LIBS) libnm-core/nm-libnm-core-aux/$(am__dirstamp): @$(MKDIR_P) libnm-core/nm-libnm-core-aux @: > libnm-core/nm-libnm-core-aux/$(am__dirstamp) @@ -9350,6 +9372,9 @@ shared/c-rbtree/src/$(DEPDIR)/$(am__dirstamp): shared/c-rbtree/src/libcrbtree_la-c-rbtree.lo: \ shared/c-rbtree/src/$(am__dirstamp) \ shared/c-rbtree/src/$(DEPDIR)/$(am__dirstamp) +shared/$(am__dirstamp): + @$(MKDIR_P) shared + @: > shared/$(am__dirstamp) shared/libcrbtree.la: $(shared_libcrbtree_la_OBJECTS) $(shared_libcrbtree_la_DEPENDENCIES) $(EXTRA_shared_libcrbtree_la_DEPENDENCIES) shared/$(am__dirstamp) $(AM_V_CCLD)$(shared_libcrbtree_la_LINK) $(shared_libcrbtree_la_OBJECTS) $(shared_libcrbtree_la_LIBADD) $(LIBS) @@ -10471,37 +10496,26 @@ clients/cli/nmcli-polkit-agent.$(OBJEXT): clients/cli/$(am__dirstamp) \ clients/cli/nmcli$(EXEEXT): $(clients_cli_nmcli_OBJECTS) $(clients_cli_nmcli_DEPENDENCIES) $(EXTRA_clients_cli_nmcli_DEPENDENCIES) clients/cli/$(am__dirstamp) @rm -f clients/cli/nmcli$(EXEEXT) $(AM_V_CCLD)$(clients_cli_nmcli_LINK) $(clients_cli_nmcli_OBJECTS) $(clients_cli_nmcli_LDADD) $(LIBS) -clients/cloud-setup/$(am__dirstamp): - @$(MKDIR_P) clients/cloud-setup - @: > clients/cloud-setup/$(am__dirstamp) -clients/cloud-setup/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) clients/cloud-setup/$(DEPDIR) - @: > clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) clients/cloud-setup/nm_cloud_setup-main.$(OBJEXT): \ clients/cloud-setup/$(am__dirstamp) \ clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) -clients/cloud-setup/nm_cloud_setup-nm-cloud-setup-utils.$(OBJEXT): \ - clients/cloud-setup/$(am__dirstamp) \ - clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) -clients/cloud-setup/nm_cloud_setup-nm-http-client.$(OBJEXT): \ - clients/cloud-setup/$(am__dirstamp) \ - clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) -clients/cloud-setup/nm_cloud_setup-nmcs-provider.$(OBJEXT): \ - clients/cloud-setup/$(am__dirstamp) \ - clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) -clients/cloud-setup/nm_cloud_setup-nmcs-provider-ec2.$(OBJEXT): \ - clients/cloud-setup/$(am__dirstamp) \ - clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) -clients/cloud-setup/nm_cloud_setup-nmcs-provider-gcp.$(OBJEXT): \ - clients/cloud-setup/$(am__dirstamp) \ - clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) -clients/cloud-setup/nm_cloud_setup-nmcs-provider-azure.$(OBJEXT): \ - clients/cloud-setup/$(am__dirstamp) \ - clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) clients/cloud-setup/nm-cloud-setup$(EXEEXT): $(clients_cloud_setup_nm_cloud_setup_OBJECTS) $(clients_cloud_setup_nm_cloud_setup_DEPENDENCIES) $(EXTRA_clients_cloud_setup_nm_cloud_setup_DEPENDENCIES) clients/cloud-setup/$(am__dirstamp) @rm -f clients/cloud-setup/nm-cloud-setup$(EXEEXT) $(AM_V_CCLD)$(clients_cloud_setup_nm_cloud_setup_LINK) $(clients_cloud_setup_nm_cloud_setup_OBJECTS) $(clients_cloud_setup_nm_cloud_setup_LDADD) $(LIBS) +clients/cloud-setup/tests/$(am__dirstamp): + @$(MKDIR_P) clients/cloud-setup/tests + @: > clients/cloud-setup/tests/$(am__dirstamp) +clients/cloud-setup/tests/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) clients/cloud-setup/tests/$(DEPDIR) + @: > clients/cloud-setup/tests/$(DEPDIR)/$(am__dirstamp) +clients/cloud-setup/tests/test_cloud_setup_general-test-cloud-setup-general.$(OBJEXT): \ + clients/cloud-setup/tests/$(am__dirstamp) \ + clients/cloud-setup/tests/$(DEPDIR)/$(am__dirstamp) + +clients/cloud-setup/tests/test-cloud-setup-general$(EXEEXT): $(clients_cloud_setup_tests_test_cloud_setup_general_OBJECTS) $(clients_cloud_setup_tests_test_cloud_setup_general_DEPENDENCIES) $(EXTRA_clients_cloud_setup_tests_test_cloud_setup_general_DEPENDENCIES) clients/cloud-setup/tests/$(am__dirstamp) + @rm -f clients/cloud-setup/tests/test-cloud-setup-general$(EXEEXT) + $(AM_V_CCLD)$(clients_cloud_setup_tests_test_cloud_setup_general_LINK) $(clients_cloud_setup_tests_test_cloud_setup_general_OBJECTS) $(clients_cloud_setup_tests_test_cloud_setup_general_LDADD) $(LIBS) clients/common/tests/$(am__dirstamp): @$(MKDIR_P) clients/common/tests @: > clients/common/tests/$(am__dirstamp) @@ -10845,6 +10859,9 @@ libnm/tests/test_libnm-test-libnm.$(OBJEXT): \ libnm/tests/test-libnm$(EXEEXT): $(libnm_tests_test_libnm_OBJECTS) $(libnm_tests_test_libnm_DEPENDENCIES) $(EXTRA_libnm_tests_test_libnm_DEPENDENCIES) libnm/tests/$(am__dirstamp) @rm -f libnm/tests/test-libnm$(EXEEXT) $(AM_V_CCLD)$(libnm_tests_test_libnm_LINK) $(libnm_tests_test_libnm_OBJECTS) $(libnm_tests_test_libnm_LDADD) $(LIBS) +shared/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) shared/$(DEPDIR) + @: > shared/$(DEPDIR)/$(am__dirstamp) shared/libnm_tests_test_nm_client-nm-test-utils-impl.$(OBJEXT): \ shared/$(am__dirstamp) shared/$(DEPDIR)/$(am__dirstamp) libnm/tests/test_nm_client-test-nm-client.$(OBJEXT): \ @@ -11348,6 +11365,7 @@ mostlyclean-compile: -rm -f clients/*.$(OBJEXT) -rm -f clients/cli/*.$(OBJEXT) -rm -f clients/cloud-setup/*.$(OBJEXT) + -rm -f clients/cloud-setup/tests/*.$(OBJEXT) -rm -f clients/common/*.$(OBJEXT) -rm -f clients/common/*.lo -rm -f clients/common/tests/*.$(OBJEXT) @@ -11362,8 +11380,6 @@ mostlyclean-compile: -rm -f introspection/*.lo -rm -f libnm-core/*.$(OBJEXT) -rm -f libnm-core/*.lo - -rm -f libnm-core/nm-keyfile/*.$(OBJEXT) - -rm -f libnm-core/nm-keyfile/*.lo -rm -f libnm-core/nm-libnm-core-aux/*.$(OBJEXT) -rm -f libnm-core/nm-libnm-core-aux/*.lo -rm -f libnm-core/nm-libnm-core-intern/*.$(OBJEXT) @@ -11375,7 +11391,6 @@ mostlyclean-compile: -rm -f libnm/nm-libnm-aux/*.lo -rm -f libnm/tests/*.$(OBJEXT) -rm -f shared/*.$(OBJEXT) - -rm -f shared/*.lo -rm -f shared/c-rbtree/src/*.$(OBJEXT) -rm -f shared/c-rbtree/src/*.lo -rm -f shared/c-siphash/src/*.$(OBJEXT) @@ -11497,18 +11512,20 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@clients/cli/$(DEPDIR)/nmcli-polkit-agent.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@clients/cli/$(DEPDIR)/nmcli-settings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@clients/cli/$(DEPDIR)/nmcli-utils.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-cloud-setup-utils.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-http-client.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-azure.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-ec2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-gcp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-main.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-cloud-setup-utils.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-http-client.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-azure.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-ec2.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-gcp.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@clients/cloud-setup/tests/$(DEPDIR)/test_cloud_setup_general-test-cloud-setup-general.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@clients/common/$(DEPDIR)/libnmc_base_la-nm-client-utils.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@clients/common/$(DEPDIR)/libnmc_base_la-nm-polkit-listener.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@clients/common/$(DEPDIR)/libnmc_base_la-nm-secret-agent-simple.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@clients/common/$(DEPDIR)/libnmc_base_la-nm-vpn-helpers.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-access.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-base-impl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-desc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@clients/common/tests/$(DEPDIR)/test_clients_common-test-clients-common.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@clients/common/tests/$(DEPDIR)/test_libnm_core_aux-test-libnm-core-aux.Po@am__quote@ # am--include-marker @@ -11641,6 +11658,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libnm-core/$(DEPDIR)/libnm_core_la-nm-crypto.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@libnm-core/$(DEPDIR)/libnm_core_la-nm-dbus-utils.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@libnm-core/$(DEPDIR)/libnm_core_la-nm-errors.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile-utils.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libnm-core/$(DEPDIR)/libnm_core_la-nm-meta-setting-base-impl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@libnm-core/$(DEPDIR)/libnm_core_la-nm-property-compare.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@libnm-core/$(DEPDIR)/libnm_core_la-nm-setting-6lowpan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@libnm-core/$(DEPDIR)/libnm_core_la-nm-setting-8021x.Plo@am__quote@ # am--include-marker @@ -11702,8 +11722,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libnm-core/$(DEPDIR)/libnm_core_la-nm-vpn-plugin-info.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@libnm-core/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@libnm-core/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile-utils.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@libnm-core/nm-libnm-core-aux/$(DEPDIR)/libnm_libnm_core_aux_la-nm-libnm-core-aux.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@libnm-core/nm-libnm-core-intern/$(DEPDIR)/libnm_libnm_core_intern_la-nm-auth-subject.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@libnm-core/nm-libnm-core-intern/$(DEPDIR)/libnm_libnm_core_intern_la-nm-libnm-core-utils.Plo@am__quote@ # am--include-marker @@ -11773,8 +11791,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libnm/tests/$(DEPDIR)/test_nm_client-test-nm-client.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@libnm/tests/$(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@libnm/tests/$(DEPDIR)/test_secret_agent-test-secret-agent.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@shared/$(DEPDIR)/clients_common_libnmc_la-nm-meta-setting.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@shared/$(DEPDIR)/libnm_core_libnm_core_la-nm-meta-setting.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@shared/$(DEPDIR)/libnm_tests_test_nm_client-nm-test-utils-impl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@shared/$(DEPDIR)/libnm_tests_test_remote_settings_client-nm-test-utils-impl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@shared/$(DEPDIR)/libnm_tests_test_secret_agent-nm-test-utils-impl.Po@am__quote@ # am--include-marker @@ -12117,6 +12133,90 @@ am--depfiles: $(am__depfiles_remade) @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< +clients/cloud-setup/libnm_cloud_setup_core_a-nm-cloud-setup-utils.o: clients/cloud-setup/nm-cloud-setup-utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/libnm_cloud_setup_core_a-nm-cloud-setup-utils.o -MD -MP -MF clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-cloud-setup-utils.Tpo -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nm-cloud-setup-utils.o `test -f 'clients/cloud-setup/nm-cloud-setup-utils.c' || echo '$(srcdir)/'`clients/cloud-setup/nm-cloud-setup-utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-cloud-setup-utils.Tpo clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-cloud-setup-utils.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nm-cloud-setup-utils.c' object='clients/cloud-setup/libnm_cloud_setup_core_a-nm-cloud-setup-utils.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nm-cloud-setup-utils.o `test -f 'clients/cloud-setup/nm-cloud-setup-utils.c' || echo '$(srcdir)/'`clients/cloud-setup/nm-cloud-setup-utils.c + +clients/cloud-setup/libnm_cloud_setup_core_a-nm-cloud-setup-utils.obj: clients/cloud-setup/nm-cloud-setup-utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/libnm_cloud_setup_core_a-nm-cloud-setup-utils.obj -MD -MP -MF clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-cloud-setup-utils.Tpo -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nm-cloud-setup-utils.obj `if test -f 'clients/cloud-setup/nm-cloud-setup-utils.c'; then $(CYGPATH_W) 'clients/cloud-setup/nm-cloud-setup-utils.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nm-cloud-setup-utils.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-cloud-setup-utils.Tpo clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-cloud-setup-utils.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nm-cloud-setup-utils.c' object='clients/cloud-setup/libnm_cloud_setup_core_a-nm-cloud-setup-utils.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nm-cloud-setup-utils.obj `if test -f 'clients/cloud-setup/nm-cloud-setup-utils.c'; then $(CYGPATH_W) 'clients/cloud-setup/nm-cloud-setup-utils.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nm-cloud-setup-utils.c'; fi` + +clients/cloud-setup/libnm_cloud_setup_core_a-nm-http-client.o: clients/cloud-setup/nm-http-client.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/libnm_cloud_setup_core_a-nm-http-client.o -MD -MP -MF clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-http-client.Tpo -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nm-http-client.o `test -f 'clients/cloud-setup/nm-http-client.c' || echo '$(srcdir)/'`clients/cloud-setup/nm-http-client.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-http-client.Tpo clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-http-client.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nm-http-client.c' object='clients/cloud-setup/libnm_cloud_setup_core_a-nm-http-client.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nm-http-client.o `test -f 'clients/cloud-setup/nm-http-client.c' || echo '$(srcdir)/'`clients/cloud-setup/nm-http-client.c + +clients/cloud-setup/libnm_cloud_setup_core_a-nm-http-client.obj: clients/cloud-setup/nm-http-client.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/libnm_cloud_setup_core_a-nm-http-client.obj -MD -MP -MF clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-http-client.Tpo -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nm-http-client.obj `if test -f 'clients/cloud-setup/nm-http-client.c'; then $(CYGPATH_W) 'clients/cloud-setup/nm-http-client.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nm-http-client.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-http-client.Tpo clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-http-client.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nm-http-client.c' object='clients/cloud-setup/libnm_cloud_setup_core_a-nm-http-client.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nm-http-client.obj `if test -f 'clients/cloud-setup/nm-http-client.c'; then $(CYGPATH_W) 'clients/cloud-setup/nm-http-client.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nm-http-client.c'; fi` + +clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider.o: clients/cloud-setup/nmcs-provider.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider.o -MD -MP -MF clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider.Tpo -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider.o `test -f 'clients/cloud-setup/nmcs-provider.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider.Tpo clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider.c' object='clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider.o `test -f 'clients/cloud-setup/nmcs-provider.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider.c + +clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider.obj: clients/cloud-setup/nmcs-provider.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider.obj -MD -MP -MF clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider.Tpo -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider.obj `if test -f 'clients/cloud-setup/nmcs-provider.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider.Tpo clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider.c' object='clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider.obj `if test -f 'clients/cloud-setup/nmcs-provider.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider.c'; fi` + +clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-ec2.o: clients/cloud-setup/nmcs-provider-ec2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-ec2.o -MD -MP -MF clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-ec2.Tpo -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-ec2.o `test -f 'clients/cloud-setup/nmcs-provider-ec2.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider-ec2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-ec2.Tpo clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-ec2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider-ec2.c' object='clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-ec2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-ec2.o `test -f 'clients/cloud-setup/nmcs-provider-ec2.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider-ec2.c + +clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-ec2.obj: clients/cloud-setup/nmcs-provider-ec2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-ec2.obj -MD -MP -MF clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-ec2.Tpo -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-ec2.obj `if test -f 'clients/cloud-setup/nmcs-provider-ec2.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider-ec2.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider-ec2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-ec2.Tpo clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-ec2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider-ec2.c' object='clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-ec2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-ec2.obj `if test -f 'clients/cloud-setup/nmcs-provider-ec2.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider-ec2.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider-ec2.c'; fi` + +clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-gcp.o: clients/cloud-setup/nmcs-provider-gcp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-gcp.o -MD -MP -MF clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-gcp.Tpo -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-gcp.o `test -f 'clients/cloud-setup/nmcs-provider-gcp.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider-gcp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-gcp.Tpo clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-gcp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider-gcp.c' object='clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-gcp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-gcp.o `test -f 'clients/cloud-setup/nmcs-provider-gcp.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider-gcp.c + +clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-gcp.obj: clients/cloud-setup/nmcs-provider-gcp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-gcp.obj -MD -MP -MF clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-gcp.Tpo -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-gcp.obj `if test -f 'clients/cloud-setup/nmcs-provider-gcp.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider-gcp.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider-gcp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-gcp.Tpo clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-gcp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider-gcp.c' object='clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-gcp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-gcp.obj `if test -f 'clients/cloud-setup/nmcs-provider-gcp.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider-gcp.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider-gcp.c'; fi` + +clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-azure.o: clients/cloud-setup/nmcs-provider-azure.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-azure.o -MD -MP -MF clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-azure.Tpo -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-azure.o `test -f 'clients/cloud-setup/nmcs-provider-azure.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider-azure.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-azure.Tpo clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-azure.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider-azure.c' object='clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-azure.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-azure.o `test -f 'clients/cloud-setup/nmcs-provider-azure.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider-azure.c + +clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-azure.obj: clients/cloud-setup/nmcs-provider-azure.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-azure.obj -MD -MP -MF clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-azure.Tpo -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-azure.obj `if test -f 'clients/cloud-setup/nmcs-provider-azure.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider-azure.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider-azure.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-azure.Tpo clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-azure.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider-azure.c' object='clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-azure.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_libnm_cloud_setup_core_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/libnm_cloud_setup_core_a-nmcs-provider-azure.obj `if test -f 'clients/cloud-setup/nmcs-provider-azure.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider-azure.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider-azure.c'; fi` + clients/tui/newt/libnmt_newt_a-nmt-newt-button.o: clients/tui/newt/nmt-newt-button.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_tui_newt_libnmt_newt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/tui/newt/libnmt_newt_a-nmt-newt-button.o -MD -MP -MF clients/tui/newt/$(DEPDIR)/libnmt_newt_a-nmt-newt-button.Tpo -c -o clients/tui/newt/libnmt_newt_a-nmt-newt-button.o `test -f 'clients/tui/newt/nmt-newt-button.c' || echo '$(srcdir)/'`clients/tui/newt/nmt-newt-button.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/tui/newt/$(DEPDIR)/libnmt_newt_a-nmt-newt-button.Tpo clients/tui/newt/$(DEPDIR)/libnmt_newt_a-nmt-newt-button.Po @@ -12425,12 +12525,12 @@ clients/common/libnmc_base_la-nm-polkit-listener.lo: clients/common/nm-polkit-li @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_common_libnmc_base_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/common/libnmc_base_la-nm-polkit-listener.lo `test -f 'clients/common/nm-polkit-listener.c' || echo '$(srcdir)/'`clients/common/nm-polkit-listener.c -shared/clients_common_libnmc_la-nm-meta-setting.lo: shared/nm-meta-setting.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_common_libnmc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT shared/clients_common_libnmc_la-nm-meta-setting.lo -MD -MP -MF shared/$(DEPDIR)/clients_common_libnmc_la-nm-meta-setting.Tpo -c -o shared/clients_common_libnmc_la-nm-meta-setting.lo `test -f 'shared/nm-meta-setting.c' || echo '$(srcdir)/'`shared/nm-meta-setting.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) shared/$(DEPDIR)/clients_common_libnmc_la-nm-meta-setting.Tpo shared/$(DEPDIR)/clients_common_libnmc_la-nm-meta-setting.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='shared/nm-meta-setting.c' object='shared/clients_common_libnmc_la-nm-meta-setting.lo' libtool=yes @AMDEPBACKSLASH@ +clients/common/libnmc_la-nm-meta-setting-base-impl.lo: clients/common/nm-meta-setting-base-impl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_common_libnmc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/common/libnmc_la-nm-meta-setting-base-impl.lo -MD -MP -MF clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-base-impl.Tpo -c -o clients/common/libnmc_la-nm-meta-setting-base-impl.lo `test -f 'clients/common/nm-meta-setting-base-impl.c' || echo '$(srcdir)/'`clients/common/nm-meta-setting-base-impl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-base-impl.Tpo clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-base-impl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/common/nm-meta-setting-base-impl.c' object='clients/common/libnmc_la-nm-meta-setting-base-impl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_common_libnmc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o shared/clients_common_libnmc_la-nm-meta-setting.lo `test -f 'shared/nm-meta-setting.c' || echo '$(srcdir)/'`shared/nm-meta-setting.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_common_libnmc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/common/libnmc_la-nm-meta-setting-base-impl.lo `test -f 'clients/common/nm-meta-setting-base-impl.c' || echo '$(srcdir)/'`clients/common/nm-meta-setting-base-impl.c clients/common/libnmc_la-nm-meta-setting-desc.lo: clients/common/nm-meta-setting-desc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_common_libnmc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/common/libnmc_la-nm-meta-setting-desc.lo -MD -MP -MF clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-desc.Tpo -c -o clients/common/libnmc_la-nm-meta-setting-desc.lo `test -f 'clients/common/nm-meta-setting-desc.c' || echo '$(srcdir)/'`clients/common/nm-meta-setting-desc.c @@ -13153,13 +13253,6 @@ libnm-core/libnm_core_la-nm-setting-wpan.lo: libnm-core/nm-setting-wpan.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm-core/libnm_core_la-nm-setting-wpan.lo `test -f 'libnm-core/nm-setting-wpan.c' || echo '$(srcdir)/'`libnm-core/nm-setting-wpan.c -shared/libnm_core_libnm_core_la-nm-meta-setting.lo: shared/nm-meta-setting.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT shared/libnm_core_libnm_core_la-nm-meta-setting.lo -MD -MP -MF shared/$(DEPDIR)/libnm_core_libnm_core_la-nm-meta-setting.Tpo -c -o shared/libnm_core_libnm_core_la-nm-meta-setting.lo `test -f 'shared/nm-meta-setting.c' || echo '$(srcdir)/'`shared/nm-meta-setting.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) shared/$(DEPDIR)/libnm_core_libnm_core_la-nm-meta-setting.Tpo shared/$(DEPDIR)/libnm_core_libnm_core_la-nm-meta-setting.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='shared/nm-meta-setting.c' object='shared/libnm_core_libnm_core_la-nm-meta-setting.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o shared/libnm_core_libnm_core_la-nm-meta-setting.lo `test -f 'shared/nm-meta-setting.c' || echo '$(srcdir)/'`shared/nm-meta-setting.c - libnm-core/libnm_core_la-nm-connection.lo: libnm-core/nm-connection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm-core/libnm_core_la-nm-connection.lo -MD -MP -MF libnm-core/$(DEPDIR)/libnm_core_la-nm-connection.Tpo -c -o libnm-core/libnm_core_la-nm-connection.lo `test -f 'libnm-core/nm-connection.c' || echo '$(srcdir)/'`libnm-core/nm-connection.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libnm-core/$(DEPDIR)/libnm_core_la-nm-connection.Tpo libnm-core/$(DEPDIR)/libnm_core_la-nm-connection.Plo @@ -13188,6 +13281,27 @@ libnm-core/libnm_core_la-nm-errors.lo: libnm-core/nm-errors.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm-core/libnm_core_la-nm-errors.lo `test -f 'libnm-core/nm-errors.c' || echo '$(srcdir)/'`libnm-core/nm-errors.c +libnm-core/libnm_core_la-nm-keyfile-utils.lo: libnm-core/nm-keyfile-utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm-core/libnm_core_la-nm-keyfile-utils.lo -MD -MP -MF libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile-utils.Tpo -c -o libnm-core/libnm_core_la-nm-keyfile-utils.lo `test -f 'libnm-core/nm-keyfile-utils.c' || echo '$(srcdir)/'`libnm-core/nm-keyfile-utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile-utils.Tpo libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile-utils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libnm-core/nm-keyfile-utils.c' object='libnm-core/libnm_core_la-nm-keyfile-utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm-core/libnm_core_la-nm-keyfile-utils.lo `test -f 'libnm-core/nm-keyfile-utils.c' || echo '$(srcdir)/'`libnm-core/nm-keyfile-utils.c + +libnm-core/libnm_core_la-nm-keyfile.lo: libnm-core/nm-keyfile.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm-core/libnm_core_la-nm-keyfile.lo -MD -MP -MF libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile.Tpo -c -o libnm-core/libnm_core_la-nm-keyfile.lo `test -f 'libnm-core/nm-keyfile.c' || echo '$(srcdir)/'`libnm-core/nm-keyfile.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile.Tpo libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libnm-core/nm-keyfile.c' object='libnm-core/libnm_core_la-nm-keyfile.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm-core/libnm_core_la-nm-keyfile.lo `test -f 'libnm-core/nm-keyfile.c' || echo '$(srcdir)/'`libnm-core/nm-keyfile.c + +libnm-core/libnm_core_la-nm-meta-setting-base-impl.lo: libnm-core/nm-meta-setting-base-impl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm-core/libnm_core_la-nm-meta-setting-base-impl.lo -MD -MP -MF libnm-core/$(DEPDIR)/libnm_core_la-nm-meta-setting-base-impl.Tpo -c -o libnm-core/libnm_core_la-nm-meta-setting-base-impl.lo `test -f 'libnm-core/nm-meta-setting-base-impl.c' || echo '$(srcdir)/'`libnm-core/nm-meta-setting-base-impl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libnm-core/$(DEPDIR)/libnm_core_la-nm-meta-setting-base-impl.Tpo libnm-core/$(DEPDIR)/libnm_core_la-nm-meta-setting-base-impl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libnm-core/nm-meta-setting-base-impl.c' object='libnm-core/libnm_core_la-nm-meta-setting-base-impl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm-core/libnm_core_la-nm-meta-setting-base-impl.lo `test -f 'libnm-core/nm-meta-setting-base-impl.c' || echo '$(srcdir)/'`libnm-core/nm-meta-setting-base-impl.c + libnm-core/libnm_core_la-nm-property-compare.lo: libnm-core/nm-property-compare.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm-core/libnm_core_la-nm-property-compare.lo -MD -MP -MF libnm-core/$(DEPDIR)/libnm_core_la-nm-property-compare.Tpo -c -o libnm-core/libnm_core_la-nm-property-compare.lo `test -f 'libnm-core/nm-property-compare.c' || echo '$(srcdir)/'`libnm-core/nm-property-compare.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libnm-core/$(DEPDIR)/libnm_core_la-nm-property-compare.Tpo libnm-core/$(DEPDIR)/libnm_core_la-nm-property-compare.Plo @@ -13258,20 +13372,6 @@ libnm-core/libnm_crypto_nss_la-nm-crypto-nss.lo: libnm-core/nm-crypto-nss.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_libnm_crypto_nss_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm-core/libnm_crypto_nss_la-nm-crypto-nss.lo `test -f 'libnm-core/nm-crypto-nss.c' || echo '$(srcdir)/'`libnm-core/nm-crypto-nss.c -libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile-utils.lo: libnm-core/nm-keyfile/nm-keyfile-utils.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_nm_keyfile_libnm_keyfile_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile-utils.lo -MD -MP -MF libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile-utils.Tpo -c -o libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile-utils.lo `test -f 'libnm-core/nm-keyfile/nm-keyfile-utils.c' || echo '$(srcdir)/'`libnm-core/nm-keyfile/nm-keyfile-utils.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile-utils.Tpo libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile-utils.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libnm-core/nm-keyfile/nm-keyfile-utils.c' object='libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile-utils.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_nm_keyfile_libnm_keyfile_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile-utils.lo `test -f 'libnm-core/nm-keyfile/nm-keyfile-utils.c' || echo '$(srcdir)/'`libnm-core/nm-keyfile/nm-keyfile-utils.c - -libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile.lo: libnm-core/nm-keyfile/nm-keyfile.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_nm_keyfile_libnm_keyfile_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile.lo -MD -MP -MF libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile.Tpo -c -o libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile.lo `test -f 'libnm-core/nm-keyfile/nm-keyfile.c' || echo '$(srcdir)/'`libnm-core/nm-keyfile/nm-keyfile.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile.Tpo libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libnm-core/nm-keyfile/nm-keyfile.c' object='libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_nm_keyfile_libnm_keyfile_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnm-core/nm-keyfile/libnm_keyfile_la-nm-keyfile.lo `test -f 'libnm-core/nm-keyfile/nm-keyfile.c' || echo '$(srcdir)/'`libnm-core/nm-keyfile/nm-keyfile.c - libnm-core/nm-libnm-core-aux/libnm_libnm_core_aux_la-nm-libnm-core-aux.lo: libnm-core/nm-libnm-core-aux/nm-libnm-core-aux.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnm_core_nm_libnm_core_aux_libnm_libnm_core_aux_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnm-core/nm-libnm-core-aux/libnm_libnm_core_aux_la-nm-libnm-core-aux.lo -MD -MP -MF libnm-core/nm-libnm-core-aux/$(DEPDIR)/libnm_libnm_core_aux_la-nm-libnm-core-aux.Tpo -c -o libnm-core/nm-libnm-core-aux/libnm_libnm_core_aux_la-nm-libnm-core-aux.lo `test -f 'libnm-core/nm-libnm-core-aux/nm-libnm-core-aux.c' || echo '$(srcdir)/'`libnm-core/nm-libnm-core-aux/nm-libnm-core-aux.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libnm-core/nm-libnm-core-aux/$(DEPDIR)/libnm_libnm_core_aux_la-nm-libnm-core-aux.Tpo libnm-core/nm-libnm-core-aux/$(DEPDIR)/libnm_libnm_core_aux_la-nm-libnm-core-aux.Plo @@ -15624,89 +15724,19 @@ clients/cloud-setup/nm_cloud_setup-main.obj: clients/cloud-setup/main.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-main.obj `if test -f 'clients/cloud-setup/main.c'; then $(CYGPATH_W) 'clients/cloud-setup/main.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/main.c'; fi` -clients/cloud-setup/nm_cloud_setup-nm-cloud-setup-utils.o: clients/cloud-setup/nm-cloud-setup-utils.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/nm_cloud_setup-nm-cloud-setup-utils.o -MD -MP -MF clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-cloud-setup-utils.Tpo -c -o clients/cloud-setup/nm_cloud_setup-nm-cloud-setup-utils.o `test -f 'clients/cloud-setup/nm-cloud-setup-utils.c' || echo '$(srcdir)/'`clients/cloud-setup/nm-cloud-setup-utils.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-cloud-setup-utils.Tpo clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-cloud-setup-utils.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nm-cloud-setup-utils.c' object='clients/cloud-setup/nm_cloud_setup-nm-cloud-setup-utils.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-nm-cloud-setup-utils.o `test -f 'clients/cloud-setup/nm-cloud-setup-utils.c' || echo '$(srcdir)/'`clients/cloud-setup/nm-cloud-setup-utils.c - -clients/cloud-setup/nm_cloud_setup-nm-cloud-setup-utils.obj: clients/cloud-setup/nm-cloud-setup-utils.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/nm_cloud_setup-nm-cloud-setup-utils.obj -MD -MP -MF clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-cloud-setup-utils.Tpo -c -o clients/cloud-setup/nm_cloud_setup-nm-cloud-setup-utils.obj `if test -f 'clients/cloud-setup/nm-cloud-setup-utils.c'; then $(CYGPATH_W) 'clients/cloud-setup/nm-cloud-setup-utils.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nm-cloud-setup-utils.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-cloud-setup-utils.Tpo clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-cloud-setup-utils.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nm-cloud-setup-utils.c' object='clients/cloud-setup/nm_cloud_setup-nm-cloud-setup-utils.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-nm-cloud-setup-utils.obj `if test -f 'clients/cloud-setup/nm-cloud-setup-utils.c'; then $(CYGPATH_W) 'clients/cloud-setup/nm-cloud-setup-utils.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nm-cloud-setup-utils.c'; fi` - -clients/cloud-setup/nm_cloud_setup-nm-http-client.o: clients/cloud-setup/nm-http-client.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/nm_cloud_setup-nm-http-client.o -MD -MP -MF clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-http-client.Tpo -c -o clients/cloud-setup/nm_cloud_setup-nm-http-client.o `test -f 'clients/cloud-setup/nm-http-client.c' || echo '$(srcdir)/'`clients/cloud-setup/nm-http-client.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-http-client.Tpo clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-http-client.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nm-http-client.c' object='clients/cloud-setup/nm_cloud_setup-nm-http-client.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-nm-http-client.o `test -f 'clients/cloud-setup/nm-http-client.c' || echo '$(srcdir)/'`clients/cloud-setup/nm-http-client.c - -clients/cloud-setup/nm_cloud_setup-nm-http-client.obj: clients/cloud-setup/nm-http-client.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/nm_cloud_setup-nm-http-client.obj -MD -MP -MF clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-http-client.Tpo -c -o clients/cloud-setup/nm_cloud_setup-nm-http-client.obj `if test -f 'clients/cloud-setup/nm-http-client.c'; then $(CYGPATH_W) 'clients/cloud-setup/nm-http-client.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nm-http-client.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-http-client.Tpo clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-http-client.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nm-http-client.c' object='clients/cloud-setup/nm_cloud_setup-nm-http-client.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-nm-http-client.obj `if test -f 'clients/cloud-setup/nm-http-client.c'; then $(CYGPATH_W) 'clients/cloud-setup/nm-http-client.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nm-http-client.c'; fi` - -clients/cloud-setup/nm_cloud_setup-nmcs-provider.o: clients/cloud-setup/nmcs-provider.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/nm_cloud_setup-nmcs-provider.o -MD -MP -MF clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider.Tpo -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider.o `test -f 'clients/cloud-setup/nmcs-provider.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider.Tpo clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider.c' object='clients/cloud-setup/nm_cloud_setup-nmcs-provider.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider.o `test -f 'clients/cloud-setup/nmcs-provider.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider.c - -clients/cloud-setup/nm_cloud_setup-nmcs-provider.obj: clients/cloud-setup/nmcs-provider.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/nm_cloud_setup-nmcs-provider.obj -MD -MP -MF clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider.Tpo -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider.obj `if test -f 'clients/cloud-setup/nmcs-provider.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider.Tpo clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider.c' object='clients/cloud-setup/nm_cloud_setup-nmcs-provider.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider.obj `if test -f 'clients/cloud-setup/nmcs-provider.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider.c'; fi` - -clients/cloud-setup/nm_cloud_setup-nmcs-provider-ec2.o: clients/cloud-setup/nmcs-provider-ec2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/nm_cloud_setup-nmcs-provider-ec2.o -MD -MP -MF clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-ec2.Tpo -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider-ec2.o `test -f 'clients/cloud-setup/nmcs-provider-ec2.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider-ec2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-ec2.Tpo clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-ec2.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider-ec2.c' object='clients/cloud-setup/nm_cloud_setup-nmcs-provider-ec2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider-ec2.o `test -f 'clients/cloud-setup/nmcs-provider-ec2.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider-ec2.c - -clients/cloud-setup/nm_cloud_setup-nmcs-provider-ec2.obj: clients/cloud-setup/nmcs-provider-ec2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/nm_cloud_setup-nmcs-provider-ec2.obj -MD -MP -MF clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-ec2.Tpo -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider-ec2.obj `if test -f 'clients/cloud-setup/nmcs-provider-ec2.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider-ec2.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider-ec2.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-ec2.Tpo clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-ec2.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider-ec2.c' object='clients/cloud-setup/nm_cloud_setup-nmcs-provider-ec2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider-ec2.obj `if test -f 'clients/cloud-setup/nmcs-provider-ec2.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider-ec2.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider-ec2.c'; fi` - -clients/cloud-setup/nm_cloud_setup-nmcs-provider-gcp.o: clients/cloud-setup/nmcs-provider-gcp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/nm_cloud_setup-nmcs-provider-gcp.o -MD -MP -MF clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-gcp.Tpo -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider-gcp.o `test -f 'clients/cloud-setup/nmcs-provider-gcp.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider-gcp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-gcp.Tpo clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-gcp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider-gcp.c' object='clients/cloud-setup/nm_cloud_setup-nmcs-provider-gcp.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider-gcp.o `test -f 'clients/cloud-setup/nmcs-provider-gcp.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider-gcp.c - -clients/cloud-setup/nm_cloud_setup-nmcs-provider-gcp.obj: clients/cloud-setup/nmcs-provider-gcp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/nm_cloud_setup-nmcs-provider-gcp.obj -MD -MP -MF clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-gcp.Tpo -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider-gcp.obj `if test -f 'clients/cloud-setup/nmcs-provider-gcp.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider-gcp.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider-gcp.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-gcp.Tpo clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-gcp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider-gcp.c' object='clients/cloud-setup/nm_cloud_setup-nmcs-provider-gcp.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider-gcp.obj `if test -f 'clients/cloud-setup/nmcs-provider-gcp.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider-gcp.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider-gcp.c'; fi` - -clients/cloud-setup/nm_cloud_setup-nmcs-provider-azure.o: clients/cloud-setup/nmcs-provider-azure.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/nm_cloud_setup-nmcs-provider-azure.o -MD -MP -MF clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-azure.Tpo -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider-azure.o `test -f 'clients/cloud-setup/nmcs-provider-azure.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider-azure.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-azure.Tpo clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-azure.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider-azure.c' object='clients/cloud-setup/nm_cloud_setup-nmcs-provider-azure.o' libtool=no @AMDEPBACKSLASH@ +clients/cloud-setup/tests/test_cloud_setup_general-test-cloud-setup-general.o: clients/cloud-setup/tests/test-cloud-setup-general.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_tests_test_cloud_setup_general_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/tests/test_cloud_setup_general-test-cloud-setup-general.o -MD -MP -MF clients/cloud-setup/tests/$(DEPDIR)/test_cloud_setup_general-test-cloud-setup-general.Tpo -c -o clients/cloud-setup/tests/test_cloud_setup_general-test-cloud-setup-general.o `test -f 'clients/cloud-setup/tests/test-cloud-setup-general.c' || echo '$(srcdir)/'`clients/cloud-setup/tests/test-cloud-setup-general.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/tests/$(DEPDIR)/test_cloud_setup_general-test-cloud-setup-general.Tpo clients/cloud-setup/tests/$(DEPDIR)/test_cloud_setup_general-test-cloud-setup-general.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/tests/test-cloud-setup-general.c' object='clients/cloud-setup/tests/test_cloud_setup_general-test-cloud-setup-general.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider-azure.o `test -f 'clients/cloud-setup/nmcs-provider-azure.c' || echo '$(srcdir)/'`clients/cloud-setup/nmcs-provider-azure.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_tests_test_cloud_setup_general_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/tests/test_cloud_setup_general-test-cloud-setup-general.o `test -f 'clients/cloud-setup/tests/test-cloud-setup-general.c' || echo '$(srcdir)/'`clients/cloud-setup/tests/test-cloud-setup-general.c -clients/cloud-setup/nm_cloud_setup-nmcs-provider-azure.obj: clients/cloud-setup/nmcs-provider-azure.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/nm_cloud_setup-nmcs-provider-azure.obj -MD -MP -MF clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-azure.Tpo -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider-azure.obj `if test -f 'clients/cloud-setup/nmcs-provider-azure.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider-azure.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider-azure.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-azure.Tpo clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-azure.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/nmcs-provider-azure.c' object='clients/cloud-setup/nm_cloud_setup-nmcs-provider-azure.obj' libtool=no @AMDEPBACKSLASH@ +clients/cloud-setup/tests/test_cloud_setup_general-test-cloud-setup-general.obj: clients/cloud-setup/tests/test-cloud-setup-general.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_tests_test_cloud_setup_general_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/cloud-setup/tests/test_cloud_setup_general-test-cloud-setup-general.obj -MD -MP -MF clients/cloud-setup/tests/$(DEPDIR)/test_cloud_setup_general-test-cloud-setup-general.Tpo -c -o clients/cloud-setup/tests/test_cloud_setup_general-test-cloud-setup-general.obj `if test -f 'clients/cloud-setup/tests/test-cloud-setup-general.c'; then $(CYGPATH_W) 'clients/cloud-setup/tests/test-cloud-setup-general.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/tests/test-cloud-setup-general.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) clients/cloud-setup/tests/$(DEPDIR)/test_cloud_setup_general-test-cloud-setup-general.Tpo clients/cloud-setup/tests/$(DEPDIR)/test_cloud_setup_general-test-cloud-setup-general.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clients/cloud-setup/tests/test-cloud-setup-general.c' object='clients/cloud-setup/tests/test_cloud_setup_general-test-cloud-setup-general.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_nm_cloud_setup_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/nm_cloud_setup-nmcs-provider-azure.obj `if test -f 'clients/cloud-setup/nmcs-provider-azure.c'; then $(CYGPATH_W) 'clients/cloud-setup/nmcs-provider-azure.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/nmcs-provider-azure.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_cloud_setup_tests_test_cloud_setup_general_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clients/cloud-setup/tests/test_cloud_setup_general-test-cloud-setup-general.obj `if test -f 'clients/cloud-setup/tests/test-cloud-setup-general.c'; then $(CYGPATH_W) 'clients/cloud-setup/tests/test-cloud-setup-general.c'; else $(CYGPATH_W) '$(srcdir)/clients/cloud-setup/tests/test-cloud-setup-general.c'; fi` clients/common/tests/test_clients_common-test-clients-common.o: clients/common/tests/test-clients-common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clients_common_tests_test_clients_common_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clients/common/tests/test_clients_common-test-clients-common.o -MD -MP -MF clients/common/tests/$(DEPDIR)/test_clients_common-test-clients-common.Tpo -c -o clients/common/tests/test_clients_common-test-clients-common.o `test -f 'clients/common/tests/test-clients-common.c' || echo '$(srcdir)/'`clients/common/tests/test-clients-common.c @@ -17476,6 +17506,7 @@ clean-libtool: -rm -rf clients/.libs clients/_libs -rm -rf clients/cli/.libs clients/cli/_libs -rm -rf clients/cloud-setup/.libs clients/cloud-setup/_libs + -rm -rf clients/cloud-setup/tests/.libs clients/cloud-setup/tests/_libs -rm -rf clients/common/.libs clients/common/_libs -rm -rf clients/common/tests/.libs clients/common/tests/_libs -rm -rf clients/tui/.libs clients/tui/_libs @@ -17486,7 +17517,6 @@ clean-libtool: -rm -rf introspection/.libs introspection/_libs -rm -rf libnm/.libs libnm/_libs -rm -rf libnm-core/.libs libnm-core/_libs - -rm -rf libnm-core/nm-keyfile/.libs libnm-core/nm-keyfile/_libs -rm -rf libnm-core/nm-libnm-core-aux/.libs libnm-core/nm-libnm-core-aux/_libs -rm -rf libnm-core/nm-libnm-core-intern/.libs libnm-core/nm-libnm-core-intern/_libs -rm -rf libnm-core/tests/.libs libnm-core/tests/_libs @@ -18688,6 +18718,13 @@ clients/common/tests/test-libnm-core-aux.log: clients/common/tests/test-libnm-co --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +clients/cloud-setup/tests/test-cloud-setup-general.log: clients/cloud-setup/tests/test-cloud-setup-general$(EXEEXT) + @p='clients/cloud-setup/tests/test-cloud-setup-general$(EXEEXT)'; \ + b='clients/cloud-setup/tests/test-cloud-setup-general'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ @@ -18953,6 +18990,8 @@ distclean-generic: -rm -f clients/cli/$(am__dirstamp) -rm -f clients/cloud-setup/$(DEPDIR)/$(am__dirstamp) -rm -f clients/cloud-setup/$(am__dirstamp) + -rm -f clients/cloud-setup/tests/$(DEPDIR)/$(am__dirstamp) + -rm -f clients/cloud-setup/tests/$(am__dirstamp) -rm -f clients/common/$(DEPDIR)/$(am__dirstamp) -rm -f clients/common/$(am__dirstamp) -rm -f clients/common/tests/$(DEPDIR)/$(am__dirstamp) @@ -18973,8 +19012,6 @@ distclean-generic: -rm -f introspection/$(am__dirstamp) -rm -f libnm-core/$(DEPDIR)/$(am__dirstamp) -rm -f libnm-core/$(am__dirstamp) - -rm -f libnm-core/nm-keyfile/$(DEPDIR)/$(am__dirstamp) - -rm -f libnm-core/nm-keyfile/$(am__dirstamp) -rm -f libnm-core/nm-libnm-core-aux/$(DEPDIR)/$(am__dirstamp) -rm -f libnm-core/nm-libnm-core-aux/$(am__dirstamp) -rm -f libnm-core/nm-libnm-core-intern/$(DEPDIR)/$(am__dirstamp) @@ -19138,18 +19175,20 @@ distclean: distclean-recursive -rm -f clients/cli/$(DEPDIR)/nmcli-polkit-agent.Po -rm -f clients/cli/$(DEPDIR)/nmcli-settings.Po -rm -f clients/cli/$(DEPDIR)/nmcli-utils.Po + -rm -f clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-cloud-setup-utils.Po + -rm -f clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-http-client.Po + -rm -f clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-azure.Po + -rm -f clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-ec2.Po + -rm -f clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-gcp.Po + -rm -f clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider.Po -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-main.Po - -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-cloud-setup-utils.Po - -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-http-client.Po - -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-azure.Po - -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-ec2.Po - -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-gcp.Po - -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider.Po + -rm -f clients/cloud-setup/tests/$(DEPDIR)/test_cloud_setup_general-test-cloud-setup-general.Po -rm -f clients/common/$(DEPDIR)/libnmc_base_la-nm-client-utils.Plo -rm -f clients/common/$(DEPDIR)/libnmc_base_la-nm-polkit-listener.Plo -rm -f clients/common/$(DEPDIR)/libnmc_base_la-nm-secret-agent-simple.Plo -rm -f clients/common/$(DEPDIR)/libnmc_base_la-nm-vpn-helpers.Plo -rm -f clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-access.Plo + -rm -f clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-base-impl.Plo -rm -f clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-desc.Plo -rm -f clients/common/tests/$(DEPDIR)/test_clients_common-test-clients-common.Po -rm -f clients/common/tests/$(DEPDIR)/test_libnm_core_aux-test-libnm-core-aux.Po @@ -19282,6 +19321,9 @@ distclean: distclean-recursive -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-crypto.Plo -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-dbus-utils.Plo -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-errors.Plo + -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile-utils.Plo + -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile.Plo + -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-meta-setting-base-impl.Plo -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-property-compare.Plo -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-setting-6lowpan.Plo -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-setting-8021x.Plo @@ -19343,8 +19385,6 @@ distclean: distclean-recursive -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-vpn-plugin-info.Plo -rm -f libnm-core/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo -rm -f libnm-core/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo - -rm -f libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile-utils.Plo - -rm -f libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile.Plo -rm -f libnm-core/nm-libnm-core-aux/$(DEPDIR)/libnm_libnm_core_aux_la-nm-libnm-core-aux.Plo -rm -f libnm-core/nm-libnm-core-intern/$(DEPDIR)/libnm_libnm_core_intern_la-nm-auth-subject.Plo -rm -f libnm-core/nm-libnm-core-intern/$(DEPDIR)/libnm_libnm_core_intern_la-nm-libnm-core-utils.Plo @@ -19414,8 +19454,6 @@ distclean: distclean-recursive -rm -f libnm/tests/$(DEPDIR)/test_nm_client-test-nm-client.Po -rm -f libnm/tests/$(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Po -rm -f libnm/tests/$(DEPDIR)/test_secret_agent-test-secret-agent.Po - -rm -f shared/$(DEPDIR)/clients_common_libnmc_la-nm-meta-setting.Plo - -rm -f shared/$(DEPDIR)/libnm_core_libnm_core_la-nm-meta-setting.Plo -rm -f shared/$(DEPDIR)/libnm_tests_test_nm_client-nm-test-utils-impl.Po -rm -f shared/$(DEPDIR)/libnm_tests_test_remote_settings_client-nm-test-utils-impl.Po -rm -f shared/$(DEPDIR)/libnm_tests_test_secret_agent-nm-test-utils-impl.Po @@ -19797,18 +19835,20 @@ maintainer-clean: maintainer-clean-recursive -rm -f clients/cli/$(DEPDIR)/nmcli-polkit-agent.Po -rm -f clients/cli/$(DEPDIR)/nmcli-settings.Po -rm -f clients/cli/$(DEPDIR)/nmcli-utils.Po + -rm -f clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-cloud-setup-utils.Po + -rm -f clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nm-http-client.Po + -rm -f clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-azure.Po + -rm -f clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-ec2.Po + -rm -f clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider-gcp.Po + -rm -f clients/cloud-setup/$(DEPDIR)/libnm_cloud_setup_core_a-nmcs-provider.Po -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-main.Po - -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-cloud-setup-utils.Po - -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nm-http-client.Po - -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-azure.Po - -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-ec2.Po - -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider-gcp.Po - -rm -f clients/cloud-setup/$(DEPDIR)/nm_cloud_setup-nmcs-provider.Po + -rm -f clients/cloud-setup/tests/$(DEPDIR)/test_cloud_setup_general-test-cloud-setup-general.Po -rm -f clients/common/$(DEPDIR)/libnmc_base_la-nm-client-utils.Plo -rm -f clients/common/$(DEPDIR)/libnmc_base_la-nm-polkit-listener.Plo -rm -f clients/common/$(DEPDIR)/libnmc_base_la-nm-secret-agent-simple.Plo -rm -f clients/common/$(DEPDIR)/libnmc_base_la-nm-vpn-helpers.Plo -rm -f clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-access.Plo + -rm -f clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-base-impl.Plo -rm -f clients/common/$(DEPDIR)/libnmc_la-nm-meta-setting-desc.Plo -rm -f clients/common/tests/$(DEPDIR)/test_clients_common-test-clients-common.Po -rm -f clients/common/tests/$(DEPDIR)/test_libnm_core_aux-test-libnm-core-aux.Po @@ -19941,6 +19981,9 @@ maintainer-clean: maintainer-clean-recursive -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-crypto.Plo -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-dbus-utils.Plo -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-errors.Plo + -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile-utils.Plo + -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-keyfile.Plo + -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-meta-setting-base-impl.Plo -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-property-compare.Plo -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-setting-6lowpan.Plo -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-setting-8021x.Plo @@ -20002,8 +20045,6 @@ maintainer-clean: maintainer-clean-recursive -rm -f libnm-core/$(DEPDIR)/libnm_core_la-nm-vpn-plugin-info.Plo -rm -f libnm-core/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo -rm -f libnm-core/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo - -rm -f libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile-utils.Plo - -rm -f libnm-core/nm-keyfile/$(DEPDIR)/libnm_keyfile_la-nm-keyfile.Plo -rm -f libnm-core/nm-libnm-core-aux/$(DEPDIR)/libnm_libnm_core_aux_la-nm-libnm-core-aux.Plo -rm -f libnm-core/nm-libnm-core-intern/$(DEPDIR)/libnm_libnm_core_intern_la-nm-auth-subject.Plo -rm -f libnm-core/nm-libnm-core-intern/$(DEPDIR)/libnm_libnm_core_intern_la-nm-libnm-core-utils.Plo @@ -20073,8 +20114,6 @@ maintainer-clean: maintainer-clean-recursive -rm -f libnm/tests/$(DEPDIR)/test_nm_client-test-nm-client.Po -rm -f libnm/tests/$(DEPDIR)/test_remote_settings_client-test-remote-settings-client.Po -rm -f libnm/tests/$(DEPDIR)/test_secret_agent-test-secret-agent.Po - -rm -f shared/$(DEPDIR)/clients_common_libnmc_la-nm-meta-setting.Plo - -rm -f shared/$(DEPDIR)/libnm_core_libnm_core_la-nm-meta-setting.Plo -rm -f shared/$(DEPDIR)/libnm_tests_test_nm_client-nm-test-utils-impl.Po -rm -f shared/$(DEPDIR)/libnm_tests_test_remote_settings_client-nm-test-utils-impl.Po -rm -f shared/$(DEPDIR)/libnm_tests_test_secret_agent-nm-test-utils-impl.Po @@ -20564,8 +20603,6 @@ $(libnm_core_nm_libnm_core_intern_libnm_libnm_core_intern_la_OBJECTS): $(libnm_c $(libnm_core_nm_libnm_core_aux_libnm_libnm_core_aux_la_OBJECTS): $(libnm_core_lib_h_pub_mkenums) -$(libnm_core_nm_keyfile_libnm_keyfile_la_OBJECTS): $(libnm_core_lib_h_pub_mkenums) - $(libnm_nm_libnm_aux_libnm_libnm_aux_la_OBJECTS): $(libnm_core_lib_h_pub_mkenums) $(libnm_nm_libnm_aux_libnm_libnm_aux_la_OBJECTS): $(libnm_lib_h_pub_mkenums) @@ -20911,6 +20948,9 @@ $(clients_cli_generate_docs_nm_settings_nmcli_OBJECTS): $(libnm_lib_h_pub_mkenum @BUILD_NMTUI_TRUE@ rm -f "$(DESTDIR)$(bindir)/$$link"; \ @BUILD_NMTUI_TRUE@ done +@BUILD_NM_CLOUD_SETUP_TRUE@$(clients_cloud_setup_libnm_cloud_setup_core_a_OBJECTS): $(libnm_core_lib_h_pub_mkenums) +@BUILD_NM_CLOUD_SETUP_TRUE@$(clients_cloud_setup_libnm_cloud_setup_core_a_OBJECTS): $(libnm_lib_h_pub_mkenums) + @BUILD_NM_CLOUD_SETUP_TRUE@$(clients_cloud_setup_nm_cloud_setup_OBJECTS): $(libnm_core_lib_h_pub_mkenums) @BUILD_NM_CLOUD_SETUP_TRUE@$(clients_cloud_setup_nm_cloud_setup_OBJECTS): $(libnm_lib_h_pub_mkenums) @@ -20925,6 +20965,9 @@ $(clients_cli_generate_docs_nm_settings_nmcli_OBJECTS): $(libnm_lib_h_pub_mkenum @BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@ rm -f "$(DESTDIR)$(nmlibdir)/dispatcher.d/no-wait.d/90-nm-cloud-setup.sh" @BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@ rm -f "$(DESTDIR)$(nmlibdir)/dispatcher.d/90-nm-cloud-setup.sh" +@BUILD_NM_CLOUD_SETUP_TRUE@$(clients_cloud_setup_tests_test_cloud_setup_general_OBJECTS): $(libnm_core_lib_h_pub_mkenums) +@BUILD_NM_CLOUD_SETUP_TRUE@$(clients_cloud_setup_tests_test_cloud_setup_general_OBJECTS): $(libnm_lib_h_pub_mkenums) + ############################################################################### # clients/tests ############################################################################### @@ -21011,6 +21054,9 @@ $(examples_C_glib_list_connections_libnm_OBJECTS): $(libnm_core_lib_h_pub_mkenum ############################################################################### +check-tree: + "$(top_srcdir)/tools/check-tree.sh" + check-po-msgfmt: @echo "check-po-msgfmt: check $(top_srcdir)/po/*.po files with msgfmt -vc" @for f in "$(top_srcdir)/po"/*.po ; do \ diff --git a/NEWS b/NEWS index fd62e4d..5ba8533 100644 --- a/NEWS +++ b/NEWS @@ -8,14 +8,27 @@ The API is subject to change and not guaranteed to be compatible with the later release. USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE! -* libnm: nm_setting_bond_add_option() no longer validates the - option that is set. Instead, use nm_connection_verify() to validate - the profile. * Increase timeout of NetworkManager-wait-online.service to 60 seconds. * Add "ipv4.dhcp-client-id=ipv6-duid" option for RFC4361. * The dhcpcd plugin now requires a minimum version of dhcpcd-9.3.3 with the --noconfigure option. Using an older version will cause dhcpcd to exit with a status code of 1. +* Support building against musl libc. +* Support new ethtool offload features. +* Add support for WPA3 Enterprise Suite-B 192 bit mode. +* Add support for handling Veth devices. +* New hostname settings for controlling configuring the hostname from + reverse DNS lookup and from DHCP. +* OVS: support configuring external-ids. +* libnm: nm_setting_bond_add_option() no longer validates the + option that is set. Instead, use nm_connection_verify() to validate + the profile. +* libnm: add support for reading/writing keyfile format. +* initrd: support for rd.net.timeout.carrier option. +* initrd: support new ip method "link6" for IPv6 link-local only. +* ci: use ci-templates for containers on gitlab-ci. +* ci: test build against Alpine Linux on gitlab-ci. +* Many bugfixes and improvements. ============================================= NetworkManager-1.28 diff --git a/clients/cli/agent.c b/clients/cli/agent.c index c8ab2a6..a3c60c4 100644 --- a/clients/cli/agent.c +++ b/clients/cli/agent.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include #include diff --git a/clients/cli/common.c b/clients/cli/common.c index f60a732..934ff70 100644 --- a/clients/cli/common.c +++ b/clients/cli/common.c @@ -3,7 +3,7 @@ * Copyright (C) 2012 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "common.h" diff --git a/clients/cli/connections.c b/clients/cli/connections.c index 805e765..ee7b8fb 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "connections.h" diff --git a/clients/cli/devices.c b/clients/cli/devices.c index 4051ff8..eea8265 100644 --- a/clients/cli/devices.c +++ b/clients/cli/devices.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "devices.h" diff --git a/clients/cli/general.c b/clients/cli/general.c index d1673be..1dae57e 100644 --- a/clients/cli/general.c +++ b/clients/cli/general.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include diff --git a/clients/cli/generate-docs-nm-settings-nmcli.c b/clients/cli/generate-docs-nm-settings-nmcli.c index aa40268..d277b13 100644 --- a/clients/cli/generate-docs-nm-settings-nmcli.c +++ b/clients/cli/generate-docs-nm-settings-nmcli.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-meta-setting-desc.h" diff --git a/clients/cli/generate-docs-nm-settings-nmcli.xml b/clients/cli/generate-docs-nm-settings-nmcli.xml index aad43c8..1044ae0 100644 --- a/clients/cli/generate-docs-nm-settings-nmcli.xml +++ b/clients/cli/generate-docs-nm-settings-nmcli.xml @@ -145,9 +145,9 @@ + description="Specifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified." /> + description="Specifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details." /> + @@ -467,12 +468,15 @@ + + + @@ -486,6 +490,7 @@ + @@ -498,6 +503,7 @@ + diff --git a/clients/cli/generate-docs-nm-settings-nmcli.xml.in b/clients/cli/generate-docs-nm-settings-nmcli.xml.in index aad43c8..1044ae0 100644 --- a/clients/cli/generate-docs-nm-settings-nmcli.xml.in +++ b/clients/cli/generate-docs-nm-settings-nmcli.xml.in @@ -145,9 +145,9 @@ + description="Specifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified." /> + description="Specifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details." /> + @@ -467,12 +468,15 @@ + + + @@ -486,6 +490,7 @@ + @@ -498,6 +503,7 @@ + diff --git a/clients/cli/meson.build b/clients/cli/meson.build index 5d07c7f..f8e6a82 100644 --- a/clients/cli/meson.build +++ b/clients/cli/meson.build @@ -27,7 +27,9 @@ executable( readline_dep, libnm_libnm_aux_dep, ], - c_args: clients_c_flags + ['-DG_LOG_DOMAIN="@0@"'.format('nmcli')], + c_args: [ + '-DG_LOG_DOMAIN="nmcli"', + ], link_args: ldflags_linker_script_binary, link_depends: linker_script_binary, install: true, @@ -45,7 +47,9 @@ generate_docs_nm_settings_nmcli = executable( libnmc_dep, libnm_libnm_aux_dep, ], - c_args: clients_c_flags + ['-DG_LOG_DOMAIN="@0@"'.format('nmcli')], + c_args: [ + '-DG_LOG_DOMAIN="nmcli"', + ], link_args: ldflags_linker_script_binary, link_depends: linker_script_binary, ) @@ -61,7 +65,11 @@ if enable_docs test( 'check-local-generate-docs-nm-settings-nmcli', find_program(join_paths(source_root, 'tools', 'check-compare-generated.sh')), - args: [source_root, build_root, 'clients/cli/generate-docs-nm-settings-nmcli.xml'], + args: [ + source_root, + build_root, + 'clients/cli/generate-docs-nm-settings-nmcli.xml', + ], ) else settings_docs_source = configure_file( diff --git a/clients/cli/nmcli.c b/clients/cli/nmcli.c index c21e480..3945721 100644 --- a/clients/cli/nmcli.c +++ b/clients/cli/nmcli.c @@ -4,7 +4,7 @@ * Copyright (C) 2010 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmcli.h" diff --git a/clients/cli/polkit-agent.c b/clients/cli/polkit-agent.c index e662942..2f07a27 100644 --- a/clients/cli/polkit-agent.c +++ b/clients/cli/polkit-agent.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "polkit-agent.h" diff --git a/clients/cli/settings.c b/clients/cli/settings.c index c479fc5..2c1037f 100644 --- a/clients/cli/settings.c +++ b/clients/cli/settings.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "settings.h" diff --git a/clients/cli/settings.h b/clients/cli/settings.h index f759d67..f103b8f 100644 --- a/clients/cli/settings.h +++ b/clients/cli/settings.h @@ -6,7 +6,6 @@ #ifndef NMC_SETTINGS_H #define NMC_SETTINGS_H -#include "nm-meta-setting.h" #include "nm-meta-setting-desc.h" #include "nmcli.h" diff --git a/clients/cli/utils.c b/clients/cli/utils.c index 8278655..0a62c35 100644 --- a/clients/cli/utils.c +++ b/clients/cli/utils.c @@ -4,7 +4,7 @@ * Copyright (C) 2010 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "utils.h" diff --git a/clients/cloud-setup/main.c b/clients/cloud-setup/main.c index 235f25b..0659017 100644 --- a/clients/cloud-setup/main.c +++ b/clients/cloud-setup/main.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-libnm-aux/nm-libnm-aux.h" diff --git a/clients/cloud-setup/meson.build b/clients/cloud-setup/meson.build index 70a9d57..581dde6 100644 --- a/clients/cloud-setup/meson.build +++ b/clients/cloud-setup/meson.build @@ -1,7 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -name = 'nm-cloud-setup' - if install_systemdunitdir nm_cloud_setup_service = configure_file( @@ -23,30 +21,54 @@ if install_systemdunitdir endif -sources = files( - 'main.c', - 'nm-cloud-setup-utils.c', - 'nm-http-client.c', - 'nmcs-provider-ec2.c', - 'nmcs-provider-gcp.c', - 'nmcs-provider-azure.c', - 'nmcs-provider.c', +libnm_cloud_setup_core = static_library( + 'nm-cloud-setup-core', + sources: files( + 'nm-cloud-setup-utils.c', + 'nm-http-client.c', + 'nmcs-provider-ec2.c', + 'nmcs-provider-gcp.c', + 'nmcs-provider-azure.c', + 'nmcs-provider.c', + ), + dependencies: [ + libnmc_base_dep, + libnmc_dep, + libcurl_dep, + libnm_libnm_aux_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="nm-cloud-setup"', + ], +) + +libnm_cloud_setup_core_dep = declare_dependency( + include_directories: include_directories('.'), + link_with: libnm_cloud_setup_core, ) executable( - name, - sources, + 'nm-cloud-setup', + files( + 'main.c', + ), dependencies: [ libnmc_base_dep, libnmc_dep, libcurl_dep, libnm_libnm_aux_dep, + libnm_cloud_setup_core_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="nm-cloud-setup"', ], - c_args: clients_c_flags + - ['-DG_LOG_DOMAIN="@0@"'.format(name)], link_with: libnm_systemd_logging_stub, link_args: ldflags_linker_script_binary, link_depends: linker_script_binary, install: true, install_dir: nm_libexecdir, ) + +if enable_tests + subdir('tests') +endif diff --git a/clients/cloud-setup/nm-cloud-setup-utils.c b/clients/cloud-setup/nm-cloud-setup-utils.c index 95a84d1..f5550a1 100644 --- a/clients/cloud-setup/nm-cloud-setup-utils.c +++ b/clients/cloud-setup/nm-cloud-setup-utils.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-cloud-setup-utils.h" @@ -704,7 +704,7 @@ nmcs_setting_ip_replace_ipv4_addresses(NMSettingIPConfig *s_ip, i_next++; } - if (any_changes) { + if (!any_changes) { while (i_next < num) { nm_setting_ip_config_remove_address(s_ip, --num); any_changes = TRUE; diff --git a/clients/cloud-setup/nm-http-client.c b/clients/cloud-setup/nm-http-client.c index 529a77f..144513f 100644 --- a/clients/cloud-setup/nm-http-client.c +++ b/clients/cloud-setup/nm-http-client.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-http-client.h" diff --git a/clients/cloud-setup/nmcs-provider-azure.c b/clients/cloud-setup/nmcs-provider-azure.c index e55ecc9..0a5d522 100644 --- a/clients/cloud-setup/nmcs-provider-azure.c +++ b/clients/cloud-setup/nmcs-provider-azure.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmcs-provider-azure.h" diff --git a/clients/cloud-setup/nmcs-provider-ec2.c b/clients/cloud-setup/nmcs-provider-ec2.c index 49b909b..1e06003 100644 --- a/clients/cloud-setup/nmcs-provider-ec2.c +++ b/clients/cloud-setup/nmcs-provider-ec2.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmcs-provider-ec2.h" diff --git a/clients/cloud-setup/nmcs-provider-gcp.c b/clients/cloud-setup/nmcs-provider-gcp.c index 425621b..1deaea1 100644 --- a/clients/cloud-setup/nmcs-provider-gcp.c +++ b/clients/cloud-setup/nmcs-provider-gcp.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmcs-provider-gcp.h" diff --git a/clients/cloud-setup/nmcs-provider.c b/clients/cloud-setup/nmcs-provider.c index 6512b76..c700d8e 100644 --- a/clients/cloud-setup/nmcs-provider.c +++ b/clients/cloud-setup/nmcs-provider.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmcs-provider.h" diff --git a/clients/cloud-setup/tests/meson.build b/clients/cloud-setup/tests/meson.build new file mode 100644 index 0000000..1c5e6ec --- /dev/null +++ b/clients/cloud-setup/tests/meson.build @@ -0,0 +1,20 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +exe = executable( + 'test-cloud-setup-general', + 'test-cloud-setup-general.c', + dependencies: [ + libnmc_base_dep, + libnmc_dep, + libnm_cloud_setup_core_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="test"', + ], +) + +test( + 'clients/cloud-setup/tests/test-cloud-setup-general', + test_script, + args: test_args + [exe.full_path()], +) diff --git a/clients/cloud-setup/tests/test-cloud-setup-general.c b/clients/cloud-setup/tests/test-cloud-setup-general.c new file mode 100644 index 0000000..63f3c13 --- /dev/null +++ b/clients/cloud-setup/tests/test-cloud-setup-general.c @@ -0,0 +1,117 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "libnm/nm-default-client.h" + +#include "nm-cloud-setup-utils.h" +#include "nm-libnm-core-intern/nm-libnm-core-utils.h" + +#include "nm-utils/nm-test-utils.h" + +/*****************************************************************************/ + +static NMSettingIPConfig * +_ri4a_new_s_ip(const char *const *addrs) +{ + NMSettingIPConfig *s_ip; + + s_ip = NM_SETTING_IP_CONFIG(nm_setting_ip4_config_new()); + + for (; addrs && addrs[0]; addrs++) { + nm_auto_unref_ip_address NMIPAddress *a = nmtst_ip_address_new(AF_INET, addrs[0]); + + nm_setting_ip_config_add_address(s_ip, a); + } + return s_ip; +} + +static GPtrArray * +_ri4a_new_arr(const char *const *addrs) +{ + GPtrArray *arr; + + arr = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref); + + for (; addrs && addrs[0]; addrs++) + g_ptr_array_add(arr, nmtst_ip_address_new(AF_INET, addrs[0])); + + return arr; +} + +static void +_test_ri4a(const char *const *addrs_before, const char *const *addrs_new) +{ + gs_unref_object NMSettingIPConfig *s_ip = NULL; + gs_unref_ptrarray GPtrArray *arr = NULL; + const gsize n = NM_PTRARRAY_LEN(addrs_new); + gboolean changed; + gsize i; + + s_ip = _ri4a_new_s_ip(addrs_before); + arr = _ri4a_new_arr(addrs_new); + + g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip), + ==, + NM_PTRARRAY_LEN(addrs_before)); + g_assert_cmpint(arr->len, ==, n); + + changed = nmcs_setting_ip_replace_ipv4_addresses(s_ip, (NMIPAddress **) arr->pdata, arr->len); + + g_assert_cmpint(changed, !=, nm_utils_strv_equal(addrs_before, addrs_new)); + g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip), ==, n); + + for (i = 0; i < n; i++) { + NMIPAddress *a = arr->pdata[i]; + NMIPAddress *b = nm_setting_ip_config_get_address(s_ip, i); + + if (nmtst_get_rand_bool()) + NM_SWAP(&a, &b); + + g_assert(nm_ip_address_cmp_full(a, b, NM_IP_ADDRESS_CMP_FLAGS_WITH_ATTRS) == 0); + } +} + +static void +test_replace_ipv4_addresses(void) +{ + const char *const *const LISTS[] = { + NM_MAKE_STRV(), + NM_MAKE_STRV("192.168.5.1/24"), + NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24"), + NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24", "192.168.5.3/24"), + NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24", "192.168.5.3/24", "192.168.5.4/24"), + }; + int i_run; + + for (i_run = 0; i_run < 20; i_run++) { + gs_free const char **addrs_before = NULL; + gs_free const char **addrs_new = NULL; + + addrs_before = nmtst_rand_perm_strv(LISTS[nmtst_get_rand_uint32() % G_N_ELEMENTS(LISTS)]); + addrs_new = nmtst_rand_perm_strv(LISTS[nmtst_get_rand_uint32() % G_N_ELEMENTS(LISTS)]); + + _test_ri4a(addrs_before, addrs_new); + } + + _test_ri4a(NM_MAKE_STRV(), NM_MAKE_STRV()); + _test_ri4a(NM_MAKE_STRV(), NM_MAKE_STRV("192.168.5.1/24")); + _test_ri4a(NM_MAKE_STRV(), NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24")); + _test_ri4a(NM_MAKE_STRV("192.168.5.1/24"), NM_MAKE_STRV()); + _test_ri4a(NM_MAKE_STRV("192.168.5.1/24"), NM_MAKE_STRV("192.168.5.1/24")); + _test_ri4a(NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24"), NM_MAKE_STRV()); + _test_ri4a(NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24"), NM_MAKE_STRV("192.168.5.1/24")); + _test_ri4a(NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24"), NM_MAKE_STRV("192.168.5.2/24")); +} + +/*****************************************************************************/ + +NMTST_DEFINE(); + +int +main(int argc, char **argv) +{ + nmtst_init(&argc, &argv, TRUE); + + g_test_add_func("/cloud-setup/general/replace-ipv4-addresses", test_replace_ipv4_addresses); + + return g_test_run(); +} diff --git a/clients/common/meson.build b/clients/common/meson.build index 6c1997a..bf591b5 100644 --- a/clients/common/meson.build +++ b/clients/common/meson.build @@ -2,72 +2,87 @@ common_inc = include_directories('.') -common_deps = [ - libnm_dep, - libnm_nm_default_dep, -] - -common_c_flags = clients_c_flags + ['-DG_LOG_DOMAIN="libnmc"'] - -sources = files( - 'nm-client-utils.c', - 'nm-secret-agent-simple.c', - 'nm-vpn-helpers.c', - 'nm-polkit-listener.c', -) - libnmc_base = static_library( 'nmc-base', - sources: sources, - dependencies: common_deps, - c_args: common_c_flags, + sources: files( + 'nm-client-utils.c', + 'nm-secret-agent-simple.c', + 'nm-vpn-helpers.c', + 'nm-polkit-listener.c', + ), + dependencies: [ + libnm_dep, + libnm_nm_default_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="libnmc"', + ], ) libnmc_base_dep = declare_dependency( include_directories: common_inc, - dependencies: common_deps, + dependencies: [ + libnm_dep, + libnm_nm_default_dep, + ], link_with: libnmc_base, ) -settings_docs = 'settings-docs.h' - if enable_docs settings_docs_source = custom_target( - settings_docs, + 'settings-docs.h', input: nm_settings_docs_xml_gir, - output: settings_docs, - command: [xsltproc, '--output', '@OUTPUT@', join_paths(meson.current_source_dir(), 'settings-docs.xsl'), '@INPUT@'], + output: 'settings-docs.h', + command: [ + xsltproc, + '--output', + '@OUTPUT@', + join_paths(meson.current_source_dir(), 'settings-docs.xsl'), + '@INPUT@', + ], ) test( 'check-settings-docs', find_program(join_paths(source_root, 'tools', 'check-compare-generated.sh')), - args: [source_root, build_root, 'clients/common/' + settings_docs], + args: [ + source_root, + build_root, + 'clients/common/settings-docs.h', + ], ) else settings_docs_source = configure_file( - input: settings_docs + '.in', + input: 'settings-docs.h.in', output: '@BASENAME@', configuration: configuration_data(), ) endif -sources = nm_meta_setting_source + [settings_docs_source] + files( - 'nm-meta-setting-access.c', - 'nm-meta-setting-desc.c', -) - libnmc = static_library( 'nmc', - sources: sources, - dependencies: common_deps + [libnm_libnm_core_aux_dep], - c_args: c_flags, + sources: [settings_docs_source] + files( + 'nm-meta-setting-access.c', + 'nm-meta-setting-base-impl.c', + 'nm-meta-setting-desc.c', + ), + dependencies: [ + libnm_dep, + libnm_nm_default_dep, + libnm_libnm_core_aux_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="libnmc"', + ], link_depends: settings_docs_source, ) libnmc_dep = declare_dependency( include_directories: common_inc, - dependencies: common_deps, + dependencies: [ + libnm_dep, + libnm_nm_default_dep, + ], link_with: libnmc, ) diff --git a/clients/common/nm-client-utils.c b/clients/common/nm-client-utils.c index f1ccc65..0e1a6bf 100644 --- a/clients/common/nm-client-utils.c +++ b/clients/common/nm-client-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-client-utils.h" diff --git a/clients/common/nm-client-utils.h b/clients/common/nm-client-utils.h index b88950e..d6f1634 100644 --- a/clients/common/nm-client-utils.h +++ b/clients/common/nm-client-utils.h @@ -6,7 +6,7 @@ #ifndef __NM_CLIENT_UTILS_H__ #define __NM_CLIENT_UTILS_H__ -#include "nm-meta-setting.h" +#include "nm-meta-setting-desc.h" #include "nm-active-connection.h" #include "nm-device.h" #include "nm-libnm-core-intern/nm-libnm-core-utils.h" diff --git a/clients/common/nm-meta-setting-access.c b/clients/common/nm-meta-setting-access.c index 873e59f..dd493f2 100644 --- a/clients/common/nm-meta-setting-access.c +++ b/clients/common/nm-meta-setting-access.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-meta-setting-access.h" diff --git a/clients/common/nm-meta-setting-access.h b/clients/common/nm-meta-setting-access.h index 8dbd45d..81aa3b6 100644 --- a/clients/common/nm-meta-setting-access.h +++ b/clients/common/nm-meta-setting-access.h @@ -6,7 +6,6 @@ #ifndef _NM_META_SETTING_ACCESS_H__ #define _NM_META_SETTING_ACCESS_H__ -#include "nm-meta-setting.h" #include "nm-meta-setting-desc.h" /*****************************************************************************/ diff --git a/clients/common/nm-meta-setting-base-impl.c b/clients/common/nm-meta-setting-base-impl.c new file mode 100644 index 0000000..523c0d5 --- /dev/null +++ b/clients/common/nm-meta-setting-base-impl.c @@ -0,0 +1,641 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2017 - 2018 Red Hat, Inc. + */ + +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" + +#include "nm-meta-setting-base.h" + +#include "nm-setting-6lowpan.h" +#include "nm-setting-8021x.h" +#include "nm-setting-adsl.h" +#include "nm-setting-bluetooth.h" +#include "nm-setting-bond.h" +#include "nm-setting-bridge-port.h" +#include "nm-setting-bridge.h" +#include "nm-setting-cdma.h" +#include "nm-setting-connection.h" +#include "nm-setting-dcb.h" +#include "nm-setting-dummy.h" +#include "nm-setting-ethtool.h" +#include "nm-setting-generic.h" +#include "nm-setting-gsm.h" +#include "nm-setting-hostname.h" +#include "nm-setting-infiniband.h" +#include "nm-setting-ip-config.h" +#include "nm-setting-ip-tunnel.h" +#include "nm-setting-ip4-config.h" +#include "nm-setting-ip6-config.h" +#include "nm-setting-macsec.h" +#include "nm-setting-macvlan.h" +#include "nm-setting-match.h" +#include "nm-setting-olpc-mesh.h" +#include "nm-setting-ovs-bridge.h" +#include "nm-setting-ovs-interface.h" +#include "nm-setting-ovs-dpdk.h" +#include "nm-setting-ovs-external-ids.h" +#include "nm-setting-ovs-patch.h" +#include "nm-setting-ovs-port.h" +#include "nm-setting-ppp.h" +#include "nm-setting-pppoe.h" +#include "nm-setting-proxy.h" +#include "nm-setting-serial.h" +#include "nm-setting-tc-config.h" +#include "nm-setting-team-port.h" +#include "nm-setting-team.h" +#include "nm-setting-tun.h" +#include "nm-setting-user.h" +#include "nm-setting-veth.h" +#include "nm-setting-vlan.h" +#include "nm-setting-vpn.h" +#include "nm-setting-vrf.h" +#include "nm-setting-vxlan.h" +#include "nm-setting-wifi-p2p.h" +#include "nm-setting-wimax.h" +#include "nm-setting-wired.h" +#include "nm-setting-wireguard.h" +#include "nm-setting-wireless-security.h" +#include "nm-setting-wireless.h" +#include "nm-setting-wpan.h" + +/*****************************************************************************/ + +const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = { + +#define _D(_scheme_type, ...) [(_scheme_type)] = {.scheme_type = (_scheme_type), __VA_ARGS__} + + _D(NM_SETTING_802_1X_SCHEME_TYPE_UNKNOWN), + + _D(NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT, + .setting_key = NM_SETTING_802_1X_CA_CERT, + .scheme_func = nm_setting_802_1x_get_ca_cert_scheme, + .format_func = NULL, + .path_func = nm_setting_802_1x_get_ca_cert_path, + .blob_func = nm_setting_802_1x_get_ca_cert_blob, + .uri_func = nm_setting_802_1x_get_ca_cert_uri, + .passwd_func = nm_setting_802_1x_get_ca_cert_password, + .pwflag_func = nm_setting_802_1x_get_ca_cert_password_flags, + .set_cert_func = nm_setting_802_1x_set_ca_cert, + .file_suffix = "ca-cert", ), + + _D(NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CA_CERT, + .setting_key = NM_SETTING_802_1X_PHASE2_CA_CERT, + .scheme_func = nm_setting_802_1x_get_phase2_ca_cert_scheme, + .format_func = NULL, + .path_func = nm_setting_802_1x_get_phase2_ca_cert_path, + .blob_func = nm_setting_802_1x_get_phase2_ca_cert_blob, + .uri_func = nm_setting_802_1x_get_phase2_ca_cert_uri, + .passwd_func = nm_setting_802_1x_get_phase2_ca_cert_password, + .pwflag_func = nm_setting_802_1x_get_phase2_ca_cert_password_flags, + .set_cert_func = nm_setting_802_1x_set_phase2_ca_cert, + .file_suffix = "inner-ca-cert", ), + + _D(NM_SETTING_802_1X_SCHEME_TYPE_CLIENT_CERT, + .setting_key = NM_SETTING_802_1X_CLIENT_CERT, + .scheme_func = nm_setting_802_1x_get_client_cert_scheme, + .format_func = NULL, + .path_func = nm_setting_802_1x_get_client_cert_path, + .blob_func = nm_setting_802_1x_get_client_cert_blob, + .uri_func = nm_setting_802_1x_get_client_cert_uri, + .passwd_func = nm_setting_802_1x_get_client_cert_password, + .pwflag_func = nm_setting_802_1x_get_client_cert_password_flags, + .set_cert_func = nm_setting_802_1x_set_client_cert, + .file_suffix = "client-cert", ), + + _D(NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CLIENT_CERT, + .setting_key = NM_SETTING_802_1X_PHASE2_CLIENT_CERT, + .scheme_func = nm_setting_802_1x_get_phase2_client_cert_scheme, + .format_func = NULL, + .path_func = nm_setting_802_1x_get_phase2_client_cert_path, + .blob_func = nm_setting_802_1x_get_phase2_client_cert_blob, + .uri_func = nm_setting_802_1x_get_phase2_client_cert_uri, + .passwd_func = nm_setting_802_1x_get_phase2_client_cert_password, + .pwflag_func = nm_setting_802_1x_get_phase2_client_cert_password_flags, + .set_cert_func = nm_setting_802_1x_set_phase2_client_cert, + .file_suffix = "inner-client-cert", ), + + _D(NM_SETTING_802_1X_SCHEME_TYPE_PRIVATE_KEY, + .setting_key = NM_SETTING_802_1X_PRIVATE_KEY, + .scheme_func = nm_setting_802_1x_get_private_key_scheme, + .format_func = nm_setting_802_1x_get_private_key_format, + .path_func = nm_setting_802_1x_get_private_key_path, + .blob_func = nm_setting_802_1x_get_private_key_blob, + .uri_func = nm_setting_802_1x_get_private_key_uri, + .passwd_func = nm_setting_802_1x_get_private_key_password, + .pwflag_func = nm_setting_802_1x_get_private_key_password_flags, + .set_private_key_func = nm_setting_802_1x_set_private_key, + .file_suffix = "private-key", + .is_secret = TRUE, ), + + _D(NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_PRIVATE_KEY, + .setting_key = NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, + .scheme_func = nm_setting_802_1x_get_phase2_private_key_scheme, + .format_func = nm_setting_802_1x_get_phase2_private_key_format, + .path_func = nm_setting_802_1x_get_phase2_private_key_path, + .blob_func = nm_setting_802_1x_get_phase2_private_key_blob, + .uri_func = nm_setting_802_1x_get_phase2_private_key_uri, + .passwd_func = nm_setting_802_1x_get_phase2_private_key_password, + .pwflag_func = nm_setting_802_1x_get_phase2_private_key_password_flags, + .set_private_key_func = nm_setting_802_1x_set_phase2_private_key, + .file_suffix = "inner-private-key", + .is_secret = TRUE, ), + +#undef _D +}; + +/*****************************************************************************/ + +const NMMetaSettingInfo nm_meta_setting_infos[] = { + [NM_META_SETTING_TYPE_6LOWPAN] = + { + .meta_type = NM_META_SETTING_TYPE_6LOWPAN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_6LOWPAN_SETTING_NAME, + .get_setting_gtype = nm_setting_6lowpan_get_type, + }, + [NM_META_SETTING_TYPE_802_1X] = + { + .meta_type = NM_META_SETTING_TYPE_802_1X, + .setting_priority = NM_SETTING_PRIORITY_HW_AUX, + .setting_name = NM_SETTING_802_1X_SETTING_NAME, + .get_setting_gtype = nm_setting_802_1x_get_type, + }, + [NM_META_SETTING_TYPE_ADSL] = + { + .meta_type = NM_META_SETTING_TYPE_ADSL, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_ADSL_SETTING_NAME, + .get_setting_gtype = nm_setting_adsl_get_type, + }, + [NM_META_SETTING_TYPE_BLUETOOTH] = + { + .meta_type = NM_META_SETTING_TYPE_BLUETOOTH, + .setting_priority = NM_SETTING_PRIORITY_HW_NON_BASE, + .setting_name = NM_SETTING_BLUETOOTH_SETTING_NAME, + .get_setting_gtype = nm_setting_bluetooth_get_type, + }, + [NM_META_SETTING_TYPE_BOND] = + { + .meta_type = NM_META_SETTING_TYPE_BOND, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_BOND_SETTING_NAME, + .get_setting_gtype = nm_setting_bond_get_type, + }, + [NM_META_SETTING_TYPE_BRIDGE] = + { + .meta_type = NM_META_SETTING_TYPE_BRIDGE, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_BRIDGE_SETTING_NAME, + .get_setting_gtype = nm_setting_bridge_get_type, + }, + [NM_META_SETTING_TYPE_BRIDGE_PORT] = + { + .meta_type = NM_META_SETTING_TYPE_BRIDGE_PORT, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_BRIDGE_PORT_SETTING_NAME, + .get_setting_gtype = nm_setting_bridge_port_get_type, + }, + [NM_META_SETTING_TYPE_CDMA] = + { + .meta_type = NM_META_SETTING_TYPE_CDMA, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_CDMA_SETTING_NAME, + .get_setting_gtype = nm_setting_cdma_get_type, + }, + [NM_META_SETTING_TYPE_CONNECTION] = + { + .meta_type = NM_META_SETTING_TYPE_CONNECTION, + .setting_priority = NM_SETTING_PRIORITY_CONNECTION, + .setting_name = NM_SETTING_CONNECTION_SETTING_NAME, + .get_setting_gtype = nm_setting_connection_get_type, + }, + [NM_META_SETTING_TYPE_DCB] = + { + .meta_type = NM_META_SETTING_TYPE_DCB, + .setting_priority = NM_SETTING_PRIORITY_HW_AUX, + .setting_name = NM_SETTING_DCB_SETTING_NAME, + .get_setting_gtype = nm_setting_dcb_get_type, + }, + [NM_META_SETTING_TYPE_DUMMY] = + { + .meta_type = NM_META_SETTING_TYPE_DUMMY, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_DUMMY_SETTING_NAME, + .get_setting_gtype = nm_setting_dummy_get_type, + }, + [NM_META_SETTING_TYPE_ETHTOOL] = + { + .meta_type = NM_META_SETTING_TYPE_ETHTOOL, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_ETHTOOL_SETTING_NAME, + .get_setting_gtype = nm_setting_ethtool_get_type, + }, + [NM_META_SETTING_TYPE_GENERIC] = + { + .meta_type = NM_META_SETTING_TYPE_GENERIC, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_GENERIC_SETTING_NAME, + .get_setting_gtype = nm_setting_generic_get_type, + }, + [NM_META_SETTING_TYPE_GSM] = + { + .meta_type = NM_META_SETTING_TYPE_GSM, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_GSM_SETTING_NAME, + .get_setting_gtype = nm_setting_gsm_get_type, + }, + [NM_META_SETTING_TYPE_HOSTNAME] = + { + .meta_type = NM_META_SETTING_TYPE_HOSTNAME, + .setting_priority = NM_SETTING_PRIORITY_IP, + .setting_name = NM_SETTING_HOSTNAME_SETTING_NAME, + .get_setting_gtype = nm_setting_hostname_get_type, + }, + [NM_META_SETTING_TYPE_INFINIBAND] = + { + .meta_type = NM_META_SETTING_TYPE_INFINIBAND, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_INFINIBAND_SETTING_NAME, + .get_setting_gtype = nm_setting_infiniband_get_type, + }, + [NM_META_SETTING_TYPE_IP4_CONFIG] = + { + .meta_type = NM_META_SETTING_TYPE_IP4_CONFIG, + .setting_priority = NM_SETTING_PRIORITY_IP, + .setting_name = NM_SETTING_IP4_CONFIG_SETTING_NAME, + .get_setting_gtype = nm_setting_ip4_config_get_type, + }, + [NM_META_SETTING_TYPE_IP6_CONFIG] = + { + .meta_type = NM_META_SETTING_TYPE_IP6_CONFIG, + .setting_priority = NM_SETTING_PRIORITY_IP, + .setting_name = NM_SETTING_IP6_CONFIG_SETTING_NAME, + .get_setting_gtype = nm_setting_ip6_config_get_type, + }, + [NM_META_SETTING_TYPE_IP_TUNNEL] = + { + .meta_type = NM_META_SETTING_TYPE_IP_TUNNEL, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_IP_TUNNEL_SETTING_NAME, + .get_setting_gtype = nm_setting_ip_tunnel_get_type, + }, + [NM_META_SETTING_TYPE_MACSEC] = + { + .meta_type = NM_META_SETTING_TYPE_MACSEC, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_MACSEC_SETTING_NAME, + .get_setting_gtype = nm_setting_macsec_get_type, + }, + [NM_META_SETTING_TYPE_MACVLAN] = + { + .meta_type = NM_META_SETTING_TYPE_MACVLAN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_MACVLAN_SETTING_NAME, + .get_setting_gtype = nm_setting_macvlan_get_type, + }, + [NM_META_SETTING_TYPE_MATCH] = + { + .meta_type = NM_META_SETTING_TYPE_MATCH, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_MATCH_SETTING_NAME, + .get_setting_gtype = nm_setting_match_get_type, + }, + [NM_META_SETTING_TYPE_OLPC_MESH] = + { + .meta_type = NM_META_SETTING_TYPE_OLPC_MESH, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_OLPC_MESH_SETTING_NAME, + .get_setting_gtype = nm_setting_olpc_mesh_get_type, + }, + [NM_META_SETTING_TYPE_OVS_BRIDGE] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_BRIDGE, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_OVS_BRIDGE_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_bridge_get_type, + }, + [NM_META_SETTING_TYPE_OVS_DPDK] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_DPDK, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_OVS_DPDK_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_dpdk_get_type, + }, + [NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_OVS_EXTERNAL_IDS_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_external_ids_get_type, + }, + [NM_META_SETTING_TYPE_OVS_INTERFACE] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_INTERFACE, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_OVS_INTERFACE_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_interface_get_type, + }, + [NM_META_SETTING_TYPE_OVS_PATCH] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_PATCH, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_OVS_PATCH_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_patch_get_type, + }, + [NM_META_SETTING_TYPE_OVS_PORT] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_PORT, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_OVS_PORT_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_port_get_type, + }, + [NM_META_SETTING_TYPE_PPPOE] = + { + .meta_type = NM_META_SETTING_TYPE_PPPOE, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_PPPOE_SETTING_NAME, + .get_setting_gtype = nm_setting_pppoe_get_type, + }, + [NM_META_SETTING_TYPE_PPP] = + { + .meta_type = NM_META_SETTING_TYPE_PPP, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_PPP_SETTING_NAME, + .get_setting_gtype = nm_setting_ppp_get_type, + }, + [NM_META_SETTING_TYPE_PROXY] = + { + .meta_type = NM_META_SETTING_TYPE_PROXY, + .setting_priority = NM_SETTING_PRIORITY_IP, + .setting_name = NM_SETTING_PROXY_SETTING_NAME, + .get_setting_gtype = nm_setting_proxy_get_type, + }, + [NM_META_SETTING_TYPE_SERIAL] = + { + .meta_type = NM_META_SETTING_TYPE_SERIAL, + .setting_priority = NM_SETTING_PRIORITY_HW_AUX, + .setting_name = NM_SETTING_SERIAL_SETTING_NAME, + .get_setting_gtype = nm_setting_serial_get_type, + }, + [NM_META_SETTING_TYPE_SRIOV] = + { + .meta_type = NM_META_SETTING_TYPE_SRIOV, + .setting_priority = NM_SETTING_PRIORITY_HW_AUX, + .setting_name = NM_SETTING_SRIOV_SETTING_NAME, + .get_setting_gtype = nm_setting_sriov_get_type, + }, + [NM_META_SETTING_TYPE_TC_CONFIG] = + { + .meta_type = NM_META_SETTING_TYPE_TC_CONFIG, + .setting_priority = NM_SETTING_PRIORITY_IP, + .setting_name = NM_SETTING_TC_CONFIG_SETTING_NAME, + .get_setting_gtype = nm_setting_tc_config_get_type, + }, + [NM_META_SETTING_TYPE_TEAM] = + { + .meta_type = NM_META_SETTING_TYPE_TEAM, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_TEAM_SETTING_NAME, + .get_setting_gtype = nm_setting_team_get_type, + }, + [NM_META_SETTING_TYPE_TEAM_PORT] = + { + .meta_type = NM_META_SETTING_TYPE_TEAM_PORT, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_TEAM_PORT_SETTING_NAME, + .get_setting_gtype = nm_setting_team_port_get_type, + }, + [NM_META_SETTING_TYPE_TUN] = + { + .meta_type = NM_META_SETTING_TYPE_TUN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_TUN_SETTING_NAME, + .get_setting_gtype = nm_setting_tun_get_type, + }, + [NM_META_SETTING_TYPE_USER] = + { + .meta_type = NM_META_SETTING_TYPE_USER, + .setting_priority = NM_SETTING_PRIORITY_USER, + .setting_name = NM_SETTING_USER_SETTING_NAME, + .get_setting_gtype = nm_setting_user_get_type, + }, + [NM_META_SETTING_TYPE_VETH] = + { + .meta_type = NM_META_SETTING_TYPE_VETH, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_VETH_SETTING_NAME, + .get_setting_gtype = nm_setting_veth_get_type, + }, + [NM_META_SETTING_TYPE_VLAN] = + { + .meta_type = NM_META_SETTING_TYPE_VLAN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_VLAN_SETTING_NAME, + .get_setting_gtype = nm_setting_vlan_get_type, + }, + [NM_META_SETTING_TYPE_VPN] = + { + .meta_type = NM_META_SETTING_TYPE_VPN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_VPN_SETTING_NAME, + .get_setting_gtype = nm_setting_vpn_get_type, + }, + [NM_META_SETTING_TYPE_VRF] = + { + .meta_type = NM_META_SETTING_TYPE_VRF, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_VRF_SETTING_NAME, + .get_setting_gtype = nm_setting_vrf_get_type, + }, + [NM_META_SETTING_TYPE_VXLAN] = + { + .meta_type = NM_META_SETTING_TYPE_VXLAN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_VXLAN_SETTING_NAME, + .get_setting_gtype = nm_setting_vxlan_get_type, + }, + [NM_META_SETTING_TYPE_WIFI_P2P] = + { + .meta_type = NM_META_SETTING_TYPE_WIFI_P2P, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_WIFI_P2P_SETTING_NAME, + .get_setting_gtype = nm_setting_wifi_p2p_get_type, + }, + [NM_META_SETTING_TYPE_WIMAX] = + { + .meta_type = NM_META_SETTING_TYPE_WIMAX, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_WIMAX_SETTING_NAME, + .get_setting_gtype = nm_setting_wimax_get_type, + }, + [NM_META_SETTING_TYPE_WIRED] = + { + .meta_type = NM_META_SETTING_TYPE_WIRED, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_WIRED_SETTING_NAME, + .get_setting_gtype = nm_setting_wired_get_type, + }, + [NM_META_SETTING_TYPE_WIREGUARD] = + { + .meta_type = NM_META_SETTING_TYPE_WIREGUARD, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_WIREGUARD_SETTING_NAME, + .get_setting_gtype = nm_setting_wireguard_get_type, + }, + [NM_META_SETTING_TYPE_WIRELESS] = + { + .meta_type = NM_META_SETTING_TYPE_WIRELESS, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_WIRELESS_SETTING_NAME, + .get_setting_gtype = nm_setting_wireless_get_type, + }, + [NM_META_SETTING_TYPE_WIRELESS_SECURITY] = + { + .meta_type = NM_META_SETTING_TYPE_WIRELESS_SECURITY, + .setting_priority = NM_SETTING_PRIORITY_HW_AUX, + .setting_name = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, + .get_setting_gtype = nm_setting_wireless_security_get_type, + }, + [NM_META_SETTING_TYPE_WPAN] = + { + .meta_type = NM_META_SETTING_TYPE_WPAN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_WPAN_SETTING_NAME, + .get_setting_gtype = nm_setting_wpan_get_type, + }, + + [NM_META_SETTING_TYPE_UNKNOWN] = + { + .meta_type = NM_META_SETTING_TYPE_UNKNOWN, + }, +}; + +const NMMetaSettingInfo * +nm_meta_setting_infos_by_name(const char *name) +{ + gssize idx; + + if (NM_MORE_ASSERTS > 10) { + guint i, j; + + for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++) { + const NMMetaSettingInfo *setting_info = &nm_meta_setting_infos[i]; + + nm_assert(setting_info->meta_type == (NMMetaSettingType) i); + nm_assert(setting_info->setting_name); + nm_assert(setting_info->setting_name[0]); + nm_assert(setting_info->get_setting_gtype); + nm_assert(setting_info->setting_priority != NM_SETTING_PRIORITY_INVALID); + if (i > 0 + && strcmp(nm_meta_setting_infos[i - 1].setting_name, setting_info->setting_name) + >= 0) { + g_error("nm_meta_setting_infos[%u, \"%s\"] is wrongly sorted before " + "nm_meta_setting_infos[%u, \"%s\"]. Rearange NMMetaSettingType enum", + i - 1, + nm_meta_setting_infos[i - 1].setting_name, + i, + setting_info->setting_name); + } + for (j = 0; j < i; j++) { + const NMMetaSettingInfo *s = &nm_meta_setting_infos[j]; + + nm_assert(setting_info->get_setting_gtype != s->get_setting_gtype); + } + } + } + + G_STATIC_ASSERT_EXPR(G_STRUCT_OFFSET(NMMetaSettingInfo, setting_name) == 0); + idx = nm_utils_array_find_binary_search(nm_meta_setting_infos, + sizeof(NMMetaSettingInfo), + _NM_META_SETTING_TYPE_NUM, + &name, + nm_strcmp_p_with_data, + NULL); + + return idx >= 0 ? &nm_meta_setting_infos[idx] : NULL; +} + +const NMMetaSettingInfo * +nm_meta_setting_infos_by_gtype(GType gtype) +{ +#if _NM_META_SETTING_BASE_IMPL_LIBNM + nm_auto_unref_gtypeclass GTypeClass *gtypeclass_unref = NULL; + GTypeClass * gtypeclass; + NMSettingClass * klass; + + if (!g_type_is_a(gtype, NM_TYPE_SETTING)) + goto out_none; + + gtypeclass = g_type_class_peek(gtype); + if (!gtypeclass) + gtypeclass = gtypeclass_unref = g_type_class_ref(gtype); + + nm_assert(NM_IS_SETTING_CLASS(gtypeclass)); + + klass = (NMSettingClass *) gtypeclass; + + if (!klass->setting_info) + goto out_none; + + nm_assert(klass->setting_info->get_setting_gtype); + nm_assert(klass->setting_info->get_setting_gtype() == gtype); + + return klass->setting_info; + +out_none: + + if (NM_MORE_ASSERTS > 10) { + int i; + + /* this might hint to a bug, but it would be expected for NM_TYPE_SETTING + * and NM_TYPE_SETTING_IP_CONFIG. + * + * Assert that we didn't lookup for a gtype, which we would expect to find. + * An assertion failure here, hints to a bug in nm_setting_*_class_init(). + */ + for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++) + nm_assert(nm_meta_setting_infos[i].get_setting_gtype() != gtype); + } + + return NULL; +#else + guint i; + + for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++) { + if (nm_meta_setting_infos[i].get_setting_gtype() == gtype) + return &nm_meta_setting_infos[i]; + } + return NULL; +#endif +} + +/*****************************************************************************/ + +NMSettingPriority +nm_meta_setting_info_get_base_type_priority(const NMMetaSettingInfo *setting_info, GType gtype) +{ + /* Historical oddity: PPPoE is a base-type even though it's not + * priority 1. It needs to be sorted *after* lower-level stuff like + * Wi-Fi security or 802.1x for secrets, but it's still allowed as a + * base type. + */ + + if (setting_info) { + if (NM_IN_SET(setting_info->setting_priority, + NM_SETTING_PRIORITY_HW_BASE, + NM_SETTING_PRIORITY_HW_NON_BASE) + || gtype == NM_TYPE_SETTING_PPPOE) + return setting_info->setting_priority; + } + + return NM_SETTING_PRIORITY_INVALID; +} + +NMSettingPriority +_nm_setting_type_get_base_type_priority(GType type) +{ + return nm_meta_setting_info_get_base_type_priority(nm_meta_setting_infos_by_gtype(type), type); +} + +/*****************************************************************************/ diff --git a/clients/common/nm-meta-setting-base-impl.h b/clients/common/nm-meta-setting-base-impl.h new file mode 100644 index 0000000..94b14e8 --- /dev/null +++ b/clients/common/nm-meta-setting-base-impl.h @@ -0,0 +1,187 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2017 - 2018 Red Hat, Inc. + */ + +#ifndef __NM_META_SETTING_BASE_IMPL_H__ +#define __NM_META_SETTING_BASE_IMPL_H__ + +#include "nm-setting-8021x.h" + +/*****************************************************************************/ + +/* + * A setting's priority should roughly follow the OSI layer model, but it also + * controls which settings get asked for secrets first. Thus settings which + * relate to things that must be working first, like hardware, should get a + * higher priority than things which layer on top of the hardware. For example, + * the GSM/CDMA settings should provide secrets before the PPP setting does, + * because a PIN is required to unlock the device before PPP can even start. + * Even settings without secrets should be assigned the right priority. + * + * 0: reserved for invalid + * + * 1: reserved for the Connection setting + * + * 2,3: hardware-related settings like Ethernet, Wi-Fi, InfiniBand, Bridge, etc. + * These priority 1 settings are also "base types", which means that at least + * one of them is required for the connection to be valid, and their name is + * valid in the 'type' property of the Connection setting. + * + * 4: hardware-related auxiliary settings that require a base setting to be + * successful first, like Wi-Fi security, 802.1x, etc. + * + * 5: hardware-independent settings that are required before IP connectivity + * can be established, like PPP, PPPoE, etc. + * + * 6: IP-level stuff + * + * 10: NMSettingUser + */ +typedef enum { /*< skip >*/ + NM_SETTING_PRIORITY_INVALID = 0, + NM_SETTING_PRIORITY_CONNECTION = 1, + NM_SETTING_PRIORITY_HW_BASE = 2, + NM_SETTING_PRIORITY_HW_NON_BASE = 3, + NM_SETTING_PRIORITY_HW_AUX = 4, + NM_SETTING_PRIORITY_AUX = 5, + NM_SETTING_PRIORITY_IP = 6, + NM_SETTING_PRIORITY_USER = 10, +} NMSettingPriority; + +/*****************************************************************************/ + +typedef enum { + NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CA_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_CLIENT_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CLIENT_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PRIVATE_KEY, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_PRIVATE_KEY, + + NM_SETTING_802_1X_SCHEME_TYPE_UNKNOWN, + + _NM_SETTING_802_1X_SCHEME_TYPE_NUM = NM_SETTING_802_1X_SCHEME_TYPE_UNKNOWN, +} NMSetting8021xSchemeType; + +typedef struct { + const char *setting_key; + NMSetting8021xCKScheme (*scheme_func)(NMSetting8021x *setting); + NMSetting8021xCKFormat (*format_func)(NMSetting8021x *setting); + const char *(*path_func)(NMSetting8021x *setting); + GBytes *(*blob_func)(NMSetting8021x *setting); + const char *(*uri_func)(NMSetting8021x *setting); + const char *(*passwd_func)(NMSetting8021x *setting); + NMSettingSecretFlags (*pwflag_func)(NMSetting8021x *setting); + gboolean (*set_cert_func)(NMSetting8021x * setting, + const char * value, + NMSetting8021xCKScheme scheme, + NMSetting8021xCKFormat *out_format, + GError ** error); + gboolean (*set_private_key_func)(NMSetting8021x * setting, + const char * value, + const char * password, + NMSetting8021xCKScheme scheme, + NMSetting8021xCKFormat *out_format, + GError ** error); + const char * file_suffix; + NMSetting8021xSchemeType scheme_type; + bool is_secret : 1; +} NMSetting8021xSchemeVtable; + +extern const NMSetting8021xSchemeVtable + nm_setting_8021x_scheme_vtable[_NM_SETTING_802_1X_SCHEME_TYPE_NUM + 1]; + +/*****************************************************************************/ + +typedef enum { + /* the enum (and their numeric values) are internal API. Do not assign + * any meaning the numeric values, because they already have one: + * + * they are sorted in a way, that corresponds to the asciibetical sort + * order of the corresponding setting-name. */ + + NM_META_SETTING_TYPE_6LOWPAN, + NM_META_SETTING_TYPE_OLPC_MESH, + NM_META_SETTING_TYPE_WIRELESS, + NM_META_SETTING_TYPE_WIRELESS_SECURITY, + NM_META_SETTING_TYPE_802_1X, + NM_META_SETTING_TYPE_WIRED, + NM_META_SETTING_TYPE_ADSL, + NM_META_SETTING_TYPE_BLUETOOTH, + NM_META_SETTING_TYPE_BOND, + NM_META_SETTING_TYPE_BRIDGE, + NM_META_SETTING_TYPE_BRIDGE_PORT, + NM_META_SETTING_TYPE_CDMA, + NM_META_SETTING_TYPE_CONNECTION, + NM_META_SETTING_TYPE_DCB, + NM_META_SETTING_TYPE_DUMMY, + NM_META_SETTING_TYPE_ETHTOOL, + NM_META_SETTING_TYPE_GENERIC, + NM_META_SETTING_TYPE_GSM, + NM_META_SETTING_TYPE_HOSTNAME, + NM_META_SETTING_TYPE_INFINIBAND, + NM_META_SETTING_TYPE_IP_TUNNEL, + NM_META_SETTING_TYPE_IP4_CONFIG, + NM_META_SETTING_TYPE_IP6_CONFIG, + NM_META_SETTING_TYPE_MACSEC, + NM_META_SETTING_TYPE_MACVLAN, + NM_META_SETTING_TYPE_MATCH, + NM_META_SETTING_TYPE_OVS_BRIDGE, + NM_META_SETTING_TYPE_OVS_DPDK, + NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS, + NM_META_SETTING_TYPE_OVS_INTERFACE, + NM_META_SETTING_TYPE_OVS_PATCH, + NM_META_SETTING_TYPE_OVS_PORT, + NM_META_SETTING_TYPE_PPP, + NM_META_SETTING_TYPE_PPPOE, + NM_META_SETTING_TYPE_PROXY, + NM_META_SETTING_TYPE_SERIAL, + NM_META_SETTING_TYPE_SRIOV, + NM_META_SETTING_TYPE_TC_CONFIG, + NM_META_SETTING_TYPE_TEAM, + NM_META_SETTING_TYPE_TEAM_PORT, + NM_META_SETTING_TYPE_TUN, + NM_META_SETTING_TYPE_USER, + NM_META_SETTING_TYPE_VETH, + NM_META_SETTING_TYPE_VLAN, + NM_META_SETTING_TYPE_VPN, + NM_META_SETTING_TYPE_VRF, + NM_META_SETTING_TYPE_VXLAN, + NM_META_SETTING_TYPE_WIFI_P2P, + NM_META_SETTING_TYPE_WIMAX, + NM_META_SETTING_TYPE_WIREGUARD, + NM_META_SETTING_TYPE_WPAN, + + NM_META_SETTING_TYPE_UNKNOWN, + + _NM_META_SETTING_TYPE_NUM = NM_META_SETTING_TYPE_UNKNOWN, +} NMMetaSettingType; + +#if _NM_META_SETTING_BASE_IMPL_LIBNM + #define _NMMetaSettingInfo_Alias _NMMetaSettingInfo +#else + #define _NMMetaSettingInfo_Alias _NMMetaSettingInfoCli +#endif + +struct _NMMetaSettingInfo_Alias { + const char *setting_name; + GType (*get_setting_gtype)(void); + NMMetaSettingType meta_type; + NMSettingPriority setting_priority; +}; + +typedef struct _NMMetaSettingInfo_Alias NMMetaSettingInfo; + +extern const NMMetaSettingInfo nm_meta_setting_infos[_NM_META_SETTING_TYPE_NUM + 1]; + +const NMMetaSettingInfo *nm_meta_setting_infos_by_name(const char *name); +const NMMetaSettingInfo *nm_meta_setting_infos_by_gtype(GType gtype); + +/*****************************************************************************/ + +NMSettingPriority nm_meta_setting_info_get_base_type_priority(const NMMetaSettingInfo *setting_info, + GType gtype); +NMSettingPriority _nm_setting_type_get_base_type_priority(GType type); + +#endif /* __NM_META_SETTING_BASE_IMPL_H__ */ diff --git a/clients/common/nm-meta-setting-base.h b/clients/common/nm-meta-setting-base.h new file mode 100644 index 0000000..85d790a --- /dev/null +++ b/clients/common/nm-meta-setting-base.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#ifndef __NM_META_SETTING_BASE_H__ +#define __NM_META_SETTING_BASE_H__ + +#define _NM_META_SETTING_BASE_IMPL_LIBNM 0 + +#include "nm-meta-setting-base-impl.h" + +#endif /* __NM_META_SETTING_BASE_H__ */ diff --git a/clients/common/nm-meta-setting-desc.c b/clients/common/nm-meta-setting-desc.c index d30d6cd..b6e3d67 100644 --- a/clients/common/nm-meta-setting-desc.c +++ b/clients/common/nm-meta-setting-desc.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-meta-setting-desc.h" @@ -5504,6 +5504,7 @@ static const NMMetaPropertyInfo *const property_infos_ETHTOOL[] = { PROPERTY_INFO_ETHTOOL (FEATURE_L2_FWD_OFFLOAD), PROPERTY_INFO_ETHTOOL (FEATURE_LOOPBACK), PROPERTY_INFO_ETHTOOL (FEATURE_LRO), + PROPERTY_INFO_ETHTOOL (FEATURE_MACSEC_HW_OFFLOAD), PROPERTY_INFO_ETHTOOL (FEATURE_NTUPLE), PROPERTY_INFO_ETHTOOL (FEATURE_RX), PROPERTY_INFO_ETHTOOL (FEATURE_RXHASH), @@ -5511,12 +5512,15 @@ static const NMMetaPropertyInfo *const property_infos_ETHTOOL[] = { PROPERTY_INFO_ETHTOOL (FEATURE_RX_ALL), PROPERTY_INFO_ETHTOOL (FEATURE_RX_FCS), PROPERTY_INFO_ETHTOOL (FEATURE_RX_GRO_HW), + PROPERTY_INFO_ETHTOOL (FEATURE_RX_GRO_LIST), + PROPERTY_INFO_ETHTOOL (FEATURE_RX_UDP_GRO_FORWARDING), PROPERTY_INFO_ETHTOOL (FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD), PROPERTY_INFO_ETHTOOL (FEATURE_RX_VLAN_FILTER), PROPERTY_INFO_ETHTOOL (FEATURE_RX_VLAN_STAG_FILTER), PROPERTY_INFO_ETHTOOL (FEATURE_RX_VLAN_STAG_HW_PARSE), PROPERTY_INFO_ETHTOOL (FEATURE_SG), PROPERTY_INFO_ETHTOOL (FEATURE_TLS_HW_RECORD), + PROPERTY_INFO_ETHTOOL (FEATURE_TLS_HW_RX_OFFLOAD), PROPERTY_INFO_ETHTOOL (FEATURE_TLS_HW_TX_OFFLOAD), PROPERTY_INFO_ETHTOOL (FEATURE_TSO), PROPERTY_INFO_ETHTOOL (FEATURE_TX), @@ -5530,6 +5534,7 @@ static const NMMetaPropertyInfo *const property_infos_ETHTOOL[] = { PROPERTY_INFO_ETHTOOL (FEATURE_TX_FCOE_SEGMENTATION), PROPERTY_INFO_ETHTOOL (FEATURE_TX_GRE_CSUM_SEGMENTATION), PROPERTY_INFO_ETHTOOL (FEATURE_TX_GRE_SEGMENTATION), + PROPERTY_INFO_ETHTOOL (FEATURE_TX_GSO_LIST), PROPERTY_INFO_ETHTOOL (FEATURE_TX_GSO_PARTIAL), PROPERTY_INFO_ETHTOOL (FEATURE_TX_GSO_ROBUST), PROPERTY_INFO_ETHTOOL (FEATURE_TX_IPXIP4_SEGMENTATION), @@ -5542,6 +5547,7 @@ static const NMMetaPropertyInfo *const property_infos_ETHTOOL[] = { PROPERTY_INFO_ETHTOOL (FEATURE_TX_TCP_ECN_SEGMENTATION), PROPERTY_INFO_ETHTOOL (FEATURE_TX_TCP_MANGLEID_SEGMENTATION), PROPERTY_INFO_ETHTOOL (FEATURE_TX_TCP_SEGMENTATION), + PROPERTY_INFO_ETHTOOL (FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION), PROPERTY_INFO_ETHTOOL (FEATURE_TX_UDP_SEGMENTATION), PROPERTY_INFO_ETHTOOL (FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION), PROPERTY_INFO_ETHTOOL (FEATURE_TX_UDP_TNL_SEGMENTATION), diff --git a/clients/common/nm-meta-setting-desc.h b/clients/common/nm-meta-setting-desc.h index 288880a..2f520b2 100644 --- a/clients/common/nm-meta-setting-desc.h +++ b/clients/common/nm-meta-setting-desc.h @@ -7,7 +7,7 @@ #define __NM_META_SETTING_DESC_H__ #include "nm-glib-aux/nm-obj.h" -#include "nm-meta-setting.h" +#include "nm-meta-setting-base.h" #include "nm-base/nm-ethtool-base.h" struct _NMDevice; diff --git a/clients/common/nm-polkit-listener.c b/clients/common/nm-polkit-listener.c index 8430890..db21abf 100644 --- a/clients/common/nm-polkit-listener.c +++ b/clients/common/nm-polkit-listener.c @@ -18,7 +18,7 @@ * https://github.com/lxde/lxqt-policykit/tree/master/src */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-polkit-listener.h" diff --git a/clients/common/nm-secret-agent-simple.c b/clients/common/nm-secret-agent-simple.c index 45060a4..1857432 100644 --- a/clients/common/nm-secret-agent-simple.c +++ b/clients/common/nm-secret-agent-simple.c @@ -16,7 +16,7 @@ * replace ShellNetworkAgent. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-secret-agent-simple.h" diff --git a/clients/common/nm-vpn-helpers.c b/clients/common/nm-vpn-helpers.c index 43513a8..15c47c3 100644 --- a/clients/common/nm-vpn-helpers.c +++ b/clients/common/nm-vpn-helpers.c @@ -8,7 +8,7 @@ * @short_description: VPN-related utilities */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-vpn-helpers.h" diff --git a/clients/common/settings-docs.h b/clients/common/settings-docs.h index 5e1aaf4..2c275a9 100644 --- a/clients/common/settings-docs.h +++ b/clients/common/settings-docs.h @@ -67,8 +67,8 @@ #define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE1_PEAPLABEL N_("Forces use of the new PEAP label during key derivation. Some RADIUS servers may require forcing the new PEAP label to interoperate with PEAPv1. Set to \"1\" to force use of the new PEAP label. See the wpa_supplicant documentation for more details.") #define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE1_PEAPVER N_("Forces which PEAP version is used when PEAP is set as the EAP method in the \"eap\" property. When unset, the version reported by the server will be used. Sometimes when using older RADIUS servers, it is necessary to force the client to use a particular PEAP version. To do so, this property may be set to \"0\" or \"1\" to force that specific PEAP version.") #define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES N_("List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner \"phase 2\" authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed.") -#define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_AUTH N_("Specifies the allowed \"phase 2\" inner non-EAP authentication method when an EAP method that uses an inner TLS tunnel is specified in the \"eap\" property. Recognized non-EAP \"phase 2\" methods are \"pap\", \"chap\", \"mschap\", \"mschapv2\", \"gtc\", \"otp\", \"md5\", and \"tls\". Each \"phase 2\" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.") -#define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_AUTHEAP N_("Specifies the allowed \"phase 2\" inner EAP-based authentication method when an EAP method that uses an inner TLS tunnel is specified in the \"eap\" property. Recognized EAP-based \"phase 2\" methods are \"md5\", \"mschapv2\", \"otp\", \"gtc\", and \"tls\". Each \"phase 2\" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.") +#define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_AUTH N_("Specifies the allowed \"phase 2\" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the \"eap\" property. For TTLS this property selects one of the supported non-EAP inner methods: \"pap\", \"chap\", \"mschap\", \"mschapv2\" while \"phase2-autheap\" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: \"gtc\", \"otp\", \"md5\" and \"tls\". Each \"phase 2\" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both \"phase2-auth\" and \"phase2-autheap\" cannot be specified.") +#define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_AUTHEAP N_("Specifies the allowed \"phase 2\" inner EAP-based authentication method when TTLS is specified in the \"eap\" property. Recognized EAP-based \"phase 2\" methods are \"md5\", \"mschapv2\", \"otp\", \"gtc\", and \"tls\". Each \"phase 2\" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.") #define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_CA_CERT N_("Contains the \"phase 2\" CA certificate if used by the EAP method specified in the \"phase2-auth\" or \"phase2-autheap\" properties. Certificate data is specified using a \"scheme\"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string \"file://\" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory.") #define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_CA_CERT_PASSWORD N_("The password used to access the \"phase2\" CA certificate stored in \"phase2-ca-cert\" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.") #define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_CA_CERT_PASSWORD_FLAGS N_("Flags indicating how to handle the \"phase2-ca-cert-password\" property.") diff --git a/clients/common/settings-docs.h.in b/clients/common/settings-docs.h.in index 5e1aaf4..2c275a9 100644 --- a/clients/common/settings-docs.h.in +++ b/clients/common/settings-docs.h.in @@ -67,8 +67,8 @@ #define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE1_PEAPLABEL N_("Forces use of the new PEAP label during key derivation. Some RADIUS servers may require forcing the new PEAP label to interoperate with PEAPv1. Set to \"1\" to force use of the new PEAP label. See the wpa_supplicant documentation for more details.") #define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE1_PEAPVER N_("Forces which PEAP version is used when PEAP is set as the EAP method in the \"eap\" property. When unset, the version reported by the server will be used. Sometimes when using older RADIUS servers, it is necessary to force the client to use a particular PEAP version. To do so, this property may be set to \"0\" or \"1\" to force that specific PEAP version.") #define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES N_("List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner \"phase 2\" authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed.") -#define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_AUTH N_("Specifies the allowed \"phase 2\" inner non-EAP authentication method when an EAP method that uses an inner TLS tunnel is specified in the \"eap\" property. Recognized non-EAP \"phase 2\" methods are \"pap\", \"chap\", \"mschap\", \"mschapv2\", \"gtc\", \"otp\", \"md5\", and \"tls\". Each \"phase 2\" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.") -#define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_AUTHEAP N_("Specifies the allowed \"phase 2\" inner EAP-based authentication method when an EAP method that uses an inner TLS tunnel is specified in the \"eap\" property. Recognized EAP-based \"phase 2\" methods are \"md5\", \"mschapv2\", \"otp\", \"gtc\", and \"tls\". Each \"phase 2\" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.") +#define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_AUTH N_("Specifies the allowed \"phase 2\" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the \"eap\" property. For TTLS this property selects one of the supported non-EAP inner methods: \"pap\", \"chap\", \"mschap\", \"mschapv2\" while \"phase2-autheap\" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: \"gtc\", \"otp\", \"md5\" and \"tls\". Each \"phase 2\" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both \"phase2-auth\" and \"phase2-autheap\" cannot be specified.") +#define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_AUTHEAP N_("Specifies the allowed \"phase 2\" inner EAP-based authentication method when TTLS is specified in the \"eap\" property. Recognized EAP-based \"phase 2\" methods are \"md5\", \"mschapv2\", \"otp\", \"gtc\", and \"tls\". Each \"phase 2\" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.") #define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_CA_CERT N_("Contains the \"phase 2\" CA certificate if used by the EAP method specified in the \"phase2-auth\" or \"phase2-autheap\" properties. Certificate data is specified using a \"scheme\"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string \"file://\" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory.") #define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_CA_CERT_PASSWORD N_("The password used to access the \"phase2\" CA certificate stored in \"phase2-ca-cert\" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.") #define DESCRIBE_DOC_NM_SETTING_802_1X_PHASE2_CA_CERT_PASSWORD_FLAGS N_("Flags indicating how to handle the \"phase2-ca-cert-password\" property.") diff --git a/clients/common/tests/meson.build b/clients/common/tests/meson.build index 097f69f..28b27ae 100644 --- a/clients/common/tests/meson.build +++ b/clients/common/tests/meson.build @@ -1,45 +1,39 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -common_c_flags = clients_c_flags + ['-DNETWORKMANAGER_COMPILATION_TEST'] - -test_name = 'test-clients-common' - -deps = [ - libnmc_base_dep, - libnmc_dep, -] - exe = executable( - test_name, - test_name + '.c', - dependencies: deps, - c_args: common_c_flags, + 'test-clients-common', + 'test-clients-common.c', + dependencies: [ + libnmc_base_dep, + libnmc_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="test"', + ], ) test( - 'clients/common/tests/' + test_name, + 'clients/common/tests/test-clients-common', test_script, args: test_args + [exe.full_path()], ) -test_name = 'test-libnm-core-aux' - -deps = [ - libnm_dep, - libnm_libnm_core_aux_dep, - libnm_nm_default_dep, -] - exe = executable( - test_name, - test_name + '.c', - dependencies: deps, - c_args: common_c_flags, + 'test-libnm-core-aux', + 'test-libnm-core-aux.c', + dependencies: [ + libnm_dep, + libnm_libnm_core_aux_dep, + libnm_nm_default_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="test"', + ], link_with: libnm_systemd_logging_stub, ) test( - 'clients/common/tests/' + test_name, + 'clients/common/tests/test-libnm-core-aux', test_script, args: test_args + [exe.full_path()] ) diff --git a/clients/common/tests/test-clients-common.c b/clients/common/tests/test-clients-common.c index 7020e83..4336f0d 100644 --- a/clients/common/tests/test-clients-common.c +++ b/clients/common/tests/test-clients-common.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-meta-setting-access.h" #include "nm-vpn-helpers.h" diff --git a/clients/common/tests/test-libnm-core-aux.c b/clients/common/tests/test-libnm-core-aux.c index f5148d9..bf63987 100644 --- a/clients/common/tests/test-libnm-core-aux.c +++ b/clients/common/tests/test-libnm-core-aux.c @@ -3,7 +3,7 @@ * Copyright (C) 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-libnm-core-aux/nm-libnm-core-aux.h" #include "nm-libnm-core-intern/nm-libnm-core-utils.h" diff --git a/clients/meson.build b/clients/meson.build index 257b9a0..2c92e29 100644 --- a/clients/meson.build +++ b/clients/meson.build @@ -1,18 +1,16 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -clients_c_flags = ['-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT'] - -name = 'nm-online' - executable( - name, - name + '.c', + 'nm-online', + 'nm-online' + '.c', dependencies: [ libnm_dep, libnm_nm_default_dep, libnm_libnm_aux_dep, ], - c_args: clients_c_flags + ['-DG_LOG_DOMAIN="@0@"'.format(name)], + c_args: [ + '-DG_LOG_DOMAIN="nm-online"', + ], link_args: ldflags_linker_script_binary, link_depends: linker_script_binary, install: true, diff --git a/clients/nm-online.c b/clients/nm-online.c index b40d8b4..c5cdeb3 100644 --- a/clients/nm-online.c +++ b/clients/nm-online.c @@ -16,7 +16,7 @@ * Robert Love */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include #include diff --git a/clients/tests/test-client.py b/clients/tests/test-client.py index 01d50e1..99d9067 100755 --- a/clients/tests/test-client.py +++ b/clients/tests/test-client.py @@ -26,6 +26,12 @@ from __future__ import print_function # # The important part is that translations work. Test # # $ LANG=pl_PL.UTF-8 ./clients/cli/nmcli --version # # also ensure that `locale -a` reports the Polish locale. +# # +# # How to get that right depends on your distro. First check that +# # `LANG=pl_PL.UTF-8 /usr/bin/nmcli --version` gives you Polish output +# # and that it works in principle. +# # Then install NetworkManager in the configured prefix (make install) +# # and verify that ./clients/cli/nmcli also gives you Polish. # $ NM_TEST_REGENERATE=1 make check-local-clients-tests-test-client # # Set NM_TEST_REGENERATE=1 to regenerate all files. # $ git diff ... ; git add ... diff --git a/clients/tui/meson.build b/clients/tui/meson.build index 468f552..89f842e 100644 --- a/clients/tui/meson.build +++ b/clients/tui/meson.build @@ -1,66 +1,60 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -name = 'nmtui' - -common_c_flags = clients_c_flags + ['-DG_LOG_DOMAIN="@0@"'.format(name)] - subdir('newt') -sources = files( - 'nm-editor-bindings.c', - 'nm-editor-utils.c', - 'nmt-address-list.c', - 'nmt-connect-connection-list.c', - 'nmt-device-entry.c', - 'nmt-edit-connection-list.c', - 'nmt-editor.c', - 'nmt-editor-grid.c', - 'nmt-editor-page.c', - 'nmt-editor-page-device.c', - 'nmt-editor-section.c', - 'nmt-ip-entry.c', - 'nmt-mac-entry.c', - 'nmt-mtu-entry.c', - 'nmt-page-bond.c', - 'nmt-page-bridge.c', - 'nmt-page-bridge-port.c', - 'nmt-page-dsl.c', - 'nmt-page-ethernet.c', - 'nmt-page-infiniband.c', - 'nmt-page-ip4.c', - 'nmt-page-ip6.c', - 'nmt-page-ip-tunnel.c', - 'nmt-page-ppp.c', - 'nmt-page-team.c', - 'nmt-page-team-port.c', - 'nmt-page-vlan.c', - 'nmt-page-wifi.c', - 'nmt-password-dialog.c', - 'nmt-password-fields.c', - 'nmt-route-editor.c', - 'nmt-route-entry.c', - 'nmt-route-table.c', - 'nmt-slave-list.c', - 'nmtui.c', - 'nmtui-connect.c', - 'nmtui-edit.c', - 'nmtui-hostname.c', - 'nmt-utils.c', - 'nmt-widget-list.c', -) - -deps = [ - libnmc_base_dep, - libnmc_dep, - libnmt_newt_dep, - libnm_libnm_aux_dep, -] - executable( - name, - sources, - dependencies: deps, - c_args: common_c_flags, + 'nmtui', + files( + 'nm-editor-bindings.c', + 'nm-editor-utils.c', + 'nmt-address-list.c', + 'nmt-connect-connection-list.c', + 'nmt-device-entry.c', + 'nmt-edit-connection-list.c', + 'nmt-editor.c', + 'nmt-editor-grid.c', + 'nmt-editor-page.c', + 'nmt-editor-page-device.c', + 'nmt-editor-section.c', + 'nmt-ip-entry.c', + 'nmt-mac-entry.c', + 'nmt-mtu-entry.c', + 'nmt-page-bond.c', + 'nmt-page-bridge.c', + 'nmt-page-bridge-port.c', + 'nmt-page-dsl.c', + 'nmt-page-ethernet.c', + 'nmt-page-infiniband.c', + 'nmt-page-ip4.c', + 'nmt-page-ip6.c', + 'nmt-page-ip-tunnel.c', + 'nmt-page-ppp.c', + 'nmt-page-team.c', + 'nmt-page-team-port.c', + 'nmt-page-vlan.c', + 'nmt-page-wifi.c', + 'nmt-password-dialog.c', + 'nmt-password-fields.c', + 'nmt-route-editor.c', + 'nmt-route-entry.c', + 'nmt-route-table.c', + 'nmt-slave-list.c', + 'nmtui.c', + 'nmtui-connect.c', + 'nmtui-edit.c', + 'nmtui-hostname.c', + 'nmt-utils.c', + 'nmt-widget-list.c', + ), + dependencies: [ + libnmc_base_dep, + libnmc_dep, + libnmt_newt_dep, + libnm_libnm_aux_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="nmtui"', + ], link_with: libnm_systemd_logging_stub, link_args: ldflags_linker_script_binary, link_depends: linker_script_binary, diff --git a/clients/tui/newt/meson.build b/clients/tui/newt/meson.build index a18b31c..0c89c0f 100644 --- a/clients/tui/newt/meson.build +++ b/clients/tui/newt/meson.build @@ -1,38 +1,36 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -sources = files( - 'nmt-newt-button-box.c', - 'nmt-newt-button.c', - 'nmt-newt-checkbox.c', - 'nmt-newt-component.c', - 'nmt-newt-container.c', - 'nmt-newt-entry.c', - 'nmt-newt-entry-numeric.c', - 'nmt-newt-form.c', - 'nmt-newt-grid.c', - 'nmt-newt-hacks.c', - 'nmt-newt-label.c', - 'nmt-newt-listbox.c', - 'nmt-newt-popup.c', - 'nmt-newt-section.c', - 'nmt-newt-separator.c', - 'nmt-newt-stack.c', - 'nmt-newt-textbox.c', - 'nmt-newt-toggle-button.c', - 'nmt-newt-utils.c', - 'nmt-newt-widget.c', -) - -deps = [ - libnm_nm_default_dep, - newt_dep, -] - libnmt_newt = static_library( 'nmt-newt', - sources: sources, - dependencies: deps, - c_args: common_c_flags, + sources: files( + 'nmt-newt-button-box.c', + 'nmt-newt-button.c', + 'nmt-newt-checkbox.c', + 'nmt-newt-component.c', + 'nmt-newt-container.c', + 'nmt-newt-entry.c', + 'nmt-newt-entry-numeric.c', + 'nmt-newt-form.c', + 'nmt-newt-grid.c', + 'nmt-newt-hacks.c', + 'nmt-newt-label.c', + 'nmt-newt-listbox.c', + 'nmt-newt-popup.c', + 'nmt-newt-section.c', + 'nmt-newt-separator.c', + 'nmt-newt-stack.c', + 'nmt-newt-textbox.c', + 'nmt-newt-toggle-button.c', + 'nmt-newt-utils.c', + 'nmt-newt-widget.c', + ), + dependencies: [ + libnm_nm_default_dep, + newt_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="nmtui"', + ], ) libnmt_newt_dep = declare_dependency( diff --git a/clients/tui/newt/nmt-newt-button-box.c b/clients/tui/newt/nmt-newt-button-box.c index 9dc8ee7..212d04a 100644 --- a/clients/tui/newt/nmt-newt-button-box.c +++ b/clients/tui/newt/nmt-newt-button-box.c @@ -16,7 +16,7 @@ * within each of the two sections. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-button-box.h" diff --git a/clients/tui/newt/nmt-newt-button.c b/clients/tui/newt/nmt-newt-button.c index 050d6bd..1a30a63 100644 --- a/clients/tui/newt/nmt-newt-button.c +++ b/clients/tui/newt/nmt-newt-button.c @@ -10,7 +10,7 @@ * #NmtNewtButton implements a button widget. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-button.h" #include "nmt-newt-utils.h" diff --git a/clients/tui/newt/nmt-newt-checkbox.c b/clients/tui/newt/nmt-newt-checkbox.c index 304075e..f806494 100644 --- a/clients/tui/newt/nmt-newt-checkbox.c +++ b/clients/tui/newt/nmt-newt-checkbox.c @@ -10,7 +10,7 @@ * #NmtNewtCheckbox implements a checkbox widget. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-checkbox.h" #include "nmt-newt-utils.h" diff --git a/clients/tui/newt/nmt-newt-component.c b/clients/tui/newt/nmt-newt-component.c index 687c1e6..64648ea 100644 --- a/clients/tui/newt/nmt-newt-component.c +++ b/clients/tui/newt/nmt-newt-component.c @@ -11,7 +11,7 @@ * wrap a (single) #newtComponent. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-component.h" #include "nmt-newt-form.h" diff --git a/clients/tui/newt/nmt-newt-container.c b/clients/tui/newt/nmt-newt-container.c index f6060c1..dfb5891 100644 --- a/clients/tui/newt/nmt-newt-container.c +++ b/clients/tui/newt/nmt-newt-container.c @@ -13,7 +13,7 @@ * #NmtNewtGrid is the most generic container type. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-container.h" diff --git a/clients/tui/newt/nmt-newt-entry-numeric.c b/clients/tui/newt/nmt-newt-entry-numeric.c index 6df61af..c08ad00 100644 --- a/clients/tui/newt/nmt-newt-entry-numeric.c +++ b/clients/tui/newt/nmt-newt-entry-numeric.c @@ -13,7 +13,7 @@ * #NmtNewtEntryValidator functions, so you should not set your own. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include diff --git a/clients/tui/newt/nmt-newt-entry.c b/clients/tui/newt/nmt-newt-entry.c index eee75c0..2c2ee13 100644 --- a/clients/tui/newt/nmt-newt-entry.c +++ b/clients/tui/newt/nmt-newt-entry.c @@ -13,7 +13,7 @@ * See also #NmtNewtEntryNumeric, for numeric-only entries. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-entry.h" #include "nmt-newt-form.h" diff --git a/clients/tui/newt/nmt-newt-form.c b/clients/tui/newt/nmt-newt-form.c index b596be7..23118e3 100644 --- a/clients/tui/newt/nmt-newt-form.c +++ b/clients/tui/newt/nmt-newt-form.c @@ -11,7 +11,7 @@ * "form" (aka dialog) to the user. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include #include diff --git a/clients/tui/newt/nmt-newt-grid.c b/clients/tui/newt/nmt-newt-grid.c index 873afbd..9fdd615 100644 --- a/clients/tui/newt/nmt-newt-grid.c +++ b/clients/tui/newt/nmt-newt-grid.c @@ -27,7 +27,7 @@ * must be implemented by the container... */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-grid.h" diff --git a/clients/tui/newt/nmt-newt-hacks.c b/clients/tui/newt/nmt-newt-hacks.c index f1a5199..4120acb 100644 --- a/clients/tui/newt/nmt-newt-hacks.c +++ b/clients/tui/newt/nmt-newt-hacks.c @@ -11,7 +11,7 @@ * functions that were added after 0.52.15. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-hacks.h" diff --git a/clients/tui/newt/nmt-newt-label.c b/clients/tui/newt/nmt-newt-label.c index 3ef9636..1902b57 100644 --- a/clients/tui/newt/nmt-newt-label.c +++ b/clients/tui/newt/nmt-newt-label.c @@ -12,7 +12,7 @@ * See also #NmtNewtTextbox, for multiline. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-label.h" diff --git a/clients/tui/newt/nmt-newt-listbox.c b/clients/tui/newt/nmt-newt-listbox.c index 293f8b7..7031fc0 100644 --- a/clients/tui/newt/nmt-newt-listbox.c +++ b/clients/tui/newt/nmt-newt-listbox.c @@ -18,7 +18,7 @@ * presses Return on a selection. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-listbox.h" #include "nmt-newt-form.h" diff --git a/clients/tui/newt/nmt-newt-popup.c b/clients/tui/newt/nmt-newt-popup.c index 6c385bf..c8d8034 100644 --- a/clients/tui/newt/nmt-newt-popup.c +++ b/clients/tui/newt/nmt-newt-popup.c @@ -13,7 +13,7 @@ * #NmtNewtForm containing an #NmtNewtListbox to select from. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-popup.h" #include "nmt-newt-form.h" diff --git a/clients/tui/newt/nmt-newt-section.c b/clients/tui/newt/nmt-newt-section.c index aacc10a..6075563 100644 --- a/clients/tui/newt/nmt-newt-section.c +++ b/clients/tui/newt/nmt-newt-section.c @@ -22,7 +22,7 @@ * extent of the section. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-section.h" diff --git a/clients/tui/newt/nmt-newt-separator.c b/clients/tui/newt/nmt-newt-separator.c index 49e5d2c..c0dde74 100644 --- a/clients/tui/newt/nmt-newt-separator.c +++ b/clients/tui/newt/nmt-newt-separator.c @@ -12,7 +12,7 @@ * between widgets in containers that don't implement padding. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-separator.h" diff --git a/clients/tui/newt/nmt-newt-stack.c b/clients/tui/newt/nmt-newt-stack.c index 7d730e7..f3a2d1f 100644 --- a/clients/tui/newt/nmt-newt-stack.c +++ b/clients/tui/newt/nmt-newt-stack.c @@ -16,7 +16,7 @@ * children. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-stack.h" diff --git a/clients/tui/newt/nmt-newt-textbox.c b/clients/tui/newt/nmt-newt-textbox.c index 523a1e1..c8e3d57 100644 --- a/clients/tui/newt/nmt-newt-textbox.c +++ b/clients/tui/newt/nmt-newt-textbox.c @@ -11,7 +11,7 @@ * word-wrapping. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-textbox.h" diff --git a/clients/tui/newt/nmt-newt-toggle-button.c b/clients/tui/newt/nmt-newt-toggle-button.c index 3d5d07c..cbc813f 100644 --- a/clients/tui/newt/nmt-newt-toggle-button.c +++ b/clients/tui/newt/nmt-newt-toggle-button.c @@ -10,7 +10,7 @@ * #NmtNewtToggleButton implements a two-state toggle button. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-toggle-button.h" diff --git a/clients/tui/newt/nmt-newt-utils.c b/clients/tui/newt/nmt-newt-utils.c index d3f807a..af24824 100644 --- a/clients/tui/newt/nmt-newt-utils.c +++ b/clients/tui/newt/nmt-newt-utils.c @@ -8,7 +8,7 @@ * @short_description: Utility functions */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include #include diff --git a/clients/tui/newt/nmt-newt-widget.c b/clients/tui/newt/nmt-newt-widget.c index 6eeeaa1..9029495 100644 --- a/clients/tui/newt/nmt-newt-widget.c +++ b/clients/tui/newt/nmt-newt-widget.c @@ -21,7 +21,7 @@ * FIXME: need RTL support */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt-widget.h" #include "nmt-newt-form.h" diff --git a/clients/tui/nm-editor-bindings.c b/clients/tui/nm-editor-bindings.c index 7f1bcb6..01f22f6 100644 --- a/clients/tui/nm-editor-bindings.c +++ b/clients/tui/nm-editor-bindings.c @@ -12,7 +12,7 @@ * shared between nmtui, nm-connection-editor, and gnome-control-center. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-editor-bindings.h" diff --git a/clients/tui/nm-editor-utils.c b/clients/tui/nm-editor-utils.c index 4bb8e71..21dc3ae 100644 --- a/clients/tui/nm-editor-utils.c +++ b/clients/tui/nm-editor-utils.c @@ -12,7 +12,7 @@ * nm-connection-editor, and gnome-control-center. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-editor-utils.h" #if 0 diff --git a/clients/tui/nmt-address-list.c b/clients/tui/nmt-address-list.c index a33a230..bb3651d 100644 --- a/clients/tui/nmt-address-list.c +++ b/clients/tui/nmt-address-list.c @@ -15,7 +15,7 @@ * functions. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-address-list.h" diff --git a/clients/tui/nmt-connect-connection-list.c b/clients/tui/nmt-connect-connection-list.c index 8960f47..e8a90d0 100644 --- a/clients/tui/nmt-connect-connection-list.c +++ b/clients/tui/nmt-connect-connection-list.c @@ -11,7 +11,7 @@ * access points displayed by "nmtui connect". */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include diff --git a/clients/tui/nmt-device-entry.c b/clients/tui/nmt-device-entry.c index 593b7b6..dcc2c6d 100644 --- a/clients/tui/nmt-device-entry.c +++ b/clients/tui/nmt-device-entry.c @@ -21,7 +21,7 @@ * to implement that then we should make it just an #NmtNewtEntry. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-device-entry.h" diff --git a/clients/tui/nmt-edit-connection-list.c b/clients/tui/nmt-edit-connection-list.c index b57e480..52535e0 100644 --- a/clients/tui/nmt-edit-connection-list.c +++ b/clients/tui/nmt-edit-connection-list.c @@ -11,7 +11,7 @@ * "nmtui edit". */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmtui.h" #include "nmtui-edit.h" diff --git a/clients/tui/nmt-editor-grid.c b/clients/tui/nmt-editor-grid.c index c7e657a..9bd0706 100644 --- a/clients/tui/nmt-editor-grid.c +++ b/clients/tui/nmt-editor-grid.c @@ -24,7 +24,7 @@ * section border into account as well. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-editor-grid.h" diff --git a/clients/tui/nmt-editor-page-device.c b/clients/tui/nmt-editor-page-device.c index e899b3a..18f886b 100644 --- a/clients/tui/nmt-editor-page-device.c +++ b/clients/tui/nmt-editor-page-device.c @@ -15,7 +15,7 @@ * an actual page type. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-editor-page-device.h" diff --git a/clients/tui/nmt-editor-page.c b/clients/tui/nmt-editor-page.c index 200462b..24ff9be 100644 --- a/clients/tui/nmt-editor-page.c +++ b/clients/tui/nmt-editor-page.c @@ -11,7 +11,7 @@ * A "page" is a set of related #NmtEditorSections. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-editor-page.h" diff --git a/clients/tui/nmt-editor-section.c b/clients/tui/nmt-editor-section.c index 34eaced..0b85cd2 100644 --- a/clients/tui/nmt-editor-section.c +++ b/clients/tui/nmt-editor-section.c @@ -10,7 +10,7 @@ * #NmtEditorSection is the abstract base class for #NmtEditor sections. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-editor-section.h" #include "nmt-newt-toggle-button.h" diff --git a/clients/tui/nmt-editor.c b/clients/tui/nmt-editor.c index eb5d2fb..2f5a09b 100644 --- a/clients/tui/nmt-editor.c +++ b/clients/tui/nmt-editor.c @@ -10,7 +10,7 @@ * #NmtEditor is the top-level form for editing a connection. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-editor.h" diff --git a/clients/tui/nmt-ip-entry.c b/clients/tui/nmt-ip-entry.c index 2d292c9..e6d1306 100644 --- a/clients/tui/nmt-ip-entry.c +++ b/clients/tui/nmt-ip-entry.c @@ -14,7 +14,7 @@ * contains a valid IP address. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include #include diff --git a/clients/tui/nmt-mac-entry.c b/clients/tui/nmt-mac-entry.c index db49e56..2768eaa 100644 --- a/clients/tui/nmt-mac-entry.c +++ b/clients/tui/nmt-mac-entry.c @@ -13,7 +13,7 @@ * on whether it currently contains a valid hardware address. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-mac-entry.h" diff --git a/clients/tui/nmt-mtu-entry.c b/clients/tui/nmt-mtu-entry.c index 096f8b4..7b1c0f3 100644 --- a/clients/tui/nmt-mtu-entry.c +++ b/clients/tui/nmt-mtu-entry.c @@ -17,7 +17,7 @@ * indicating the units used by the entry. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include diff --git a/clients/tui/nmt-page-bond.c b/clients/tui/nmt-page-bond.c index d24d631..9c86a49 100644 --- a/clients/tui/nmt-page-bond.c +++ b/clients/tui/nmt-page-bond.c @@ -12,7 +12,7 @@ * can't just use #GBinding. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-page-bond.h" diff --git a/clients/tui/nmt-page-bridge-port.c b/clients/tui/nmt-page-bridge-port.c index fc1e9ed..228acc2 100644 --- a/clients/tui/nmt-page-bridge-port.c +++ b/clients/tui/nmt-page-bridge-port.c @@ -8,7 +8,7 @@ * @short_description: The editor page for Bridge ports */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-page-bridge-port.h" diff --git a/clients/tui/nmt-page-bridge.c b/clients/tui/nmt-page-bridge.c index b2120cc..7fc85eb 100644 --- a/clients/tui/nmt-page-bridge.c +++ b/clients/tui/nmt-page-bridge.c @@ -8,7 +8,7 @@ * @short_description: The editor page for Bridge connections */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-page-bridge.h" diff --git a/clients/tui/nmt-page-dsl.c b/clients/tui/nmt-page-dsl.c index ded0fd4..8e1e69f 100644 --- a/clients/tui/nmt-page-dsl.c +++ b/clients/tui/nmt-page-dsl.c @@ -8,7 +8,7 @@ * @short_description: The editor page for DSL connections */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-page-dsl.h" #include "nmt-page-ethernet.h" diff --git a/clients/tui/nmt-page-ethernet.c b/clients/tui/nmt-page-ethernet.c index db6b559..61ef811 100644 --- a/clients/tui/nmt-page-ethernet.c +++ b/clients/tui/nmt-page-ethernet.c @@ -8,7 +8,7 @@ * @short_description: The editor page for Ethernet connections */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-page-ethernet.h" diff --git a/clients/tui/nmt-page-infiniband.c b/clients/tui/nmt-page-infiniband.c index 00e87ec..0529caf 100644 --- a/clients/tui/nmt-page-infiniband.c +++ b/clients/tui/nmt-page-infiniband.c @@ -8,7 +8,7 @@ * @short_description: The editor page for InfiniBand connections */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-page-infiniband.h" #include "nmt-mtu-entry.h" diff --git a/clients/tui/nmt-page-ip-tunnel.c b/clients/tui/nmt-page-ip-tunnel.c index 02b0a25..ab58038 100644 --- a/clients/tui/nmt-page-ip-tunnel.c +++ b/clients/tui/nmt-page-ip-tunnel.c @@ -7,7 +7,7 @@ * @short_description: The editor page for IP tunnel connections */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-page-ip-tunnel.h" diff --git a/clients/tui/nmt-page-ip4.c b/clients/tui/nmt-page-ip4.c index 7611567..1f01155 100644 --- a/clients/tui/nmt-page-ip4.c +++ b/clients/tui/nmt-page-ip4.c @@ -8,7 +8,7 @@ * @short_description: The editor page for IP4 configuration */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include diff --git a/clients/tui/nmt-page-ip6.c b/clients/tui/nmt-page-ip6.c index d44d0b9..f4e4f3d 100644 --- a/clients/tui/nmt-page-ip6.c +++ b/clients/tui/nmt-page-ip6.c @@ -8,7 +8,7 @@ * @short_description: The editor page for IP6 configuration */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include diff --git a/clients/tui/nmt-page-ppp.c b/clients/tui/nmt-page-ppp.c index 9e5564c..b60835a 100644 --- a/clients/tui/nmt-page-ppp.c +++ b/clients/tui/nmt-page-ppp.c @@ -8,7 +8,7 @@ * @short_description: The editor page for PPP configuration */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include diff --git a/clients/tui/nmt-page-team-port.c b/clients/tui/nmt-page-team-port.c index 2251094..fd71140 100644 --- a/clients/tui/nmt-page-team-port.c +++ b/clients/tui/nmt-page-team-port.c @@ -8,7 +8,7 @@ * @short_description: The editor page for Team ports. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-page-team-port.h" diff --git a/clients/tui/nmt-page-team.c b/clients/tui/nmt-page-team.c index 705ff95..f0a3f83 100644 --- a/clients/tui/nmt-page-team.c +++ b/clients/tui/nmt-page-team.c @@ -8,7 +8,7 @@ * @short_description: The editor page for Team connections */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-page-team.h" diff --git a/clients/tui/nmt-page-vlan.c b/clients/tui/nmt-page-vlan.c index ad8ab49..549156d 100644 --- a/clients/tui/nmt-page-vlan.c +++ b/clients/tui/nmt-page-vlan.c @@ -8,7 +8,7 @@ * @short_description: The editor page for VLAN connections */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-editor-bindings.h" diff --git a/clients/tui/nmt-page-wifi.c b/clients/tui/nmt-page-wifi.c index a0b66fc..817e23b 100644 --- a/clients/tui/nmt-page-wifi.c +++ b/clients/tui/nmt-page-wifi.c @@ -12,7 +12,7 @@ * properties. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include #include diff --git a/clients/tui/nmt-password-dialog.c b/clients/tui/nmt-password-dialog.c index 845aa4a..679bf05 100644 --- a/clients/tui/nmt-password-dialog.c +++ b/clients/tui/nmt-password-dialog.c @@ -11,7 +11,7 @@ * secrets when activating a connection. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-password-dialog.h" #include "nm-secret-agent-simple.h" diff --git a/clients/tui/nmt-password-fields.c b/clients/tui/nmt-password-fields.c index 77514bb..c4c54a2 100644 --- a/clients/tui/nmt-password-fields.c +++ b/clients/tui/nmt-password-fields.c @@ -12,7 +12,7 @@ * "Show password" checkbox that toggles whether the password is visible. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-password-fields.h" diff --git a/clients/tui/nmt-route-editor.c b/clients/tui/nmt-route-editor.c index a89e2be..d2e5412 100644 --- a/clients/tui/nmt-route-editor.c +++ b/clients/tui/nmt-route-editor.c @@ -12,7 +12,7 @@ * wide to fit into the main window. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-route-editor.h" #include "nmt-route-table.h" diff --git a/clients/tui/nmt-route-entry.c b/clients/tui/nmt-route-entry.c index 025d712..545eaf1 100644 --- a/clients/tui/nmt-route-entry.c +++ b/clients/tui/nmt-route-entry.c @@ -13,7 +13,7 @@ * This is used as a building block by #NmtRouteTable. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include #include diff --git a/clients/tui/nmt-route-table.c b/clients/tui/nmt-route-table.c index 4386e50..e381494 100644 --- a/clients/tui/nmt-route-table.c +++ b/clients/tui/nmt-route-table.c @@ -11,7 +11,7 @@ * and buttons to add and remove entries. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include #include diff --git a/clients/tui/nmt-slave-list.c b/clients/tui/nmt-slave-list.c index 5e787dc..9a2f6d2 100644 --- a/clients/tui/nmt-slave-list.c +++ b/clients/tui/nmt-slave-list.c @@ -11,7 +11,7 @@ * slaves of a connection. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-slave-list.h" diff --git a/clients/tui/nmt-utils.c b/clients/tui/nmt-utils.c index e80c500..39889e1 100644 --- a/clients/tui/nmt-utils.c +++ b/clients/tui/nmt-utils.c @@ -8,7 +8,7 @@ * @short_description: Miscellaneous nmtui-specific utilities */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-utils.h" diff --git a/clients/tui/nmt-widget-list.c b/clients/tui/nmt-widget-list.c index dd645c4..d25c01c 100644 --- a/clients/tui/nmt-widget-list.c +++ b/clients/tui/nmt-widget-list.c @@ -17,7 +17,7 @@ * FIXME: The way this works is sort of weird. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-widget-list.h" diff --git a/clients/tui/nmtui-connect.c b/clients/tui/nmtui-connect.c index 3618207..356badb 100644 --- a/clients/tui/nmtui-connect.c +++ b/clients/tui/nmtui-connect.c @@ -11,7 +11,7 @@ * including presenting a password dialog if necessary. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include diff --git a/clients/tui/nmtui-edit.c b/clients/tui/nmtui-edit.c index ac205b0..8a88e11 100644 --- a/clients/tui/nmtui-edit.c +++ b/clients/tui/nmtui-edit.c @@ -10,7 +10,7 @@ * nmtui-edit implements editing #NMConnections. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include diff --git a/clients/tui/nmtui-hostname.c b/clients/tui/nmtui-hostname.c index 494827c..07e0f60 100644 --- a/clients/tui/nmtui-hostname.c +++ b/clients/tui/nmtui-hostname.c @@ -10,7 +10,7 @@ * nmtui-hostname implements the "set hostname" functionality */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmt-newt.h" diff --git a/clients/tui/nmtui.c b/clients/tui/nmtui.c index f73e087..73ead40 100644 --- a/clients/tui/nmtui.c +++ b/clients/tui/nmtui.c @@ -11,7 +11,7 @@ * nmtui_edit(), and nmtui_hostname(). */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nmtui.h" diff --git a/configure b/configure index 03330b0..6ffee34 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for NetworkManager 1.29.11. +# Generated by GNU Autoconf 2.69 for NetworkManager 1.29.90. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='NetworkManager' PACKAGE_TARNAME='NetworkManager' -PACKAGE_VERSION='1.29.11' -PACKAGE_STRING='NetworkManager 1.29.11' +PACKAGE_VERSION='1.29.90' +PACKAGE_STRING='NetworkManager 1.29.90' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager' PACKAGE_URL='' @@ -1726,7 +1726,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures NetworkManager 1.29.11 to adapt to many kinds of systems. +\`configure' configures NetworkManager 1.29.90 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1796,7 +1796,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of NetworkManager 1.29.11:";; + short | recursive ) echo "Configuration of NetworkManager 1.29.90:";; esac cat <<\_ACEOF @@ -2142,7 +2142,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -NetworkManager configure 1.29.11 +NetworkManager configure 1.29.90 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2915,7 +2915,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by NetworkManager $as_me 1.29.11, which was +It was created by NetworkManager $as_me 1.29.90, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3785,7 +3785,7 @@ fi # Define the identity of the package. PACKAGE='NetworkManager' - VERSION='1.29.11' + VERSION='1.29.90' cat >>confdefs.h <<_ACEOF @@ -17969,8 +17969,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu NM_MAJOR_VERSION=1 NM_MINOR_VERSION=29 -NM_MICRO_VERSION=11 -NM_VERSION=1.29.11 +NM_MICRO_VERSION=90 +NM_VERSION=1.29.90 @@ -17978,7 +17978,7 @@ NM_VERSION=1.29.11 -NM_GIT_SHA=49ea978f0849ef9bcf3b0fd05fbb9fa05964206b +NM_GIT_SHA=4e11b182a054313e6c785796d7665f8e2f1be4fe if test """" != "no-config-h" ; then @@ -28740,7 +28740,7 @@ fi -ac_config_files="$ac_config_files Makefile shared/nm-version-macros.h libnm/libnm.pc po/Makefile.in data/org.freedesktop.NetworkManager.policy.in docs/api/Makefile docs/api/version.xml docs/libnm/Makefile docs/libnm/version.xml NetworkManager.pc" +ac_config_files="$ac_config_files Makefile libnm-core/nm-version-macros.h libnm/libnm.pc po/Makefile.in data/org.freedesktop.NetworkManager.policy.in docs/api/Makefile docs/api/version.xml docs/libnm/Makefile docs/libnm/version.xml NetworkManager.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -29448,7 +29448,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by NetworkManager $as_me 1.29.11, which was +This file was extended by NetworkManager $as_me 1.29.90, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -29514,7 +29514,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -NetworkManager config.status 1.29.11 +NetworkManager config.status 1.29.90 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -30037,7 +30037,7 @@ do "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "vapi") CONFIG_COMMANDS="$CONFIG_COMMANDS vapi" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "shared/nm-version-macros.h") CONFIG_FILES="$CONFIG_FILES shared/nm-version-macros.h" ;; + "libnm-core/nm-version-macros.h") CONFIG_FILES="$CONFIG_FILES libnm-core/nm-version-macros.h" ;; "libnm/libnm.pc") CONFIG_FILES="$CONFIG_FILES libnm/libnm.pc" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "data/org.freedesktop.NetworkManager.policy.in") CONFIG_FILES="$CONFIG_FILES data/org.freedesktop.NetworkManager.policy.in" ;; diff --git a/configure.ac b/configure.ac index cd5837e..98c2259 100644 --- a/configure.ac +++ b/configure.ac @@ -8,7 +8,7 @@ dnl "shared/nm-version-macros.h.in" dnl - update number in meson.build m4_define([nm_major_version], [1]) m4_define([nm_minor_version], [29]) -m4_define([nm_micro_version], [11]) +m4_define([nm_micro_version], [90]) m4_define([nm_version], [nm_major_version.nm_minor_version.nm_micro_version]) @@ -1293,7 +1293,7 @@ AC_SUBST(AM_CFLAGS) AC_CONFIG_FILES([ Makefile -shared/nm-version-macros.h +libnm-core/nm-version-macros.h libnm/libnm.pc po/Makefile.in data/org.freedesktop.NetworkManager.policy.in diff --git a/dispatcher/meson.build b/dispatcher/meson.build index a99c575..d12e471 100644 --- a/dispatcher/meson.build +++ b/dispatcher/meson.build @@ -2,8 +2,6 @@ dispatcher_inc = include_directories('.') -name = 'nm-dispatcher' - configure_file( input: 'org.freedesktop.nm_dispatcher.service.in', output: '@BASENAME@', @@ -16,36 +14,37 @@ install_data( install_dir: dbus_conf_dir, ) -deps = [ - libnm_dep, - libnm_nm_default_dep, - libnm_libnm_aux_dep, -] - -c_flags = [ - '-DG_LOG_DOMAIN="@0@"'.format(name), - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT', -] - libnm_dispatcher_core = static_library( - name + '-core', + 'nm-dispatcher-core', sources: 'nm-dispatcher-utils.c', - dependencies: deps, - c_args: c_flags, + dependencies: [ + libnm_dep, + libnm_nm_default_dep, + libnm_libnm_aux_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="nm-dispatcher"', + ], ) nmdbus_dispatcher_sources = gnome.gdbus_codegen( 'nmdbus-dispatcher', - name + '.xml', + 'nm-dispatcher.xml', interface_prefix: 'org.freedesktop', namespace: 'NMDBus', ) executable( - name, - name + '.c', - dependencies: deps, - c_args: c_flags, + 'nm-dispatcher', + 'nm-dispatcher.c', + dependencies: [ + libnm_dep, + libnm_nm_default_dep, + libnm_libnm_aux_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="nm-dispatcher"', + ], link_with: libnm_dispatcher_core, link_args: ldflags_linker_script_binary, link_depends: linker_script_binary, diff --git a/dispatcher/nm-dispatcher-utils.c b/dispatcher/nm-dispatcher-utils.c index aa0f006..f1ec979 100644 --- a/dispatcher/nm-dispatcher-utils.c +++ b/dispatcher/nm-dispatcher-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-dispatcher-utils.h" diff --git a/dispatcher/nm-dispatcher.c b/dispatcher/nm-dispatcher.c index 548097b..9891bf3 100644 --- a/dispatcher/nm-dispatcher.c +++ b/dispatcher/nm-dispatcher.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include #include diff --git a/dispatcher/tests/meson.build b/dispatcher/tests/meson.build index 90f3cad..84b4b61 100644 --- a/dispatcher/tests/meson.build +++ b/dispatcher/tests/meson.build @@ -1,24 +1,24 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -test_unit = 'test-dispatcher-envp' - exe = executable( - test_unit, - [test_unit + '.c', nmdbus_dispatcher_sources], + 'test-dispatcher-envp', + [ + 'test-dispatcher-envp.c', + nmdbus_dispatcher_sources, + ], include_directories: dispatcher_inc, dependencies: [ libnm_nm_default_dep, libnm_glib_aux_dep, ], c_args: [ - '-DNETWORKMANAGER_COMPILATION_TEST', - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT', + '-DG_LOG_DOMAIN="test"', ] + introspection_extra_cflags, link_with: libnm_dispatcher_core, ) test( - 'dispatcher/' + test_unit, + 'dispatcher/test-dispatcher-envp', test_script, args: test_args + [exe.full_path()], ) diff --git a/dispatcher/tests/test-dispatcher-envp.c b/dispatcher/tests/test-dispatcher-envp.c index 073d95b..4c37dd6 100644 --- a/dispatcher/tests/test-dispatcher-envp.c +++ b/dispatcher/tests/test-dispatcher-envp.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include #include diff --git a/docs/api/html/index.html b/docs/api/html/index.html index 6b5b647..91c5b41 100644 --- a/docs/api/html/index.html +++ b/docs/api/html/index.html @@ -16,7 +16,7 @@

- for NetworkManager 1.29.11 + for NetworkManager 1.29.90 The latest version of this documentation can be found on-line at https://developer.gnome.org/NetworkManager/stable/. diff --git a/docs/api/html/ix01.html b/docs/api/html/ix01.html index 5be626f..0c532ac 100644 --- a/docs/api/html/ix01.html +++ b/docs/api/html/ix01.html @@ -26,1689 +26,1689 @@

Symbols

-
org.freedesktop.NetworkManager.AccessPoint, org.freedesktop.NetworkManager.AccessPoint +
org.freedesktop.NetworkManager.AccessPoint, org.freedesktop.NetworkManager.AccessPoint
-
org.freedesktop.NetworkManager.AccessPoint::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.AccessPoint::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.AccessPoint:Flags, The "Flags" property +
org.freedesktop.NetworkManager.AccessPoint:Flags, The "Flags" property
-
org.freedesktop.NetworkManager.AccessPoint:Frequency, The "Frequency" property +
org.freedesktop.NetworkManager.AccessPoint:Frequency, The "Frequency" property
-
org.freedesktop.NetworkManager.AccessPoint:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.AccessPoint:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.AccessPoint:LastSeen, The "LastSeen" property +
org.freedesktop.NetworkManager.AccessPoint:LastSeen, The "LastSeen" property
-
org.freedesktop.NetworkManager.AccessPoint:MaxBitrate, The "MaxBitrate" property +
org.freedesktop.NetworkManager.AccessPoint:MaxBitrate, The "MaxBitrate" property
-
org.freedesktop.NetworkManager.AccessPoint:Mode, The "Mode" property +
org.freedesktop.NetworkManager.AccessPoint:Mode, The "Mode" property
-
org.freedesktop.NetworkManager.AccessPoint:RsnFlags, The "RsnFlags" property +
org.freedesktop.NetworkManager.AccessPoint:RsnFlags, The "RsnFlags" property
-
org.freedesktop.NetworkManager.AccessPoint:Ssid, The "Ssid" property +
org.freedesktop.NetworkManager.AccessPoint:Ssid, The "Ssid" property
-
org.freedesktop.NetworkManager.AccessPoint:Strength, The "Strength" property +
org.freedesktop.NetworkManager.AccessPoint:Strength, The "Strength" property
-
org.freedesktop.NetworkManager.AccessPoint:WpaFlags, The "WpaFlags" property +
org.freedesktop.NetworkManager.AccessPoint:WpaFlags, The "WpaFlags" property
-
org.freedesktop.NetworkManager.AgentManager, org.freedesktop.NetworkManager.AgentManager +
org.freedesktop.NetworkManager.AgentManager, org.freedesktop.NetworkManager.AgentManager
-
org.freedesktop.NetworkManager.AgentManager.Register(), The Register() method +
org.freedesktop.NetworkManager.AgentManager.Register(), The Register() method
-
org.freedesktop.NetworkManager.AgentManager.RegisterWithCapabilities(), The RegisterWithCapabilities() method +
org.freedesktop.NetworkManager.AgentManager.RegisterWithCapabilities(), The RegisterWithCapabilities() method
-
org.freedesktop.NetworkManager.AgentManager.Unregister(), The Unregister() method +
org.freedesktop.NetworkManager.AgentManager.Unregister(), The Unregister() method
-
org.freedesktop.NetworkManager.Device, org.freedesktop.NetworkManager.Device +
org.freedesktop.NetworkManager.Device, org.freedesktop.NetworkManager.Device
-
org.freedesktop.NetworkManager.Device.Adsl, org.freedesktop.NetworkManager.Device.Adsl +
org.freedesktop.NetworkManager.Device.Adsl, org.freedesktop.NetworkManager.Device.Adsl
-
org.freedesktop.NetworkManager.Device.Adsl::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Adsl::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Adsl:Carrier, The "Carrier" property +
org.freedesktop.NetworkManager.Device.Adsl:Carrier, The "Carrier" property
-
org.freedesktop.NetworkManager.Device.Bluetooth, org.freedesktop.NetworkManager.Device.Bluetooth +
org.freedesktop.NetworkManager.Device.Bluetooth, org.freedesktop.NetworkManager.Device.Bluetooth
-
org.freedesktop.NetworkManager.Device.Bluetooth::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Bluetooth::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Bluetooth:BtCapabilities, The "BtCapabilities" property +
org.freedesktop.NetworkManager.Device.Bluetooth:BtCapabilities, The "BtCapabilities" property
-
org.freedesktop.NetworkManager.Device.Bluetooth:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Bluetooth:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.Bluetooth:Name, The "Name" property +
org.freedesktop.NetworkManager.Device.Bluetooth:Name, The "Name" property
-
org.freedesktop.NetworkManager.Device.Bond, org.freedesktop.NetworkManager.Device.Bond +
org.freedesktop.NetworkManager.Device.Bond, org.freedesktop.NetworkManager.Device.Bond
-
org.freedesktop.NetworkManager.Device.Bond::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Bond::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Bond:Carrier, The "Carrier" property +
org.freedesktop.NetworkManager.Device.Bond:Carrier, The "Carrier" property
-
org.freedesktop.NetworkManager.Device.Bond:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Bond:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.Bond:Slaves, The "Slaves" property +
org.freedesktop.NetworkManager.Device.Bond:Slaves, The "Slaves" property
-
org.freedesktop.NetworkManager.Device.Bridge, org.freedesktop.NetworkManager.Device.Bridge +
org.freedesktop.NetworkManager.Device.Bridge, org.freedesktop.NetworkManager.Device.Bridge
-
org.freedesktop.NetworkManager.Device.Bridge::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Bridge::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Bridge:Carrier, The "Carrier" property +
org.freedesktop.NetworkManager.Device.Bridge:Carrier, The "Carrier" property
-
org.freedesktop.NetworkManager.Device.Bridge:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Bridge:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.Bridge:Slaves, The "Slaves" property +
org.freedesktop.NetworkManager.Device.Bridge:Slaves, The "Slaves" property
-
org.freedesktop.NetworkManager.Device.Delete(), The Delete() method +
org.freedesktop.NetworkManager.Device.Delete(), The Delete() method
-
org.freedesktop.NetworkManager.Device.Disconnect(), The Disconnect() method +
org.freedesktop.NetworkManager.Device.Disconnect(), The Disconnect() method
-
org.freedesktop.NetworkManager.Device.Dummy, org.freedesktop.NetworkManager.Device.Dummy +
org.freedesktop.NetworkManager.Device.Dummy, org.freedesktop.NetworkManager.Device.Dummy
-
org.freedesktop.NetworkManager.Device.Dummy::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Dummy::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Dummy:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Dummy:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.Generic, org.freedesktop.NetworkManager.Device.Generic +
org.freedesktop.NetworkManager.Device.Generic, org.freedesktop.NetworkManager.Device.Generic
-
org.freedesktop.NetworkManager.Device.Generic::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Generic::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Generic:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Generic:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.Generic:TypeDescription, The "TypeDescription" property +
org.freedesktop.NetworkManager.Device.Generic:TypeDescription, The "TypeDescription" property
-
org.freedesktop.NetworkManager.Device.GetAppliedConnection(), The GetAppliedConnection() method +
org.freedesktop.NetworkManager.Device.GetAppliedConnection(), The GetAppliedConnection() method
-
org.freedesktop.NetworkManager.Device.Infiniband, org.freedesktop.NetworkManager.Device.Infiniband +
org.freedesktop.NetworkManager.Device.Infiniband, org.freedesktop.NetworkManager.Device.Infiniband
-
org.freedesktop.NetworkManager.Device.Infiniband::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Infiniband::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Infiniband:Carrier, The "Carrier" property +
org.freedesktop.NetworkManager.Device.Infiniband:Carrier, The "Carrier" property
-
org.freedesktop.NetworkManager.Device.Infiniband:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Infiniband:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.IPTunnel, org.freedesktop.NetworkManager.Device.IPTunnel +
org.freedesktop.NetworkManager.Device.IPTunnel, org.freedesktop.NetworkManager.Device.IPTunnel
-
org.freedesktop.NetworkManager.Device.IPTunnel::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.IPTunnel::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.IPTunnel:EncapsulationLimit, The "EncapsulationLimit" property +
org.freedesktop.NetworkManager.Device.IPTunnel:EncapsulationLimit, The "EncapsulationLimit" property
-
org.freedesktop.NetworkManager.Device.IPTunnel:Flags, The "Flags" property +
org.freedesktop.NetworkManager.Device.IPTunnel:Flags, The "Flags" property
-
org.freedesktop.NetworkManager.Device.IPTunnel:FlowLabel, The "FlowLabel" property +
org.freedesktop.NetworkManager.Device.IPTunnel:FlowLabel, The "FlowLabel" property
-
org.freedesktop.NetworkManager.Device.IPTunnel:InputKey, The "InputKey" property +
org.freedesktop.NetworkManager.Device.IPTunnel:InputKey, The "InputKey" property
-
org.freedesktop.NetworkManager.Device.IPTunnel:Local, The "Local" property +
org.freedesktop.NetworkManager.Device.IPTunnel:Local, The "Local" property
-
org.freedesktop.NetworkManager.Device.IPTunnel:Mode, The "Mode" property +
org.freedesktop.NetworkManager.Device.IPTunnel:Mode, The "Mode" property
-
org.freedesktop.NetworkManager.Device.IPTunnel:OutputKey, The "OutputKey" property +
org.freedesktop.NetworkManager.Device.IPTunnel:OutputKey, The "OutputKey" property
-
org.freedesktop.NetworkManager.Device.IPTunnel:Parent, The "Parent" property +
org.freedesktop.NetworkManager.Device.IPTunnel:Parent, The "Parent" property
-
org.freedesktop.NetworkManager.Device.IPTunnel:PathMtuDiscovery, The "PathMtuDiscovery" property +
org.freedesktop.NetworkManager.Device.IPTunnel:PathMtuDiscovery, The "PathMtuDiscovery" property
-
org.freedesktop.NetworkManager.Device.IPTunnel:Remote, The "Remote" property +
org.freedesktop.NetworkManager.Device.IPTunnel:Remote, The "Remote" property
-
org.freedesktop.NetworkManager.Device.IPTunnel:Tos, The "Tos" property +
org.freedesktop.NetworkManager.Device.IPTunnel:Tos, The "Tos" property
-
org.freedesktop.NetworkManager.Device.IPTunnel:Ttl, The "Ttl" property +
org.freedesktop.NetworkManager.Device.IPTunnel:Ttl, The "Ttl" property
-
org.freedesktop.NetworkManager.Device.Lowpan, org.freedesktop.NetworkManager.Device.Lowpan +
org.freedesktop.NetworkManager.Device.Lowpan, org.freedesktop.NetworkManager.Device.Lowpan
-
org.freedesktop.NetworkManager.Device.Lowpan:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Lowpan:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.Lowpan:Parent, The "Parent" property +
org.freedesktop.NetworkManager.Device.Lowpan:Parent, The "Parent" property
-
org.freedesktop.NetworkManager.Device.Macsec, org.freedesktop.NetworkManager.Device.Macsec +
org.freedesktop.NetworkManager.Device.Macsec, org.freedesktop.NetworkManager.Device.Macsec
-
org.freedesktop.NetworkManager.Device.Macsec::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Macsec::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Macsec:CipherSuite, The "CipherSuite" property +
org.freedesktop.NetworkManager.Device.Macsec:CipherSuite, The "CipherSuite" property
-
org.freedesktop.NetworkManager.Device.Macsec:EncodingSa, The "EncodingSa" property +
org.freedesktop.NetworkManager.Device.Macsec:EncodingSa, The "EncodingSa" property
-
org.freedesktop.NetworkManager.Device.Macsec:Encrypt, The "Encrypt" property +
org.freedesktop.NetworkManager.Device.Macsec:Encrypt, The "Encrypt" property
-
org.freedesktop.NetworkManager.Device.Macsec:Es, The "Es" property +
org.freedesktop.NetworkManager.Device.Macsec:Es, The "Es" property
-
org.freedesktop.NetworkManager.Device.Macsec:IcvLength, The "IcvLength" property +
org.freedesktop.NetworkManager.Device.Macsec:IcvLength, The "IcvLength" property
-
org.freedesktop.NetworkManager.Device.Macsec:IncludeSci, The "IncludeSci" property +
org.freedesktop.NetworkManager.Device.Macsec:IncludeSci, The "IncludeSci" property
-
org.freedesktop.NetworkManager.Device.Macsec:Parent, The "Parent" property +
org.freedesktop.NetworkManager.Device.Macsec:Parent, The "Parent" property
-
org.freedesktop.NetworkManager.Device.Macsec:Protect, The "Protect" property +
org.freedesktop.NetworkManager.Device.Macsec:Protect, The "Protect" property
-
org.freedesktop.NetworkManager.Device.Macsec:ReplayProtect, The "ReplayProtect" property +
org.freedesktop.NetworkManager.Device.Macsec:ReplayProtect, The "ReplayProtect" property
-
org.freedesktop.NetworkManager.Device.Macsec:Scb, The "Scb" property +
org.freedesktop.NetworkManager.Device.Macsec:Scb, The "Scb" property
-
org.freedesktop.NetworkManager.Device.Macsec:Sci, The "Sci" property +
org.freedesktop.NetworkManager.Device.Macsec:Sci, The "Sci" property
-
org.freedesktop.NetworkManager.Device.Macsec:Validation, The "Validation" property +
org.freedesktop.NetworkManager.Device.Macsec:Validation, The "Validation" property
-
org.freedesktop.NetworkManager.Device.Macsec:Window, The "Window" property +
org.freedesktop.NetworkManager.Device.Macsec:Window, The "Window" property
-
org.freedesktop.NetworkManager.Device.Macvlan, org.freedesktop.NetworkManager.Device.Macvlan +
org.freedesktop.NetworkManager.Device.Macvlan, org.freedesktop.NetworkManager.Device.Macvlan
-
org.freedesktop.NetworkManager.Device.Macvlan::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Macvlan::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Macvlan:Mode, The "Mode" property +
org.freedesktop.NetworkManager.Device.Macvlan:Mode, The "Mode" property
-
org.freedesktop.NetworkManager.Device.Macvlan:NoPromisc, The "NoPromisc" property +
org.freedesktop.NetworkManager.Device.Macvlan:NoPromisc, The "NoPromisc" property
-
org.freedesktop.NetworkManager.Device.Macvlan:Parent, The "Parent" property +
org.freedesktop.NetworkManager.Device.Macvlan:Parent, The "Parent" property
-
org.freedesktop.NetworkManager.Device.Macvlan:Tap, The "Tap" property +
org.freedesktop.NetworkManager.Device.Macvlan:Tap, The "Tap" property
-
org.freedesktop.NetworkManager.Device.Modem, org.freedesktop.NetworkManager.Device.Modem +
org.freedesktop.NetworkManager.Device.Modem, org.freedesktop.NetworkManager.Device.Modem
-
org.freedesktop.NetworkManager.Device.Modem::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Modem::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Modem:Apn, The "Apn" property +
org.freedesktop.NetworkManager.Device.Modem:Apn, The "Apn" property
-
org.freedesktop.NetworkManager.Device.Modem:CurrentCapabilities, The "CurrentCapabilities" property +
org.freedesktop.NetworkManager.Device.Modem:CurrentCapabilities, The "CurrentCapabilities" property
-
org.freedesktop.NetworkManager.Device.Modem:DeviceId, The "DeviceId" property +
org.freedesktop.NetworkManager.Device.Modem:DeviceId, The "DeviceId" property
-
org.freedesktop.NetworkManager.Device.Modem:ModemCapabilities, The "ModemCapabilities" property +
org.freedesktop.NetworkManager.Device.Modem:ModemCapabilities, The "ModemCapabilities" property
-
org.freedesktop.NetworkManager.Device.Modem:OperatorCode, The "OperatorCode" property +
org.freedesktop.NetworkManager.Device.Modem:OperatorCode, The "OperatorCode" property
-
org.freedesktop.NetworkManager.Device.OlpcMesh, org.freedesktop.NetworkManager.Device.OlpcMesh +
org.freedesktop.NetworkManager.Device.OlpcMesh, org.freedesktop.NetworkManager.Device.OlpcMesh
-
org.freedesktop.NetworkManager.Device.OlpcMesh::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.OlpcMesh::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.OlpcMesh:ActiveChannel, The "ActiveChannel" property +
org.freedesktop.NetworkManager.Device.OlpcMesh:ActiveChannel, The "ActiveChannel" property
-
org.freedesktop.NetworkManager.Device.OlpcMesh:Companion, The "Companion" property +
org.freedesktop.NetworkManager.Device.OlpcMesh:Companion, The "Companion" property
-
org.freedesktop.NetworkManager.Device.OlpcMesh:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.OlpcMesh:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.OvsBridge, org.freedesktop.NetworkManager.Device.OvsBridge +
org.freedesktop.NetworkManager.Device.OvsBridge, org.freedesktop.NetworkManager.Device.OvsBridge
-
org.freedesktop.NetworkManager.Device.OvsBridge::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.OvsBridge::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.OvsBridge:Slaves, The "Slaves" property +
org.freedesktop.NetworkManager.Device.OvsBridge:Slaves, The "Slaves" property
-
org.freedesktop.NetworkManager.Device.OvsInterface, org.freedesktop.NetworkManager.Device.OvsInterface +
org.freedesktop.NetworkManager.Device.OvsInterface, org.freedesktop.NetworkManager.Device.OvsInterface
-
org.freedesktop.NetworkManager.Device.OvsInterface::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.OvsInterface::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.OvsPort, org.freedesktop.NetworkManager.Device.OvsPort +
org.freedesktop.NetworkManager.Device.OvsPort, org.freedesktop.NetworkManager.Device.OvsPort
-
org.freedesktop.NetworkManager.Device.OvsPort::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.OvsPort::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.OvsPort:Slaves, The "Slaves" property +
org.freedesktop.NetworkManager.Device.OvsPort:Slaves, The "Slaves" property
-
org.freedesktop.NetworkManager.Device.Ppp, org.freedesktop.NetworkManager.Device.Ppp +
org.freedesktop.NetworkManager.Device.Ppp, org.freedesktop.NetworkManager.Device.Ppp
-
org.freedesktop.NetworkManager.Device.Ppp::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Ppp::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Reapply(), The Reapply() method +
org.freedesktop.NetworkManager.Device.Reapply(), The Reapply() method
-
org.freedesktop.NetworkManager.Device.Statistics, org.freedesktop.NetworkManager.Device.Statistics +
org.freedesktop.NetworkManager.Device.Statistics, org.freedesktop.NetworkManager.Device.Statistics
-
org.freedesktop.NetworkManager.Device.Statistics::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Statistics::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Statistics:RefreshRateMs, The "RefreshRateMs" property +
org.freedesktop.NetworkManager.Device.Statistics:RefreshRateMs, The "RefreshRateMs" property
-
org.freedesktop.NetworkManager.Device.Statistics:RxBytes, The "RxBytes" property +
org.freedesktop.NetworkManager.Device.Statistics:RxBytes, The "RxBytes" property
-
org.freedesktop.NetworkManager.Device.Statistics:TxBytes, The "TxBytes" property +
org.freedesktop.NetworkManager.Device.Statistics:TxBytes, The "TxBytes" property
-
org.freedesktop.NetworkManager.Device.Team, org.freedesktop.NetworkManager.Device.Team +
org.freedesktop.NetworkManager.Device.Team, org.freedesktop.NetworkManager.Device.Team
-
org.freedesktop.NetworkManager.Device.Team::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Team::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Team:Carrier, The "Carrier" property +
org.freedesktop.NetworkManager.Device.Team:Carrier, The "Carrier" property
-
org.freedesktop.NetworkManager.Device.Team:Config, The "Config" property +
org.freedesktop.NetworkManager.Device.Team:Config, The "Config" property
-
org.freedesktop.NetworkManager.Device.Team:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Team:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.Team:Slaves, The "Slaves" property +
org.freedesktop.NetworkManager.Device.Team:Slaves, The "Slaves" property
-
org.freedesktop.NetworkManager.Device.Tun, org.freedesktop.NetworkManager.Device.Tun +
org.freedesktop.NetworkManager.Device.Tun, org.freedesktop.NetworkManager.Device.Tun
-
org.freedesktop.NetworkManager.Device.Tun::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Tun::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Tun:Group, The "Group" property +
org.freedesktop.NetworkManager.Device.Tun:Group, The "Group" property
-
org.freedesktop.NetworkManager.Device.Tun:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Tun:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.Tun:Mode, The "Mode" property +
org.freedesktop.NetworkManager.Device.Tun:Mode, The "Mode" property
-
org.freedesktop.NetworkManager.Device.Tun:MultiQueue, The "MultiQueue" property +
org.freedesktop.NetworkManager.Device.Tun:MultiQueue, The "MultiQueue" property
-
org.freedesktop.NetworkManager.Device.Tun:NoPi, The "NoPi" property +
org.freedesktop.NetworkManager.Device.Tun:NoPi, The "NoPi" property
-
org.freedesktop.NetworkManager.Device.Tun:Owner, The "Owner" property +
org.freedesktop.NetworkManager.Device.Tun:Owner, The "Owner" property
-
org.freedesktop.NetworkManager.Device.Tun:VnetHdr, The "VnetHdr" property +
org.freedesktop.NetworkManager.Device.Tun:VnetHdr, The "VnetHdr" property
-
org.freedesktop.NetworkManager.Device.Veth, org.freedesktop.NetworkManager.Device.Veth +
org.freedesktop.NetworkManager.Device.Veth, org.freedesktop.NetworkManager.Device.Veth
-
org.freedesktop.NetworkManager.Device.Veth::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Veth::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Veth:Peer, The "Peer" property +
org.freedesktop.NetworkManager.Device.Veth:Peer, The "Peer" property
-
org.freedesktop.NetworkManager.Device.Vlan, org.freedesktop.NetworkManager.Device.Vlan +
org.freedesktop.NetworkManager.Device.Vlan, org.freedesktop.NetworkManager.Device.Vlan
-
org.freedesktop.NetworkManager.Device.Vlan::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Vlan::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Vlan:Carrier, The "Carrier" property +
org.freedesktop.NetworkManager.Device.Vlan:Carrier, The "Carrier" property
-
org.freedesktop.NetworkManager.Device.Vlan:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Vlan:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.Vlan:Parent, The "Parent" property +
org.freedesktop.NetworkManager.Device.Vlan:Parent, The "Parent" property
-
org.freedesktop.NetworkManager.Device.Vlan:VlanId, The "VlanId" property +
org.freedesktop.NetworkManager.Device.Vlan:VlanId, The "VlanId" property
-
org.freedesktop.NetworkManager.Device.Vrf, org.freedesktop.NetworkManager.Device.Vrf +
org.freedesktop.NetworkManager.Device.Vrf, org.freedesktop.NetworkManager.Device.Vrf
-
org.freedesktop.NetworkManager.Device.Vrf:Table, The "Table" property +
org.freedesktop.NetworkManager.Device.Vrf:Table, The "Table" property
-
org.freedesktop.NetworkManager.Device.Vxlan, org.freedesktop.NetworkManager.Device.Vxlan +
org.freedesktop.NetworkManager.Device.Vxlan, org.freedesktop.NetworkManager.Device.Vxlan
-
org.freedesktop.NetworkManager.Device.Vxlan::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Vxlan::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Vxlan:Ageing, The "Ageing" property +
org.freedesktop.NetworkManager.Device.Vxlan:Ageing, The "Ageing" property
-
org.freedesktop.NetworkManager.Device.Vxlan:DstPort, The "DstPort" property +
org.freedesktop.NetworkManager.Device.Vxlan:DstPort, The "DstPort" property
-
org.freedesktop.NetworkManager.Device.Vxlan:Group, The "Group" property +
org.freedesktop.NetworkManager.Device.Vxlan:Group, The "Group" property
-
org.freedesktop.NetworkManager.Device.Vxlan:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Vxlan:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.Vxlan:Id, The "Id" property +
org.freedesktop.NetworkManager.Device.Vxlan:Id, The "Id" property
-
org.freedesktop.NetworkManager.Device.Vxlan:L2miss, The "L2miss" property +
org.freedesktop.NetworkManager.Device.Vxlan:L2miss, The "L2miss" property
-
org.freedesktop.NetworkManager.Device.Vxlan:L3miss, The "L3miss" property +
org.freedesktop.NetworkManager.Device.Vxlan:L3miss, The "L3miss" property
-
org.freedesktop.NetworkManager.Device.Vxlan:Learning, The "Learning" property +
org.freedesktop.NetworkManager.Device.Vxlan:Learning, The "Learning" property
-
org.freedesktop.NetworkManager.Device.Vxlan:Limit, The "Limit" property +
org.freedesktop.NetworkManager.Device.Vxlan:Limit, The "Limit" property
-
org.freedesktop.NetworkManager.Device.Vxlan:Local, The "Local" property +
org.freedesktop.NetworkManager.Device.Vxlan:Local, The "Local" property
-
org.freedesktop.NetworkManager.Device.Vxlan:Parent, The "Parent" property +
org.freedesktop.NetworkManager.Device.Vxlan:Parent, The "Parent" property
-
org.freedesktop.NetworkManager.Device.Vxlan:Proxy, The "Proxy" property +
org.freedesktop.NetworkManager.Device.Vxlan:Proxy, The "Proxy" property
-
org.freedesktop.NetworkManager.Device.Vxlan:Rsc, The "Rsc" property +
org.freedesktop.NetworkManager.Device.Vxlan:Rsc, The "Rsc" property
-
org.freedesktop.NetworkManager.Device.Vxlan:SrcPortMax, The "SrcPortMax" property +
org.freedesktop.NetworkManager.Device.Vxlan:SrcPortMax, The "SrcPortMax" property
-
org.freedesktop.NetworkManager.Device.Vxlan:SrcPortMin, The "SrcPortMin" property +
org.freedesktop.NetworkManager.Device.Vxlan:SrcPortMin, The "SrcPortMin" property
-
org.freedesktop.NetworkManager.Device.Vxlan:Tos, The "Tos" property +
org.freedesktop.NetworkManager.Device.Vxlan:Tos, The "Tos" property
-
org.freedesktop.NetworkManager.Device.Vxlan:Ttl, The "Ttl" property +
org.freedesktop.NetworkManager.Device.Vxlan:Ttl, The "Ttl" property
-
org.freedesktop.NetworkManager.Device.WireGuard, org.freedesktop.NetworkManager.Device.WireGuard +
org.freedesktop.NetworkManager.Device.WireGuard, org.freedesktop.NetworkManager.Device.WireGuard
-
org.freedesktop.NetworkManager.Device.WireGuard:FwMark, The "FwMark" property +
org.freedesktop.NetworkManager.Device.WireGuard:FwMark, The "FwMark" property
-
org.freedesktop.NetworkManager.Device.WireGuard:ListenPort, The "ListenPort" property +
org.freedesktop.NetworkManager.Device.WireGuard:ListenPort, The "ListenPort" property
-
org.freedesktop.NetworkManager.Device.WireGuard:PublicKey, The "PublicKey" property +
org.freedesktop.NetworkManager.Device.WireGuard:PublicKey, The "PublicKey" property
-
org.freedesktop.NetworkManager.Device.Wpan, org.freedesktop.NetworkManager.Device.Wpan +
org.freedesktop.NetworkManager.Device.Wpan, org.freedesktop.NetworkManager.Device.Wpan
-
org.freedesktop.NetworkManager.Device.Wpan:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Wpan:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device::StateChanged, The "StateChanged" signal +
org.freedesktop.NetworkManager.Device::StateChanged, The "StateChanged" signal
-
org.freedesktop.NetworkManager.Device:ActiveConnection, The "ActiveConnection" property +
org.freedesktop.NetworkManager.Device:ActiveConnection, The "ActiveConnection" property
-
org.freedesktop.NetworkManager.Device:Autoconnect, The "Autoconnect" property +
org.freedesktop.NetworkManager.Device:Autoconnect, The "Autoconnect" property
-
org.freedesktop.NetworkManager.Device:AvailableConnections, The "AvailableConnections" property +
org.freedesktop.NetworkManager.Device:AvailableConnections, The "AvailableConnections" property
-
org.freedesktop.NetworkManager.Device:Capabilities, The "Capabilities" property +
org.freedesktop.NetworkManager.Device:Capabilities, The "Capabilities" property
-
org.freedesktop.NetworkManager.Device:DeviceType, The "DeviceType" property +
org.freedesktop.NetworkManager.Device:DeviceType, The "DeviceType" property
-
org.freedesktop.NetworkManager.Device:Dhcp4Config, The "Dhcp4Config" property +
org.freedesktop.NetworkManager.Device:Dhcp4Config, The "Dhcp4Config" property
-
org.freedesktop.NetworkManager.Device:Dhcp6Config, The "Dhcp6Config" property +
org.freedesktop.NetworkManager.Device:Dhcp6Config, The "Dhcp6Config" property
-
org.freedesktop.NetworkManager.Device:Driver, The "Driver" property +
org.freedesktop.NetworkManager.Device:Driver, The "Driver" property
-
org.freedesktop.NetworkManager.Device:DriverVersion, The "DriverVersion" property +
org.freedesktop.NetworkManager.Device:DriverVersion, The "DriverVersion" property
-
org.freedesktop.NetworkManager.Device:FirmwareMissing, The "FirmwareMissing" property +
org.freedesktop.NetworkManager.Device:FirmwareMissing, The "FirmwareMissing" property
-
org.freedesktop.NetworkManager.Device:FirmwareVersion, The "FirmwareVersion" property +
org.freedesktop.NetworkManager.Device:FirmwareVersion, The "FirmwareVersion" property
-
org.freedesktop.NetworkManager.Device:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device:Interface, The "Interface" property +
org.freedesktop.NetworkManager.Device:Interface, The "Interface" property
-
org.freedesktop.NetworkManager.Device:InterfaceFlags, The "InterfaceFlags" property +
org.freedesktop.NetworkManager.Device:InterfaceFlags, The "InterfaceFlags" property
-
org.freedesktop.NetworkManager.Device:Ip4Address, The "Ip4Address" property +
org.freedesktop.NetworkManager.Device:Ip4Address, The "Ip4Address" property
-
org.freedesktop.NetworkManager.Device:Ip4Config, The "Ip4Config" property +
org.freedesktop.NetworkManager.Device:Ip4Config, The "Ip4Config" property
-
org.freedesktop.NetworkManager.Device:Ip4Connectivity, The "Ip4Connectivity" property +
org.freedesktop.NetworkManager.Device:Ip4Connectivity, The "Ip4Connectivity" property
-
org.freedesktop.NetworkManager.Device:Ip6Config, The "Ip6Config" property +
org.freedesktop.NetworkManager.Device:Ip6Config, The "Ip6Config" property
-
org.freedesktop.NetworkManager.Device:Ip6Connectivity, The "Ip6Connectivity" property +
org.freedesktop.NetworkManager.Device:Ip6Connectivity, The "Ip6Connectivity" property
-
org.freedesktop.NetworkManager.Device:IpInterface, The "IpInterface" property +
org.freedesktop.NetworkManager.Device:IpInterface, The "IpInterface" property
-
org.freedesktop.NetworkManager.Device:LldpNeighbors, The "LldpNeighbors" property +
org.freedesktop.NetworkManager.Device:LldpNeighbors, The "LldpNeighbors" property
-
org.freedesktop.NetworkManager.Device:Managed, The "Managed" property +
org.freedesktop.NetworkManager.Device:Managed, The "Managed" property
-
org.freedesktop.NetworkManager.Device:Metered, The "Metered" property +
org.freedesktop.NetworkManager.Device:Metered, The "Metered" property
-
org.freedesktop.NetworkManager.Device:Mtu, The "Mtu" property +
org.freedesktop.NetworkManager.Device:Mtu, The "Mtu" property
-
org.freedesktop.NetworkManager.Device:NmPluginMissing, The "NmPluginMissing" property +
org.freedesktop.NetworkManager.Device:NmPluginMissing, The "NmPluginMissing" property
-
org.freedesktop.NetworkManager.Device:Path, The "Path" property +
org.freedesktop.NetworkManager.Device:Path, The "Path" property
-
org.freedesktop.NetworkManager.Device:PhysicalPortId, The "PhysicalPortId" property +
org.freedesktop.NetworkManager.Device:PhysicalPortId, The "PhysicalPortId" property
-
org.freedesktop.NetworkManager.Device:Real, The "Real" property +
org.freedesktop.NetworkManager.Device:Real, The "Real" property
-
org.freedesktop.NetworkManager.Device:State, The "State" property +
org.freedesktop.NetworkManager.Device:State, The "State" property
-
org.freedesktop.NetworkManager.Device:StateReason, The "StateReason" property +
org.freedesktop.NetworkManager.Device:StateReason, The "StateReason" property
-
org.freedesktop.NetworkManager.Device:Udi, The "Udi" property +
org.freedesktop.NetworkManager.Device:Udi, The "Udi" property
-
org.freedesktop.NetworkManager.DnsManager, org.freedesktop.NetworkManager.DnsManager +
org.freedesktop.NetworkManager.DnsManager, org.freedesktop.NetworkManager.DnsManager
-
org.freedesktop.NetworkManager.DnsManager:Configuration, The "Configuration" property +
org.freedesktop.NetworkManager.DnsManager:Configuration, The "Configuration" property
-
org.freedesktop.NetworkManager.DnsManager:Mode, The "Mode" property +
org.freedesktop.NetworkManager.DnsManager:Mode, The "Mode" property
-
org.freedesktop.NetworkManager.DnsManager:RcManager, The "RcManager" property +
org.freedesktop.NetworkManager.DnsManager:RcManager, The "RcManager" property
-
org.freedesktop.NetworkManager.IP4Config, org.freedesktop.NetworkManager.IP4Config +
org.freedesktop.NetworkManager.IP4Config, org.freedesktop.NetworkManager.IP4Config
-
org.freedesktop.NetworkManager.IP4Config::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.IP4Config::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.IP4Config:AddressData, The "AddressData" property +
org.freedesktop.NetworkManager.IP4Config:AddressData, The "AddressData" property
-
org.freedesktop.NetworkManager.IP4Config:Addresses, The "Addresses" property +
org.freedesktop.NetworkManager.IP4Config:Addresses, The "Addresses" property
-
org.freedesktop.NetworkManager.IP4Config:DnsOptions, The "DnsOptions" property +
org.freedesktop.NetworkManager.IP4Config:DnsOptions, The "DnsOptions" property
-
org.freedesktop.NetworkManager.IP4Config:DnsPriority, The "DnsPriority" property +
org.freedesktop.NetworkManager.IP4Config:DnsPriority, The "DnsPriority" property
-
org.freedesktop.NetworkManager.IP4Config:Domains, The "Domains" property +
org.freedesktop.NetworkManager.IP4Config:Domains, The "Domains" property
-
org.freedesktop.NetworkManager.IP4Config:Gateway, The "Gateway" property +
org.freedesktop.NetworkManager.IP4Config:Gateway, The "Gateway" property
-
org.freedesktop.NetworkManager.IP4Config:NameserverData, The "NameserverData" property +
org.freedesktop.NetworkManager.IP4Config:NameserverData, The "NameserverData" property
-
org.freedesktop.NetworkManager.IP4Config:Nameservers, The "Nameservers" property +
org.freedesktop.NetworkManager.IP4Config:Nameservers, The "Nameservers" property
-
org.freedesktop.NetworkManager.IP4Config:RouteData, The "RouteData" property +
org.freedesktop.NetworkManager.IP4Config:RouteData, The "RouteData" property
-
org.freedesktop.NetworkManager.IP4Config:Routes, The "Routes" property +
org.freedesktop.NetworkManager.IP4Config:Routes, The "Routes" property
-
org.freedesktop.NetworkManager.IP4Config:Searches, The "Searches" property +
org.freedesktop.NetworkManager.IP4Config:Searches, The "Searches" property
-
org.freedesktop.NetworkManager.IP4Config:WinsServerData, The "WinsServerData" property +
org.freedesktop.NetworkManager.IP4Config:WinsServerData, The "WinsServerData" property
-
org.freedesktop.NetworkManager.IP4Config:WinsServers, The "WinsServers" property +
org.freedesktop.NetworkManager.IP4Config:WinsServers, The "WinsServers" property
-
org.freedesktop.NetworkManager.IP6Config, org.freedesktop.NetworkManager.IP6Config +
org.freedesktop.NetworkManager.IP6Config, org.freedesktop.NetworkManager.IP6Config
-
org.freedesktop.NetworkManager.IP6Config::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.IP6Config::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.IP6Config:AddressData, The "AddressData" property +
org.freedesktop.NetworkManager.IP6Config:AddressData, The "AddressData" property
-
org.freedesktop.NetworkManager.IP6Config:Addresses, The "Addresses" property +
org.freedesktop.NetworkManager.IP6Config:Addresses, The "Addresses" property
-
org.freedesktop.NetworkManager.IP6Config:DnsOptions, The "DnsOptions" property +
org.freedesktop.NetworkManager.IP6Config:DnsOptions, The "DnsOptions" property
-
org.freedesktop.NetworkManager.IP6Config:DnsPriority, The "DnsPriority" property +
org.freedesktop.NetworkManager.IP6Config:DnsPriority, The "DnsPriority" property
-
org.freedesktop.NetworkManager.IP6Config:Domains, The "Domains" property +
org.freedesktop.NetworkManager.IP6Config:Domains, The "Domains" property
-
org.freedesktop.NetworkManager.IP6Config:Gateway, The "Gateway" property +
org.freedesktop.NetworkManager.IP6Config:Gateway, The "Gateway" property
-
org.freedesktop.NetworkManager.IP6Config:Nameservers, The "Nameservers" property +
org.freedesktop.NetworkManager.IP6Config:Nameservers, The "Nameservers" property
-
org.freedesktop.NetworkManager.IP6Config:RouteData, The "RouteData" property +
org.freedesktop.NetworkManager.IP6Config:RouteData, The "RouteData" property
-
org.freedesktop.NetworkManager.IP6Config:Routes, The "Routes" property +
org.freedesktop.NetworkManager.IP6Config:Routes, The "Routes" property
-
org.freedesktop.NetworkManager.IP6Config:Searches, The "Searches" property +
org.freedesktop.NetworkManager.IP6Config:Searches, The "Searches" property
-
org.freedesktop.NetworkManager.SecretAgent, org.freedesktop.NetworkManager.SecretAgent +
org.freedesktop.NetworkManager.SecretAgent, org.freedesktop.NetworkManager.SecretAgent
-
org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets(), The CancelGetSecrets() method +
org.freedesktop.NetworkManager.SecretAgent.CancelGetSecrets(), The CancelGetSecrets() method
-
org.freedesktop.NetworkManager.SecretAgent.DeleteSecrets(), The DeleteSecrets() method +
org.freedesktop.NetworkManager.SecretAgent.DeleteSecrets(), The DeleteSecrets() method
-
org.freedesktop.NetworkManager.SecretAgent.GetSecrets(), The GetSecrets() method +
org.freedesktop.NetworkManager.SecretAgent.GetSecrets(), The GetSecrets() method
-
org.freedesktop.NetworkManager.SecretAgent.SaveSecrets(), The SaveSecrets() method +
org.freedesktop.NetworkManager.SecretAgent.SaveSecrets(), The SaveSecrets() method
-
org.freedesktop.NetworkManager.Settings, org.freedesktop.NetworkManager.Settings +
org.freedesktop.NetworkManager.Settings, org.freedesktop.NetworkManager.Settings
-
org.freedesktop.NetworkManager.Settings.AddConnection(), The AddConnection() method +
org.freedesktop.NetworkManager.Settings.AddConnection(), The AddConnection() method
-
org.freedesktop.NetworkManager.Settings.AddConnection2(), The AddConnection2() method +
org.freedesktop.NetworkManager.Settings.AddConnection2(), The AddConnection2() method
-
org.freedesktop.NetworkManager.Settings.AddConnectionUnsaved(), The AddConnectionUnsaved() method +
org.freedesktop.NetworkManager.Settings.AddConnectionUnsaved(), The AddConnectionUnsaved() method
-
org.freedesktop.NetworkManager.Settings.Connection, org.freedesktop.NetworkManager.Settings.Connection +
org.freedesktop.NetworkManager.Settings.Connection, org.freedesktop.NetworkManager.Settings.Connection
-
org.freedesktop.NetworkManager.Settings.Connection.ClearSecrets(), The ClearSecrets() method +
org.freedesktop.NetworkManager.Settings.Connection.ClearSecrets(), The ClearSecrets() method
-
org.freedesktop.NetworkManager.Settings.Connection.Delete(), The Delete() method +
org.freedesktop.NetworkManager.Settings.Connection.Delete(), The Delete() method
-
org.freedesktop.NetworkManager.Settings.Connection.GetSecrets(), The GetSecrets() method +
org.freedesktop.NetworkManager.Settings.Connection.GetSecrets(), The GetSecrets() method
-
org.freedesktop.NetworkManager.Settings.Connection.GetSettings(), The GetSettings() method +
org.freedesktop.NetworkManager.Settings.Connection.GetSettings(), The GetSettings() method
-
org.freedesktop.NetworkManager.Settings.Connection.Save(), The Save() method +
org.freedesktop.NetworkManager.Settings.Connection.Save(), The Save() method
-
org.freedesktop.NetworkManager.Settings.Connection.Update(), The Update() method +
org.freedesktop.NetworkManager.Settings.Connection.Update(), The Update() method
-
org.freedesktop.NetworkManager.Settings.Connection.Update2(), The Update2() method +
org.freedesktop.NetworkManager.Settings.Connection.Update2(), The Update2() method
-
org.freedesktop.NetworkManager.Settings.Connection.UpdateUnsaved(), The UpdateUnsaved() method +
org.freedesktop.NetworkManager.Settings.Connection.UpdateUnsaved(), The UpdateUnsaved() method
-
org.freedesktop.NetworkManager.Settings.Connection::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Settings.Connection::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Settings.Connection::Removed, The "Removed" signal +
org.freedesktop.NetworkManager.Settings.Connection::Removed, The "Removed" signal
-
org.freedesktop.NetworkManager.Settings.Connection::Updated, The "Updated" signal +
org.freedesktop.NetworkManager.Settings.Connection::Updated, The "Updated" signal
-
org.freedesktop.NetworkManager.Settings.Connection:Filename, The "Filename" property +
org.freedesktop.NetworkManager.Settings.Connection:Filename, The "Filename" property
-
org.freedesktop.NetworkManager.Settings.Connection:Flags, The "Flags" property +
org.freedesktop.NetworkManager.Settings.Connection:Flags, The "Flags" property
-
org.freedesktop.NetworkManager.Settings.Connection:Unsaved, The "Unsaved" property +
org.freedesktop.NetworkManager.Settings.Connection:Unsaved, The "Unsaved" property
-
org.freedesktop.NetworkManager.Settings.GetConnectionByUuid(), The GetConnectionByUuid() method +
org.freedesktop.NetworkManager.Settings.GetConnectionByUuid(), The GetConnectionByUuid() method
-
org.freedesktop.NetworkManager.Settings.ListConnections(), The ListConnections() method +
org.freedesktop.NetworkManager.Settings.ListConnections(), The ListConnections() method
-
org.freedesktop.NetworkManager.Settings.LoadConnections(), The LoadConnections() method +
org.freedesktop.NetworkManager.Settings.LoadConnections(), The LoadConnections() method
-
org.freedesktop.NetworkManager.Settings.ReloadConnections(), The ReloadConnections() method +
org.freedesktop.NetworkManager.Settings.ReloadConnections(), The ReloadConnections() method
-
org.freedesktop.NetworkManager.Settings.SaveHostname(), The SaveHostname() method +
org.freedesktop.NetworkManager.Settings.SaveHostname(), The SaveHostname() method
-
org.freedesktop.NetworkManager.Settings::ConnectionRemoved, The "ConnectionRemoved" signal +
org.freedesktop.NetworkManager.Settings::ConnectionRemoved, The "ConnectionRemoved" signal
-
org.freedesktop.NetworkManager.Settings::NewConnection, The "NewConnection" signal +
org.freedesktop.NetworkManager.Settings::NewConnection, The "NewConnection" signal
-
org.freedesktop.NetworkManager.Settings::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Settings::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Settings:CanModify, The "CanModify" property +
org.freedesktop.NetworkManager.Settings:CanModify, The "CanModify" property
-
org.freedesktop.NetworkManager.Settings:Connections, The "Connections" property +
org.freedesktop.NetworkManager.Settings:Connections, The "Connections" property
-
org.freedesktop.NetworkManager.Settings:Hostname, The "Hostname" property +
org.freedesktop.NetworkManager.Settings:Hostname, The "Hostname" property

A

-
org.freedesktop.NetworkManager.Connection.Active, org.freedesktop.NetworkManager.Connection.Active +
org.freedesktop.NetworkManager.Connection.Active, org.freedesktop.NetworkManager.Connection.Active
-
org.freedesktop.NetworkManager.Connection.Active::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Connection.Active::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Connection.Active::StateChanged, The "StateChanged" signal +
org.freedesktop.NetworkManager.Connection.Active::StateChanged, The "StateChanged" signal
-
org.freedesktop.NetworkManager.Connection.Active:Connection, The "Connection" property +
org.freedesktop.NetworkManager.Connection.Active:Connection, The "Connection" property
-
org.freedesktop.NetworkManager.Connection.Active:Default, The "Default" property +
org.freedesktop.NetworkManager.Connection.Active:Default, The "Default" property
-
org.freedesktop.NetworkManager.Connection.Active:Default6, The "Default6" property +
org.freedesktop.NetworkManager.Connection.Active:Default6, The "Default6" property
-
org.freedesktop.NetworkManager.Connection.Active:Devices, The "Devices" property +
org.freedesktop.NetworkManager.Connection.Active:Devices, The "Devices" property
-
org.freedesktop.NetworkManager.Connection.Active:Dhcp4Config, The "Dhcp4Config" property +
org.freedesktop.NetworkManager.Connection.Active:Dhcp4Config, The "Dhcp4Config" property
-
org.freedesktop.NetworkManager.Connection.Active:Dhcp6Config, The "Dhcp6Config" property +
org.freedesktop.NetworkManager.Connection.Active:Dhcp6Config, The "Dhcp6Config" property
-
org.freedesktop.NetworkManager.Connection.Active:Id, The "Id" property +
org.freedesktop.NetworkManager.Connection.Active:Id, The "Id" property
-
org.freedesktop.NetworkManager.Connection.Active:Ip4Config, The "Ip4Config" property +
org.freedesktop.NetworkManager.Connection.Active:Ip4Config, The "Ip4Config" property
-
org.freedesktop.NetworkManager.Connection.Active:Ip6Config, The "Ip6Config" property +
org.freedesktop.NetworkManager.Connection.Active:Ip6Config, The "Ip6Config" property
-
org.freedesktop.NetworkManager.Connection.Active:Master, The "Master" property +
org.freedesktop.NetworkManager.Connection.Active:Master, The "Master" property
-
org.freedesktop.NetworkManager.Connection.Active:SpecificObject, The "SpecificObject" property +
org.freedesktop.NetworkManager.Connection.Active:SpecificObject, The "SpecificObject" property
-
org.freedesktop.NetworkManager.Connection.Active:State, The "State" property +
org.freedesktop.NetworkManager.Connection.Active:State, The "State" property
-
org.freedesktop.NetworkManager.Connection.Active:StateFlags, The "StateFlags" property +
org.freedesktop.NetworkManager.Connection.Active:StateFlags, The "StateFlags" property
-
org.freedesktop.NetworkManager.Connection.Active:Type, The "Type" property +
org.freedesktop.NetworkManager.Connection.Active:Type, The "Type" property
-
org.freedesktop.NetworkManager.Connection.Active:Uuid, The "Uuid" property +
org.freedesktop.NetworkManager.Connection.Active:Uuid, The "Uuid" property
-
org.freedesktop.NetworkManager.Connection.Active:Vpn, The "Vpn" property +
org.freedesktop.NetworkManager.Connection.Active:Vpn, The "Vpn" property
-
addr-gen-mode, ipv6 +
addr-gen-mode, ipv6
-
address-data, ipv4, ipv6 +
address-data, ipv4, ipv6
-
addresses, ipv4, ipv6 +
addresses, ipv4, ipv6
-
ageing, vxlan +
ageing, vxlan
-
ageing-time, bridge +
ageing-time, bridge
-
altsubject-matches, 802-1x +
altsubject-matches, 802-1x
-
anonymous-identity, 802-1x +
anonymous-identity, 802-1x
-
ap-isolation, 802-11-wireless +
ap-isolation, 802-11-wireless
-
apn, gsm +
apn, gsm
-
app-fcoe-flags, dcb +
app-fcoe-flags, dcb
-
app-fcoe-mode, dcb +
app-fcoe-mode, dcb
-
app-fcoe-priority, dcb +
app-fcoe-priority, dcb
-
app-fip-flags, dcb +
app-fip-flags, dcb
-
app-fip-priority, dcb +
app-fip-priority, dcb
-
app-iscsi-flags, dcb +
app-iscsi-flags, dcb
-
app-iscsi-priority, dcb +
app-iscsi-priority, dcb
-
assigned-mac-address, 802-3-ethernet, 802-11-wireless +
assigned-mac-address, 802-3-ethernet, 802-11-wireless
-
auth-alg, 802-11-wireless-security +
auth-alg, 802-11-wireless-security
-
auth-retries, connection +
auth-retries, connection
-
auth-timeout, 802-1x +
auth-timeout, 802-1x
-
auto-config, gsm +
auto-config, gsm
-
auto-negotiate, 802-3-ethernet +
auto-negotiate, 802-3-ethernet
-
autoconnect, connection +
autoconnect, connection
-
autoconnect-priority, connection +
autoconnect-priority, connection
-
autoconnect-retries, connection +
autoconnect-retries, connection
-
autoconnect-slaves, connection +
autoconnect-slaves, connection
-
autoprobe-drivers, sriov +
autoprobe-drivers, sriov

B

-
band, 802-11-wireless +
band, 802-11-wireless
-
baud, ppp, serial +
baud, ppp, serial
-
bdaddr, bluetooth +
bdaddr, bluetooth
-
bits, serial +
bits, serial
-
bond-downdelay, ovs-port +
bond-downdelay, ovs-port
-
bond-mode, ovs-port +
bond-mode, ovs-port
-
bond-updelay, ovs-port +
bond-updelay, ovs-port
-
browser-only, proxy +
browser-only, proxy
-
bssid, 802-11-wireless +
bssid, 802-11-wireless

C

-
ca-cert, 802-1x +
ca-cert, 802-1x
-
ca-cert-password, 802-1x +
ca-cert-password, 802-1x
-
ca-cert-password-flags, 802-1x +
ca-cert-password-flags, 802-1x
-
ca-path, 802-1x +
ca-path, 802-1x
-
channel, 802-11-olpc-mesh, 802-11-wireless, wpan +
channel, 802-11-olpc-mesh, 802-11-wireless, wpan
-
org.freedesktop.NetworkManager.Checkpoint, org.freedesktop.NetworkManager.Checkpoint +
org.freedesktop.NetworkManager.Checkpoint, org.freedesktop.NetworkManager.Checkpoint
-
org.freedesktop.NetworkManager.Checkpoint::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Checkpoint::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Checkpoint:Created, The "Created" property +
org.freedesktop.NetworkManager.Checkpoint:Created, The "Created" property
-
org.freedesktop.NetworkManager.Checkpoint:Devices, The "Devices" property +
org.freedesktop.NetworkManager.Checkpoint:Devices, The "Devices" property
-
org.freedesktop.NetworkManager.Checkpoint:RollbackTimeout, The "RollbackTimeout" property +
org.freedesktop.NetworkManager.Checkpoint:RollbackTimeout, The "RollbackTimeout" property
-
client-cert, 802-1x +
client-cert, 802-1x
-
client-cert-password, 802-1x +
client-cert-password, 802-1x
-
client-cert-password-flags, 802-1x +
client-cert-password-flags, 802-1x
-
cloned-mac-address, 802-3-ethernet, 802-11-wireless +
cloned-mac-address, 802-3-ethernet, 802-11-wireless
-
config, team, team-port +
config, team, team-port
-
crtscts, ppp +
crtscts, ppp

D

-
dad-timeout, ipv4, ipv6 +
dad-timeout, ipv4, ipv6
-
data, user, vpn, ovs-external-ids +
data, user, vpn, ovs-external-ids
-
datapath-type, ovs-bridge +
datapath-type, ovs-bridge
-
destination-port, vxlan +
destination-port, vxlan
-
devargs, ovs-dpdk +
devargs, ovs-dpdk
-
device-id, gsm +
device-id, gsm
-
org.freedesktop.NetworkManager.Device.Wired, org.freedesktop.NetworkManager.Device.Wired +
org.freedesktop.NetworkManager.Device.Wired, org.freedesktop.NetworkManager.Device.Wired
-
org.freedesktop.NetworkManager.Device.Wired::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Wired::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Wired:Carrier, The "Carrier" property +
org.freedesktop.NetworkManager.Device.Wired:Carrier, The "Carrier" property
-
org.freedesktop.NetworkManager.Device.Wired:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Wired:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.Wired:PermHwAddress, The "PermHwAddress" property +
org.freedesktop.NetworkManager.Device.Wired:PermHwAddress, The "PermHwAddress" property
-
org.freedesktop.NetworkManager.Device.Wired:S390Subchannels, The "S390Subchannels" property +
org.freedesktop.NetworkManager.Device.Wired:S390Subchannels, The "S390Subchannels" property
-
org.freedesktop.NetworkManager.Device.Wired:Speed, The "Speed" property +
org.freedesktop.NetworkManager.Device.Wired:Speed, The "Speed" property
-
org.freedesktop.NetworkManager.Device.Wireless, org.freedesktop.NetworkManager.Device.Wireless +
org.freedesktop.NetworkManager.Device.Wireless, org.freedesktop.NetworkManager.Device.Wireless
-
org.freedesktop.NetworkManager.Device.Wireless.GetAccessPoints(), The GetAccessPoints() method +
org.freedesktop.NetworkManager.Device.Wireless.GetAccessPoints(), The GetAccessPoints() method
-
org.freedesktop.NetworkManager.Device.Wireless.GetAllAccessPoints(), The GetAllAccessPoints() method +
org.freedesktop.NetworkManager.Device.Wireless.GetAllAccessPoints(), The GetAllAccessPoints() method
-
org.freedesktop.NetworkManager.Device.Wireless.RequestScan(), The RequestScan() method +
org.freedesktop.NetworkManager.Device.Wireless.RequestScan(), The RequestScan() method
-
org.freedesktop.NetworkManager.Device.Wireless::AccessPointAdded, The "AccessPointAdded" signal +
org.freedesktop.NetworkManager.Device.Wireless::AccessPointAdded, The "AccessPointAdded" signal
-
org.freedesktop.NetworkManager.Device.Wireless::AccessPointRemoved, The "AccessPointRemoved" signal +
org.freedesktop.NetworkManager.Device.Wireless::AccessPointRemoved, The "AccessPointRemoved" signal
-
org.freedesktop.NetworkManager.Device.Wireless::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.Device.Wireless::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.Device.Wireless:AccessPoints, The "AccessPoints" property +
org.freedesktop.NetworkManager.Device.Wireless:AccessPoints, The "AccessPoints" property
-
org.freedesktop.NetworkManager.Device.Wireless:ActiveAccessPoint, The "ActiveAccessPoint" property +
org.freedesktop.NetworkManager.Device.Wireless:ActiveAccessPoint, The "ActiveAccessPoint" property
-
org.freedesktop.NetworkManager.Device.Wireless:Bitrate, The "Bitrate" property +
org.freedesktop.NetworkManager.Device.Wireless:Bitrate, The "Bitrate" property
-
org.freedesktop.NetworkManager.Device.Wireless:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.Wireless:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.Wireless:LastScan, The "LastScan" property +
org.freedesktop.NetworkManager.Device.Wireless:LastScan, The "LastScan" property
-
org.freedesktop.NetworkManager.Device.Wireless:Mode, The "Mode" property +
org.freedesktop.NetworkManager.Device.Wireless:Mode, The "Mode" property
-
org.freedesktop.NetworkManager.Device.Wireless:PermHwAddress, The "PermHwAddress" property +
org.freedesktop.NetworkManager.Device.Wireless:PermHwAddress, The "PermHwAddress" property
-
org.freedesktop.NetworkManager.Device.Wireless:WirelessCapabilities, The "WirelessCapabilities" property +
org.freedesktop.NetworkManager.Device.Wireless:WirelessCapabilities, The "WirelessCapabilities" property
-
org.freedesktop.NetworkManager.Device.WifiP2P, org.freedesktop.NetworkManager.Device.WifiP2P +
org.freedesktop.NetworkManager.Device.WifiP2P, org.freedesktop.NetworkManager.Device.WifiP2P
-
org.freedesktop.NetworkManager.Device.WifiP2P.StartFind(), The StartFind() method +
org.freedesktop.NetworkManager.Device.WifiP2P.StartFind(), The StartFind() method
-
org.freedesktop.NetworkManager.Device.WifiP2P.StopFind(), The StopFind() method +
org.freedesktop.NetworkManager.Device.WifiP2P.StopFind(), The StopFind() method
-
org.freedesktop.NetworkManager.Device.WifiP2P::PeerAdded, The "PeerAdded" signal +
org.freedesktop.NetworkManager.Device.WifiP2P::PeerAdded, The "PeerAdded" signal
-
org.freedesktop.NetworkManager.Device.WifiP2P::PeerRemoved, The "PeerRemoved" signal +
org.freedesktop.NetworkManager.Device.WifiP2P::PeerRemoved, The "PeerRemoved" signal
-
org.freedesktop.NetworkManager.Device.WifiP2P:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.Device.WifiP2P:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.Device.WifiP2P:Peers, The "Peers" property +
org.freedesktop.NetworkManager.Device.WifiP2P:Peers, The "Peers" property
-
dhcp-anycast-address, 802-11-olpc-mesh +
dhcp-anycast-address, 802-11-olpc-mesh
-
dhcp-client-id, ipv4 +
dhcp-client-id, ipv4
-
dhcp-duid, ipv6 +
dhcp-duid, ipv6
-
dhcp-fqdn, ipv4 +
dhcp-fqdn, ipv4
-
dhcp-hostname, ipv4, ipv6 +
dhcp-hostname, ipv4, ipv6
-
dhcp-hostname-flags, ipv4, ipv6 +
dhcp-hostname-flags, ipv4, ipv6
-
dhcp-iaid, ipv4, ipv6 +
dhcp-iaid, ipv4, ipv6
-
dhcp-reject-servers, ipv4, ipv6 +
dhcp-reject-servers, ipv4, ipv6
-
dhcp-send-hostname, ipv4, ipv6 +
dhcp-send-hostname, ipv4, ipv6
-
dhcp-timeout, ipv4, ipv6 +
dhcp-timeout, ipv4, ipv6
-
dhcp-vendor-class-identifier, ipv4 +
dhcp-vendor-class-identifier, ipv4
-
org.freedesktop.NetworkManager.DHCP4Config, org.freedesktop.NetworkManager.DHCP4Config +
org.freedesktop.NetworkManager.DHCP4Config, org.freedesktop.NetworkManager.DHCP4Config
-
org.freedesktop.NetworkManager.DHCP4Config::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.DHCP4Config::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.DHCP4Config:Options, The "Options" property +
org.freedesktop.NetworkManager.DHCP4Config:Options, The "Options" property
-
org.freedesktop.NetworkManager.DHCP6Config, org.freedesktop.NetworkManager.DHCP6Config +
org.freedesktop.NetworkManager.DHCP6Config, org.freedesktop.NetworkManager.DHCP6Config
-
org.freedesktop.NetworkManager.DHCP6Config::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.DHCP6Config::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.DHCP6Config:Options, The "Options" property +
org.freedesktop.NetworkManager.DHCP6Config:Options, The "Options" property
-
dns, ipv4, ipv6 +
dns, ipv4, ipv6
-
dns-options, ipv4, ipv6 +
dns-options, ipv4, ipv6
-
dns-priority, ipv4, ipv6 +
dns-priority, ipv4, ipv6
-
dns-search, ipv4, ipv6 +
dns-search, ipv4, ipv6
-
domain-match, 802-1x +
domain-match, 802-1x
-
domain-suffix-match, 802-1x +
domain-suffix-match, 802-1x
-
driver, match +
driver, match
-
duplex, 802-3-ethernet +
duplex, 802-3-ethernet

E

-
eap, 802-1x +
eap, 802-1x
-
egress-priority-map, vlan +
egress-priority-map, vlan
-
encapsulation, adsl +
encapsulation, adsl
-
encapsulation-limit, ip-tunnel +
encapsulation-limit, ip-tunnel
-
encrypt, macsec +
encrypt, macsec

F

-
fail-mode, ovs-bridge +
fail-mode, ovs-bridge
-
fils, 802-11-wireless-security +
fils, 802-11-wireless-security
-
flags, ip-tunnel, vlan +
flags, ip-tunnel, vlan
-
flow-label, ip-tunnel +
flow-label, ip-tunnel
-
forward-delay, bridge +
forward-delay, bridge
-
from-dhcp, hostname +
from-dhcp, hostname
-
from-dns-lookup, hostname +
from-dns-lookup, hostname
-
fwmark, wireguard +
fwmark, wireguard

G

-
gateway, ipv4, ipv6 +
gateway, ipv4, ipv6
-
gateway-ping-timeout, connection +
gateway-ping-timeout, connection
-
generate-mac-address-mask, 802-3-ethernet, 802-11-wireless +
generate-mac-address-mask, 802-3-ethernet, 802-11-wireless
-
group, tun, 802-11-wireless-security +
group, tun, 802-11-wireless-security
-
group-address, bridge +
group-address, bridge
-
group-forward-mask, bridge +
group-forward-mask, bridge

H

-
hairpin-mode, bridge-port +
hairpin-mode, bridge-port
-
hello-time, bridge +
hello-time, bridge
-
hidden, 802-11-wireless +
hidden, 802-11-wireless
-
home-only, gsm +
home-only, gsm

I

-
id, connection, vlan, vxlan +
id, connection, vlan, vxlan
-
identity, 802-1x +
identity, 802-1x
-
ignore-auto-dns, ipv4, ipv6 +
ignore-auto-dns, ipv4, ipv6
-
ignore-auto-routes, ipv4, ipv6 +
ignore-auto-routes, ipv4, ipv6
-
ingress-priority-map, vlan +
ingress-priority-map, vlan
-
input-key, ip-tunnel +
input-key, ip-tunnel
-
interface-name, connection, bond, bridge, match, team, vlan +
interface-name, connection, bond, bridge, match, team, vlan
-
ip4-auto-default-route, wireguard +
ip4-auto-default-route, wireguard
-
ip6-auto-default-route, wireguard +
ip6-auto-default-route, wireguard
-
ip6-privacy, ipv6 +
ip6-privacy, ipv6

K

-
kernel-command-line, match +
kernel-command-line, match
-
key-mgmt, 802-11-wireless-security +
key-mgmt, 802-11-wireless-security

L

-
l2-miss, vxlan +
l2-miss, vxlan
-
l3-miss, vxlan +
l3-miss, vxlan
-
lacp, ovs-port +
lacp, ovs-port
-
lacp-key, team-port +
lacp-key, team-port
-
lacp-prio, team-port +
lacp-prio, team-port
-
lcp-echo-failure, ppp +
lcp-echo-failure, ppp
-
lcp-echo-interval, ppp +
lcp-echo-interval, ppp
-
leap-password, 802-11-wireless-security +
leap-password, 802-11-wireless-security
-
leap-password-flags, 802-11-wireless-security +
leap-password-flags, 802-11-wireless-security
-
leap-username, 802-11-wireless-security +
leap-username, 802-11-wireless-security
-
learning, vxlan +
learning, vxlan
-
limit, vxlan +
limit, vxlan
-
link-watchers, team, team-port +
link-watchers, team, team-port
-
listen-port, wireguard +
listen-port, wireguard
-
lldp, connection +
lldp, connection
-
llmnr, connection +
llmnr, connection
-
local, ip-tunnel, vxlan +
local, ip-tunnel, vxlan

M

-
mac-address, bridge, infiniband, wimax, 802-3-ethernet, 802-11-wireless, wpan +
mac-address, bridge, infiniband, wimax, 802-3-ethernet, 802-11-wireless, wpan
-
mac-address-blacklist, 802-3-ethernet, 802-11-wireless +
mac-address-blacklist, 802-3-ethernet, 802-11-wireless
-
mac-address-randomization, 802-11-wireless +
mac-address-randomization, 802-11-wireless
-
org.freedesktop.NetworkManager, org.freedesktop.NetworkManager +
org.freedesktop.NetworkManager, org.freedesktop.NetworkManager
-
org.freedesktop.NetworkManager.ActivateConnection(), The ActivateConnection() method +
org.freedesktop.NetworkManager.ActivateConnection(), The ActivateConnection() method
-
org.freedesktop.NetworkManager.AddAndActivateConnection(), The AddAndActivateConnection() method +
org.freedesktop.NetworkManager.AddAndActivateConnection(), The AddAndActivateConnection() method
-
org.freedesktop.NetworkManager.AddAndActivateConnection2(), The AddAndActivateConnection2() method +
org.freedesktop.NetworkManager.AddAndActivateConnection2(), The AddAndActivateConnection2() method
-
org.freedesktop.NetworkManager.CheckConnectivity(), The CheckConnectivity() method +
org.freedesktop.NetworkManager.CheckConnectivity(), The CheckConnectivity() method
-
org.freedesktop.NetworkManager.CheckpointAdjustRollbackTimeout(), The CheckpointAdjustRollbackTimeout() method +
org.freedesktop.NetworkManager.CheckpointAdjustRollbackTimeout(), The CheckpointAdjustRollbackTimeout() method
-
org.freedesktop.NetworkManager.CheckpointCreate(), The CheckpointCreate() method +
org.freedesktop.NetworkManager.CheckpointCreate(), The CheckpointCreate() method
-
org.freedesktop.NetworkManager.CheckpointDestroy(), The CheckpointDestroy() method +
org.freedesktop.NetworkManager.CheckpointDestroy(), The CheckpointDestroy() method
-
org.freedesktop.NetworkManager.CheckpointRollback(), The CheckpointRollback() method +
org.freedesktop.NetworkManager.CheckpointRollback(), The CheckpointRollback() method
-
org.freedesktop.NetworkManager.DeactivateConnection(), The DeactivateConnection() method +
org.freedesktop.NetworkManager.DeactivateConnection(), The DeactivateConnection() method
-
org.freedesktop.NetworkManager.Enable(), The Enable() method +
org.freedesktop.NetworkManager.Enable(), The Enable() method
-
org.freedesktop.NetworkManager.GetAllDevices(), The GetAllDevices() method +
org.freedesktop.NetworkManager.GetAllDevices(), The GetAllDevices() method
-
org.freedesktop.NetworkManager.GetDeviceByIpIface(), The GetDeviceByIpIface() method +
org.freedesktop.NetworkManager.GetDeviceByIpIface(), The GetDeviceByIpIface() method
-
org.freedesktop.NetworkManager.GetDevices(), The GetDevices() method +
org.freedesktop.NetworkManager.GetDevices(), The GetDevices() method
-
org.freedesktop.NetworkManager.GetLogging(), The GetLogging() method +
org.freedesktop.NetworkManager.GetLogging(), The GetLogging() method
-
org.freedesktop.NetworkManager.GetPermissions(), The GetPermissions() method +
org.freedesktop.NetworkManager.GetPermissions(), The GetPermissions() method
-
org.freedesktop.NetworkManager.Reload(), The Reload() method +
org.freedesktop.NetworkManager.Reload(), The Reload() method
-
org.freedesktop.NetworkManager.SetLogging(), The SetLogging() method +
org.freedesktop.NetworkManager.SetLogging(), The SetLogging() method
-
org.freedesktop.NetworkManager.Sleep(), The Sleep() method +
org.freedesktop.NetworkManager.Sleep(), The Sleep() method
-
org.freedesktop.NetworkManager.state(), The state() method +
org.freedesktop.NetworkManager.state(), The state() method
-
org.freedesktop.NetworkManager::CheckPermissions, The "CheckPermissions" signal +
org.freedesktop.NetworkManager::CheckPermissions, The "CheckPermissions" signal
-
org.freedesktop.NetworkManager::DeviceAdded, The "DeviceAdded" signal +
org.freedesktop.NetworkManager::DeviceAdded, The "DeviceAdded" signal
-
org.freedesktop.NetworkManager::DeviceRemoved, The "DeviceRemoved" signal +
org.freedesktop.NetworkManager::DeviceRemoved, The "DeviceRemoved" signal
-
org.freedesktop.NetworkManager::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager::StateChanged, The "StateChanged" signal +
org.freedesktop.NetworkManager::StateChanged, The "StateChanged" signal
-
org.freedesktop.NetworkManager:ActivatingConnection, The "ActivatingConnection" property +
org.freedesktop.NetworkManager:ActivatingConnection, The "ActivatingConnection" property
-
org.freedesktop.NetworkManager:ActiveConnections, The "ActiveConnections" property +
org.freedesktop.NetworkManager:ActiveConnections, The "ActiveConnections" property
-
org.freedesktop.NetworkManager:AllDevices, The "AllDevices" property +
org.freedesktop.NetworkManager:AllDevices, The "AllDevices" property
-
org.freedesktop.NetworkManager:Capabilities, The "Capabilities" property +
org.freedesktop.NetworkManager:Capabilities, The "Capabilities" property
-
org.freedesktop.NetworkManager:Checkpoints, The "Checkpoints" property +
org.freedesktop.NetworkManager:Checkpoints, The "Checkpoints" property
-
org.freedesktop.NetworkManager:Connectivity, The "Connectivity" property +
org.freedesktop.NetworkManager:Connectivity, The "Connectivity" property
-
org.freedesktop.NetworkManager:ConnectivityCheckAvailable, The "ConnectivityCheckAvailable" property +
org.freedesktop.NetworkManager:ConnectivityCheckAvailable, The "ConnectivityCheckAvailable" property
-
org.freedesktop.NetworkManager:ConnectivityCheckEnabled, The "ConnectivityCheckEnabled" property +
org.freedesktop.NetworkManager:ConnectivityCheckEnabled, The "ConnectivityCheckEnabled" property
-
org.freedesktop.NetworkManager:ConnectivityCheckUri, The "ConnectivityCheckUri" property +
org.freedesktop.NetworkManager:ConnectivityCheckUri, The "ConnectivityCheckUri" property
-
org.freedesktop.NetworkManager:Devices, The "Devices" property +
org.freedesktop.NetworkManager:Devices, The "Devices" property
-
org.freedesktop.NetworkManager:GlobalDnsConfiguration, The "GlobalDnsConfiguration" property +
org.freedesktop.NetworkManager:GlobalDnsConfiguration, The "GlobalDnsConfiguration" property
-
org.freedesktop.NetworkManager:Metered, The "Metered" property +
org.freedesktop.NetworkManager:Metered, The "Metered" property
-
org.freedesktop.NetworkManager:NetworkingEnabled, The "NetworkingEnabled" property +
org.freedesktop.NetworkManager:NetworkingEnabled, The "NetworkingEnabled" property
-
org.freedesktop.NetworkManager:PrimaryConnection, The "PrimaryConnection" property +
org.freedesktop.NetworkManager:PrimaryConnection, The "PrimaryConnection" property
-
org.freedesktop.NetworkManager:PrimaryConnectionType, The "PrimaryConnectionType" property +
org.freedesktop.NetworkManager:PrimaryConnectionType, The "PrimaryConnectionType" property
-
org.freedesktop.NetworkManager:Startup, The "Startup" property +
org.freedesktop.NetworkManager:Startup, The "Startup" property
-
org.freedesktop.NetworkManager:State, The "State" property +
org.freedesktop.NetworkManager:State, The "State" property
-
org.freedesktop.NetworkManager:Version, The "Version" property +
org.freedesktop.NetworkManager:Version, The "Version" property
-
org.freedesktop.NetworkManager:WimaxEnabled, The "WimaxEnabled" property +
org.freedesktop.NetworkManager:WimaxEnabled, The "WimaxEnabled" property
-
org.freedesktop.NetworkManager:WimaxHardwareEnabled, The "WimaxHardwareEnabled" property +
org.freedesktop.NetworkManager:WimaxHardwareEnabled, The "WimaxHardwareEnabled" property
-
org.freedesktop.NetworkManager:WirelessEnabled, The "WirelessEnabled" property +
org.freedesktop.NetworkManager:WirelessEnabled, The "WirelessEnabled" property
-
org.freedesktop.NetworkManager:WirelessHardwareEnabled, The "WirelessHardwareEnabled" property +
org.freedesktop.NetworkManager:WirelessHardwareEnabled, The "WirelessHardwareEnabled" property
-
org.freedesktop.NetworkManager:WwanEnabled, The "WwanEnabled" property +
org.freedesktop.NetworkManager:WwanEnabled, The "WwanEnabled" property
-
org.freedesktop.NetworkManager:WwanHardwareEnabled, The "WwanHardwareEnabled" property +
org.freedesktop.NetworkManager:WwanHardwareEnabled, The "WwanHardwareEnabled" property
-
master, connection +
master, connection
-
max-age, bridge +
max-age, bridge
-
may-fail, ipv4, ipv6 +
may-fail, ipv4, ipv6
-
mcast-rejoin-count, team +
mcast-rejoin-count, team
-
mcast-rejoin-interval, team +
mcast-rejoin-interval, team
-
mcast-snooping-enable, ovs-bridge +
mcast-snooping-enable, ovs-bridge
-
mdns, connection +
mdns, connection
-
metered, connection +
metered, connection
-
method, ipv4, ipv6, proxy +
method, ipv4, ipv6, proxy
-
mka-cak, macsec +
mka-cak, macsec
-
mka-cak-flags, macsec +
mka-cak-flags, macsec
-
mka-ckn, macsec +
mka-ckn, macsec
-
mode, ip-tunnel, macsec, macvlan, tun, 802-11-wireless +
mode, ip-tunnel, macsec, macvlan, tun, 802-11-wireless
-
mppe-stateful, ppp +
mppe-stateful, ppp
-
mru, ppp +
mru, ppp
-
mtu, cdma, gsm, infiniband, ip-tunnel, ppp, 802-3-ethernet, wireguard, 802-11-wireless +
mtu, cdma, gsm, infiniband, ip-tunnel, ppp, 802-3-ethernet, wireguard, 802-11-wireless
-
mud-url, connection +
mud-url, connection
-
multi-connect, connection +
multi-connect, connection
-
multi-queue, tun +
multi-queue, tun
-
multicast-hash-max, bridge +
multicast-hash-max, bridge
-
multicast-last-member-count, bridge +
multicast-last-member-count, bridge
-
multicast-last-member-interval, bridge +
multicast-last-member-interval, bridge
-
multicast-membership-interval, bridge +
multicast-membership-interval, bridge
-
multicast-querier, bridge +
multicast-querier, bridge
-
multicast-querier-interval, bridge +
multicast-querier-interval, bridge
-
multicast-query-interval, bridge +
multicast-query-interval, bridge
-
multicast-query-response-interval, bridge +
multicast-query-response-interval, bridge
-
multicast-query-use-ifaddr, bridge +
multicast-query-use-ifaddr, bridge
-
multicast-router, bridge +
multicast-router, bridge
-
multicast-snooping, bridge +
multicast-snooping, bridge
-
multicast-startup-query-count, bridge +
multicast-startup-query-count, bridge
-
multicast-startup-query-interval, bridge +
multicast-startup-query-interval, bridge

N

-
network-id, gsm +
network-id, gsm
-
network-name, wimax +
network-name, wimax
-
never-default, ipv4, ipv6 +
never-default, ipv4, ipv6
-
NM80211ApFlags, enum NM80211ApFlags +
NM80211ApFlags, enum NM80211ApFlags
-
NM80211ApSecurityFlags, enum NM80211ApSecurityFlags +
NM80211ApSecurityFlags, enum NM80211ApSecurityFlags
-
NM80211Mode, enum NM80211Mode +
NM80211Mode, enum NM80211Mode
-
NMActivationStateFlags, enum NMActivationStateFlags +
NMActivationStateFlags, enum NMActivationStateFlags
-
NMActiveConnectionState, enum NMActiveConnectionState +
NMActiveConnectionState, enum NMActiveConnectionState
-
NMActiveConnectionStateReason, enum NMActiveConnectionStateReason +
NMActiveConnectionStateReason, enum NMActiveConnectionStateReason
-
NMBluetoothCapabilities, enum NMBluetoothCapabilities +
NMBluetoothCapabilities, enum NMBluetoothCapabilities
-
NMCapability, enum NMCapability +
NMCapability, enum NMCapability
-
NMCheckpointCreateFlags, enum NMCheckpointCreateFlags +
NMCheckpointCreateFlags, enum NMCheckpointCreateFlags
-
NMClientPermission, enum NMClientPermission +
NMClientPermission, enum NMClientPermission
-
NMClientPermissionResult, enum NMClientPermissionResult +
NMClientPermissionResult, enum NMClientPermissionResult
-
NMConnectionMultiConnect, enum NMConnectionMultiConnect +
NMConnectionMultiConnect, enum NMConnectionMultiConnect
-
NMConnectivityState, enum NMConnectivityState +
NMConnectivityState, enum NMConnectivityState
-
NMDeviceCapabilities, enum NMDeviceCapabilities +
NMDeviceCapabilities, enum NMDeviceCapabilities
-
NMDeviceInterfaceFlags, enum NMDeviceInterfaceFlags +
NMDeviceInterfaceFlags, enum NMDeviceInterfaceFlags
-
NMDeviceModemCapabilities, enum NMDeviceModemCapabilities +
NMDeviceModemCapabilities, enum NMDeviceModemCapabilities
-
NMDeviceState, enum NMDeviceState +
NMDeviceState, enum NMDeviceState
-
NMDeviceStateReason, enum NMDeviceStateReason +
NMDeviceStateReason, enum NMDeviceStateReason
-
NMDeviceType, enum NMDeviceType +
NMDeviceType, enum NMDeviceType
-
NMDeviceWifiCapabilities, enum NMDeviceWifiCapabilities +
NMDeviceWifiCapabilities, enum NMDeviceWifiCapabilities
-
NMIPTunnelMode, enum NMIPTunnelMode +
NMIPTunnelMode, enum NMIPTunnelMode
-
NMManagerReloadFlags, enum NMManagerReloadFlags +
NMManagerReloadFlags, enum NMManagerReloadFlags
-
NMMetered, enum NMMetered +
NMMetered, enum NMMetered
-
NMRollbackResult, enum NMRollbackResult +
NMRollbackResult, enum NMRollbackResult
-
NMSecretAgentCapabilities, enum NMSecretAgentCapabilities +
NMSecretAgentCapabilities, enum NMSecretAgentCapabilities
-
NMSecretAgentGetSecretsFlags, enum NMSecretAgentGetSecretsFlags +
NMSecretAgentGetSecretsFlags, enum NMSecretAgentGetSecretsFlags
-
NMSettingsAddConnection2Flags, enum NMSettingsAddConnection2Flags +
NMSettingsAddConnection2Flags, enum NMSettingsAddConnection2Flags
-
NMSettingsConnectionFlags, enum NMSettingsConnectionFlags +
NMSettingsConnectionFlags, enum NMSettingsConnectionFlags
-
NMSettingsUpdate2Flags, enum NMSettingsUpdate2Flags +
NMSettingsUpdate2Flags, enum NMSettingsUpdate2Flags
-
NMState, enum NMState +
NMState, enum NMState
-
NMTernary, enum NMTernary +
NMTernary, enum NMTernary
-
NMVpnConnectionState, enum NMVpnConnectionState +
NMVpnConnectionState, enum NMVpnConnectionState
-
NMVpnConnectionStateReason, enum NMVpnConnectionStateReason +
NMVpnConnectionStateReason, enum NMVpnConnectionStateReason
-
NMVpnPluginFailure, enum NMVpnPluginFailure +
NMVpnPluginFailure, enum NMVpnPluginFailure
-
NMVpnServiceState, enum NMVpnServiceState +
NMVpnServiceState, enum NMVpnServiceState
-
NMWimaxNspNetworkType, enum NMWimaxNspNetworkType +
NMWimaxNspNetworkType, enum NMWimaxNspNetworkType
-
no-vj-comp, ppp +
no-vj-comp, ppp
-
noauth, ppp +
noauth, ppp
-
nobsdcomp, ppp +
nobsdcomp, ppp
-
nodeflate, ppp +
nodeflate, ppp
-
notify-peers-count, team +
notify-peers-count, team
-
notify-peers-interval, team +
notify-peers-interval, team
-
number, cdma, gsm +
number, cdma, gsm

O

-
only-from-default, hostname +
only-from-default, hostname
-
optional, 802-1x +
optional, 802-1x
-
options, bond +
options, bond
-
output-key, ip-tunnel +
output-key, ip-tunnel
-
owner, tun +
owner, tun

P

-
p-key, infiniband +
p-key, infiniband
-
pac-file, 802-1x +
pac-file, 802-1x
-
pac-script, proxy +
pac-script, proxy
-
pac-url, proxy +
pac-url, proxy
-
page, wpan +
page, wpan
-
pairwise, 802-11-wireless-security +
pairwise, 802-11-wireless-security
-
pan-id, wpan +
pan-id, wpan
-
parent, 6lowpan, infiniband, ip-tunnel, macsec, macvlan, pppoe, vlan, vxlan +
parent, 6lowpan, infiniband, ip-tunnel, macsec, macvlan, pppoe, vlan, vxlan
-
parity, serial +
parity, serial
-
password, 802-1x, adsl, cdma, gsm, pppoe +
password, 802-1x, adsl, cdma, gsm, pppoe
-
password-flags, 802-1x, adsl, cdma, gsm, pppoe +
password-flags, 802-1x, adsl, cdma, gsm, pppoe
-
password-raw, 802-1x +
password-raw, 802-1x
-
password-raw-flags, 802-1x +
password-raw-flags, 802-1x
-
path, match +
path, match
-
path-cost, bridge-port +
path-cost, bridge-port
-
path-mtu-discovery, ip-tunnel +
path-mtu-discovery, ip-tunnel
-
peer, ovs-patch, wifi-p2p, veth +
peer, ovs-patch, wifi-p2p, veth
-
peer-routes, wireguard +
peer-routes, wireguard
-
peers, wireguard +
peers, wireguard
-
permissions, connection +
permissions, connection
-
persistent, vpn +
persistent, vpn
-
phase1-auth-flags, 802-1x +
phase1-auth-flags, 802-1x
-
phase1-fast-provisioning, 802-1x +
phase1-fast-provisioning, 802-1x
-
phase1-peaplabel, 802-1x +
phase1-peaplabel, 802-1x
-
phase1-peapver, 802-1x +
phase1-peapver, 802-1x
-
phase2-altsubject-matches, 802-1x +
phase2-altsubject-matches, 802-1x
-
phase2-auth, 802-1x +
phase2-auth, 802-1x
-
phase2-autheap, 802-1x +
phase2-autheap, 802-1x
-
phase2-ca-cert, 802-1x +
phase2-ca-cert, 802-1x
-
phase2-ca-cert-password, 802-1x +
phase2-ca-cert-password, 802-1x
-
phase2-ca-cert-password-flags, 802-1x +
phase2-ca-cert-password-flags, 802-1x
-
phase2-ca-path, 802-1x +
phase2-ca-path, 802-1x
-
phase2-client-cert, 802-1x +
phase2-client-cert, 802-1x
-
phase2-client-cert-password, 802-1x +
phase2-client-cert-password, 802-1x
-
phase2-client-cert-password-flags, 802-1x +
phase2-client-cert-password-flags, 802-1x
-
phase2-domain-match, 802-1x +
phase2-domain-match, 802-1x
-
phase2-domain-suffix-match, 802-1x +
phase2-domain-suffix-match, 802-1x
-
phase2-private-key, 802-1x +
phase2-private-key, 802-1x
-
phase2-private-key-password, 802-1x +
phase2-private-key-password, 802-1x
-
phase2-private-key-password-flags, 802-1x +
phase2-private-key-password-flags, 802-1x
-
phase2-subject-match, 802-1x +
phase2-subject-match, 802-1x
-
pi, tun +
pi, tun
-
pin, 802-1x, gsm +
pin, 802-1x, gsm
-
pin-flags, 802-1x, gsm +
pin-flags, 802-1x, gsm
-
pmf, 802-11-wireless-security +
pmf, 802-11-wireless-security
-
port, macsec, 802-3-ethernet +
port, macsec, 802-3-ethernet
-
powersave, 802-11-wireless +
powersave, 802-11-wireless
-
org.freedesktop.NetworkManager.PPP, org.freedesktop.NetworkManager.PPP +
org.freedesktop.NetworkManager.PPP, org.freedesktop.NetworkManager.PPP
-
org.freedesktop.NetworkManager.PPP.NeedSecrets(), The NeedSecrets() method +
org.freedesktop.NetworkManager.PPP.NeedSecrets(), The NeedSecrets() method
-
org.freedesktop.NetworkManager.PPP.SetIfindex(), The SetIfindex() method +
org.freedesktop.NetworkManager.PPP.SetIfindex(), The SetIfindex() method
-
org.freedesktop.NetworkManager.PPP.SetIp4Config(), The SetIp4Config() method +
org.freedesktop.NetworkManager.PPP.SetIp4Config(), The SetIp4Config() method
-
org.freedesktop.NetworkManager.PPP.SetIp6Config(), The SetIp6Config() method +
org.freedesktop.NetworkManager.PPP.SetIp6Config(), The SetIp6Config() method
-
org.freedesktop.NetworkManager.PPP.SetState(), The SetState() method +
org.freedesktop.NetworkManager.PPP.SetState(), The SetState() method
-
prio, team-port +
prio, team-port
-
priority, bridge, bridge-port, hostname +
priority, bridge, bridge-port, hostname
-
priority-bandwidth, dcb +
priority-bandwidth, dcb
-
priority-flow-control, dcb +
priority-flow-control, dcb
-
priority-flow-control-flags, dcb +
priority-flow-control-flags, dcb
-
priority-group-bandwidth, dcb +
priority-group-bandwidth, dcb
-
priority-group-flags, dcb +
priority-group-flags, dcb
-
priority-group-id, dcb +
priority-group-id, dcb
-
priority-strict-bandwidth, dcb +
priority-strict-bandwidth, dcb
-
priority-traffic-class, dcb +
priority-traffic-class, dcb
-
private-key, 802-1x, wireguard +
private-key, 802-1x, wireguard
-
private-key-flags, wireguard +
private-key-flags, wireguard
-
private-key-password, 802-1x +
private-key-password, 802-1x
-
private-key-password-flags, 802-1x +
private-key-password-flags, 802-1x
-
promiscuous, macvlan +
promiscuous, macvlan
-
proto, 802-11-wireless-security +
proto, 802-11-wireless-security
-
protocol, adsl +
protocol, adsl
-
proxy, vxlan +
proxy, vxlan
-
psk, 802-11-wireless-security +
psk, 802-11-wireless-security
-
psk-flags, 802-11-wireless-security +
psk-flags, 802-11-wireless-security

Q

-
qdiscs, tc +
qdiscs, tc
-
queue-id, team-port +
queue-id, team-port

R

-
ra-timeout, ipv6 +
ra-timeout, ipv6
-
rate, 802-11-wireless +
rate, 802-11-wireless
-
read-only, connection +
read-only, connection
-
refuse-chap, ppp +
refuse-chap, ppp
-
refuse-eap, ppp +
refuse-eap, ppp
-
refuse-mschap, ppp +
refuse-mschap, ppp
-
refuse-mschapv2, ppp +
refuse-mschapv2, ppp
-
refuse-pap, ppp +
refuse-pap, ppp
-
remote, ip-tunnel, vxlan +
remote, ip-tunnel, vxlan
-
require-mppe, ppp +
require-mppe, ppp
-
require-mppe-128, ppp +
require-mppe-128, ppp
-
route-data, ipv4, ipv6 +
route-data, ipv4, ipv6
-
route-metric, ipv4, ipv6 +
route-metric, ipv4, ipv6
-
route-table, ipv4, ipv6 +
route-table, ipv4, ipv6
-
routes, ipv4, ipv6 +
routes, ipv4, ipv6
-
rsc, vxlan +
rsc, vxlan
-
rstp-enable, ovs-bridge +
rstp-enable, ovs-bridge
-
runner, team +
runner, team
-
runner-active, team +
runner-active, team
-
runner-agg-select-policy, team +
runner-agg-select-policy, team
-
runner-fast-rate, team +
runner-fast-rate, team
-
runner-hwaddr-policy, team +
runner-hwaddr-policy, team
-
runner-min-ports, team +
runner-min-ports, team
-
runner-sys-prio, team +
runner-sys-prio, team
-
runner-tx-balancer, team +
runner-tx-balancer, team
-
runner-tx-balancer-interval, team +
runner-tx-balancer-interval, team
-
runner-tx-hash, team +
runner-tx-hash, team

S

-
s390-nettype, 802-3-ethernet +
s390-nettype, 802-3-ethernet
-
s390-options, 802-3-ethernet +
s390-options, 802-3-ethernet
-
s390-subchannels, 802-3-ethernet +
s390-subchannels, 802-3-ethernet
-
secondaries, connection +
secondaries, connection
-
secrets, vpn +
secrets, vpn
-
security, 802-11-wireless +
security, 802-11-wireless
-
seen-bssids, 802-11-wireless +
seen-bssids, 802-11-wireless
-
send-delay, serial +
send-delay, serial
-
send-sci, macsec +
send-sci, macsec
-
service, pppoe +
service, pppoe
-
service-type, vpn +
service-type, vpn
-
short-address, wpan +
short-address, wpan
-
sim-id, gsm +
sim-id, gsm
-
sim-operator-id, gsm +
sim-operator-id, gsm
-
slave-type, connection +
slave-type, connection
-
source-port-max, vxlan +
source-port-max, vxlan
-
source-port-min, vxlan +
source-port-min, vxlan
-
speed, 802-3-ethernet +
speed, 802-3-ethernet
-
ssid, 802-11-olpc-mesh, 802-11-wireless +
ssid, 802-11-olpc-mesh, 802-11-wireless
-
stable-id, connection +
stable-id, connection
-
sticky, team-port +
sticky, team-port
-
stopbits, serial +
stopbits, serial
-
stp, bridge +
stp, bridge
-
stp-enable, ovs-bridge +
stp-enable, ovs-bridge
-
subject-match, 802-1x +
subject-match, 802-1x
-
system-ca-certs, 802-1x +
system-ca-certs, 802-1x

T

-
table, vrf +
table, vrf
-
tag, ovs-port +
tag, ovs-port
-
tap, macvlan +
tap, macvlan
-
tfilters, tc +
tfilters, tc
-
timeout, vpn +
timeout, vpn
-
timestamp, connection +
timestamp, connection
-
token, ipv6 +
token, ipv6
-
tos, ip-tunnel, vxlan +
tos, ip-tunnel, vxlan
-
total-vfs, sriov +
total-vfs, sriov
-
transport-mode, infiniband +
transport-mode, infiniband
-
ttl, ip-tunnel, vxlan +
ttl, ip-tunnel, vxlan
-
tx-power, 802-11-wireless +
tx-power, 802-11-wireless
-
type, connection, bluetooth, ovs-interface +
type, connection, bluetooth, ovs-interface

U

-
user-name, vpn +
user-name, vpn
-
username, adsl, cdma, gsm, pppoe +
username, adsl, cdma, gsm, pppoe
-
uuid, connection +
uuid, connection

V

-
validation, macsec +
validation, macsec
-
vci, adsl +
vci, adsl
-
vfs, sriov +
vfs, sriov
-
vlan-default-pvid, bridge +
vlan-default-pvid, bridge
-
vlan-filtering, bridge +
vlan-filtering, bridge
-
vlan-mode, ovs-port +
vlan-mode, ovs-port
-
vlan-protocol, bridge +
vlan-protocol, bridge
-
vlan-stats-enabled, bridge +
vlan-stats-enabled, bridge
-
vlans, bridge, bridge-port +
vlans, bridge, bridge-port
-
vnet-hdr, tun +
vnet-hdr, tun
-
vpi, adsl +
vpi, adsl
-
org.freedesktop.NetworkManager.VPN.Connection, org.freedesktop.NetworkManager.VPN.Connection +
org.freedesktop.NetworkManager.VPN.Connection, org.freedesktop.NetworkManager.VPN.Connection
-
org.freedesktop.NetworkManager.VPN.Connection::PropertiesChanged, The "PropertiesChanged" signal +
org.freedesktop.NetworkManager.VPN.Connection::PropertiesChanged, The "PropertiesChanged" signal
-
org.freedesktop.NetworkManager.VPN.Connection::VpnStateChanged, The "VpnStateChanged" signal +
org.freedesktop.NetworkManager.VPN.Connection::VpnStateChanged, The "VpnStateChanged" signal
-
org.freedesktop.NetworkManager.VPN.Connection:Banner, The "Banner" property +
org.freedesktop.NetworkManager.VPN.Connection:Banner, The "Banner" property
-
org.freedesktop.NetworkManager.VPN.Connection:VpnState, The "VpnState" property +
org.freedesktop.NetworkManager.VPN.Connection:VpnState, The "VpnState" property
-
org.freedesktop.NetworkManager.VPN.Plugin, org.freedesktop.NetworkManager.VPN.Plugin +
org.freedesktop.NetworkManager.VPN.Plugin, org.freedesktop.NetworkManager.VPN.Plugin
-
org.freedesktop.NetworkManager.VPN.Plugin.Connect(), The Connect() method +
org.freedesktop.NetworkManager.VPN.Plugin.Connect(), The Connect() method
-
org.freedesktop.NetworkManager.VPN.Plugin.ConnectInteractive(), The ConnectInteractive() method +
org.freedesktop.NetworkManager.VPN.Plugin.ConnectInteractive(), The ConnectInteractive() method
-
org.freedesktop.NetworkManager.VPN.Plugin.Disconnect(), The Disconnect() method +
org.freedesktop.NetworkManager.VPN.Plugin.Disconnect(), The Disconnect() method
-
org.freedesktop.NetworkManager.VPN.Plugin.NeedSecrets(), The NeedSecrets() method +
org.freedesktop.NetworkManager.VPN.Plugin.NeedSecrets(), The NeedSecrets() method
-
org.freedesktop.NetworkManager.VPN.Plugin.NewSecrets(), The NewSecrets() method +
org.freedesktop.NetworkManager.VPN.Plugin.NewSecrets(), The NewSecrets() method
-
org.freedesktop.NetworkManager.VPN.Plugin.SetConfig(), The SetConfig() method +
org.freedesktop.NetworkManager.VPN.Plugin.SetConfig(), The SetConfig() method
-
org.freedesktop.NetworkManager.VPN.Plugin.SetFailure(), The SetFailure() method +
org.freedesktop.NetworkManager.VPN.Plugin.SetFailure(), The SetFailure() method
-
org.freedesktop.NetworkManager.VPN.Plugin.SetIp4Config(), The SetIp4Config() method +
org.freedesktop.NetworkManager.VPN.Plugin.SetIp4Config(), The SetIp4Config() method
-
org.freedesktop.NetworkManager.VPN.Plugin.SetIp6Config(), The SetIp6Config() method +
org.freedesktop.NetworkManager.VPN.Plugin.SetIp6Config(), The SetIp6Config() method
-
org.freedesktop.NetworkManager.VPN.Plugin::Config, The "Config" signal +
org.freedesktop.NetworkManager.VPN.Plugin::Config, The "Config" signal
-
org.freedesktop.NetworkManager.VPN.Plugin::Failure, The "Failure" signal +
org.freedesktop.NetworkManager.VPN.Plugin::Failure, The "Failure" signal
-
org.freedesktop.NetworkManager.VPN.Plugin::Ip4Config, The "Ip4Config" signal +
org.freedesktop.NetworkManager.VPN.Plugin::Ip4Config, The "Ip4Config" signal
-
org.freedesktop.NetworkManager.VPN.Plugin::Ip6Config, The "Ip6Config" signal +
org.freedesktop.NetworkManager.VPN.Plugin::Ip6Config, The "Ip6Config" signal
-
org.freedesktop.NetworkManager.VPN.Plugin::LoginBanner, The "LoginBanner" signal +
org.freedesktop.NetworkManager.VPN.Plugin::LoginBanner, The "LoginBanner" signal
-
org.freedesktop.NetworkManager.VPN.Plugin::SecretsRequired, The "SecretsRequired" signal +
org.freedesktop.NetworkManager.VPN.Plugin::SecretsRequired, The "SecretsRequired" signal
-
org.freedesktop.NetworkManager.VPN.Plugin::StateChanged, The "StateChanged" signal +
org.freedesktop.NetworkManager.VPN.Plugin::StateChanged, The "StateChanged" signal
-
org.freedesktop.NetworkManager.VPN.Plugin:State, The "State" property +
org.freedesktop.NetworkManager.VPN.Plugin:State, The "State" property

W

-
wait-device-timeout, connection +
wait-device-timeout, connection
-
wake-on-lan, 802-3-ethernet +
wake-on-lan, 802-3-ethernet
-
wake-on-lan-password, 802-3-ethernet +
wake-on-lan-password, 802-3-ethernet
-
wake-on-wlan, 802-11-wireless +
wake-on-wlan, 802-11-wireless
-
wep-key-flags, 802-11-wireless-security +
wep-key-flags, 802-11-wireless-security
-
wep-key-type, 802-11-wireless-security +
wep-key-type, 802-11-wireless-security
-
wep-key0, 802-11-wireless-security +
wep-key0, 802-11-wireless-security
-
wep-key1, 802-11-wireless-security +
wep-key1, 802-11-wireless-security
-
wep-key2, 802-11-wireless-security +
wep-key2, 802-11-wireless-security
-
wep-key3, 802-11-wireless-security +
wep-key3, 802-11-wireless-security
-
wep-tx-keyidx, 802-11-wireless-security +
wep-tx-keyidx, 802-11-wireless-security
-
wfd-ies, wifi-p2p +
wfd-ies, wifi-p2p
-
org.freedesktop.NetworkManager.WifiP2PPeer, org.freedesktop.NetworkManager.WifiP2PPeer +
org.freedesktop.NetworkManager.WifiP2PPeer, org.freedesktop.NetworkManager.WifiP2PPeer
-
org.freedesktop.NetworkManager.WifiP2PPeer:Flags, The "Flags" property +
org.freedesktop.NetworkManager.WifiP2PPeer:Flags, The "Flags" property
-
org.freedesktop.NetworkManager.WifiP2PPeer:HwAddress, The "HwAddress" property +
org.freedesktop.NetworkManager.WifiP2PPeer:HwAddress, The "HwAddress" property
-
org.freedesktop.NetworkManager.WifiP2PPeer:LastSeen, The "LastSeen" property +
org.freedesktop.NetworkManager.WifiP2PPeer:LastSeen, The "LastSeen" property
-
org.freedesktop.NetworkManager.WifiP2PPeer:Manufacturer, The "Manufacturer" property +
org.freedesktop.NetworkManager.WifiP2PPeer:Manufacturer, The "Manufacturer" property
-
org.freedesktop.NetworkManager.WifiP2PPeer:Model, The "Model" property +
org.freedesktop.NetworkManager.WifiP2PPeer:Model, The "Model" property
-
org.freedesktop.NetworkManager.WifiP2PPeer:ModelNumber, The "ModelNumber" property +
org.freedesktop.NetworkManager.WifiP2PPeer:ModelNumber, The "ModelNumber" property
-
org.freedesktop.NetworkManager.WifiP2PPeer:Name, The "Name" property +
org.freedesktop.NetworkManager.WifiP2PPeer:Name, The "Name" property
-
org.freedesktop.NetworkManager.WifiP2PPeer:Serial, The "Serial" property +
org.freedesktop.NetworkManager.WifiP2PPeer:Serial, The "Serial" property
-
org.freedesktop.NetworkManager.WifiP2PPeer:Strength, The "Strength" property +
org.freedesktop.NetworkManager.WifiP2PPeer:Strength, The "Strength" property
-
org.freedesktop.NetworkManager.WifiP2PPeer:WfdIEs, The "WfdIEs" property +
org.freedesktop.NetworkManager.WifiP2PPeer:WfdIEs, The "WfdIEs" property
-
wps-method, wifi-p2p, 802-11-wireless-security +
wps-method, wifi-p2p, 802-11-wireless-security

Z

-
zone, connection +
zone, connection
diff --git a/docs/api/html/nm-settings-dbus.html b/docs/api/html/nm-settings-dbus.html index d428591..85f77f2 100644 --- a/docs/api/html/nm-settings-dbus.html +++ b/docs/api/html/nm-settings-dbus.html @@ -512,14 +512,14 @@ phase2-auth string   -Specifies the allowed "phase 2" inner non-EAP authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. Recognized non-EAP "phase 2" methods are "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. +Specifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified. phase2-autheap string   -Specifies the allowed "phase 2" inner EAP-based authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. +Specifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. diff --git a/docs/api/html/nm-settings-ifcfg-rh.html b/docs/api/html/nm-settings-ifcfg-rh.html index 28ea908..8b57a58 100644 --- a/docs/api/html/nm-settings-ifcfg-rh.html +++ b/docs/api/html/nm-settings-ifcfg-rh.html @@ -422,7 +422,7 @@ Allowed values: space-separated list of authentication flags nam IEEE_8021X_INNER_AUTH_METHODS(+)   -Inner non-EAP authentication methods. IEEE_8021X_INNER_AUTH_METHODS can contain values both for 'phase2-auth' and 'phase2-autheap' properties. +Inner non-EAP authentication methods for TTLS or the inner EAP authentication method for PEAP. IEEE_8021X_INNER_AUTH_METHODS can contain values both for 'phase2-auth' and 'phase2-autheap' properties. Example: IEEE_8021X_INNER_AUTH_METHODS=PAP diff --git a/docs/api/html/nm-settings-nmcli.html b/docs/api/html/nm-settings-nmcli.html index 5d5c86f..e59968a 100644 --- a/docs/api/html/nm-settings-nmcli.html +++ b/docs/api/html/nm-settings-nmcli.html @@ -541,7 +541,7 @@

phase2-auth

-

Specifies the allowed "phase 2" inner non-EAP authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. Recognized non-EAP "phase 2" methods are "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.

+

Specifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified.

Format: string

@@ -549,7 +549,7 @@

phase2-autheap

-

Specifies the allowed "phase 2" inner EAP-based authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.

+

Specifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.

Format: string

@@ -1511,6 +1511,10 @@

+

feature-macsec-hw-offload

+

+ +

feature-ntuple

@@ -1531,6 +1535,14 @@

+

feature-rx-gro-list

+

+ + +

feature-rx-udp-gro-forwarding

+

+ +

feature-rx-udp_tunnel-port-offload

@@ -1563,6 +1575,10 @@

+

feature-tls-hw-rx-offload

+

+ +

feature-tls-hw-tx-offload

@@ -1611,6 +1627,10 @@

+

feature-tx-gso-list

+

+ +

feature-tx-gso-partial

@@ -1659,6 +1679,10 @@

+

feature-tx-tunnel-remcsum-segmentation

+

+ +

feature-tx-udp-segmentation

diff --git a/docs/api/html/settings-802-1x.html b/docs/api/html/settings-802-1x.html index 319d608..146bd35 100644 --- a/docs/api/html/settings-802-1x.html +++ b/docs/api/html/settings-802-1x.html @@ -207,13 +207,13 @@
phase2-auth
string

-Specifies the allowed "phase 2" inner non-EAP authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property.  Recognized non-EAP "phase 2" methods are "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.
+Specifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property.  For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method.  For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified.
 
 
 
phase2-autheap
string

-Specifies the allowed "phase 2" inner EAP-based authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property.  Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.
+Specifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property.  Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.
 
 
 
phase2-ca-cert
diff --git a/docs/api/settings-spec.xml b/docs/api/settings-spec.xml index 39a8d3d..c615558 100644 --- a/docs/api/settings-spec.xml +++ b/docs/api/settings-spec.xml @@ -6,7 +6,7 @@ Properties Key NameValue TypeDefault ValueValue DescriptionparentparentstringIf given, specifies the parent interface name or parent connection UUID from which this 6LowPAN interface should be created.
802-1xIEEE 802.1x Authentication Settings Properties - Key NameValue TypeDefault ValueValue Descriptionaltsubject-matchesaltsubject-matchesarray of stringList of strings to be matched against the altSubjectName of the certificate presented by the authentication server. If the list is empty, no verification of the server certificate's altSubjectName is performed.anonymous-identityanonymous-identitystringAnonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS.auth-timeoutauth-timeoutint320A timeout for the authentication. Zero means the global default; if the global default is not set, the authentication timeout is 25 seconds.ca-certca-certbyte arrayContains the CA certificate if used by the EAP method specified in the "eap" property. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory.ca-cert-passwordca-cert-passwordstringThe password used to access the CA certificate stored in "ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.ca-cert-password-flagsca-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "ca-cert-password" property.ca-pathca-pathstringUTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the "ca-cert" property. If NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an existing directory, then this setting is ignored.client-certclient-certbyte arrayContains the client certificate if used by the EAP method specified in the "eap" property. Certificate data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte.client-cert-passwordclient-cert-passwordstringThe password used to access the client certificate stored in "client-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.client-cert-password-flagsclient-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "client-cert-password" property.domain-matchdomain-matchstringConstraint for server domain name. If set, this list of FQDNs is used as a match requirement for dNSName element(s) of the certificate presented by the authentication server. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using the same comparison. Multiple valid FQDNs can be passed as a ";" delimited list.domain-suffix-matchdomain-suffix-matchstringConstraint for server domain name. If set, this FQDN is used as a suffix match requirement for dNSName element(s) of the certificate presented by the authentication server. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using same suffix match comparison. Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited list.eapeaparray of stringThe allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: "leap", "md5", "tls", "peap", "ttls", "pwd", and "fast". Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations.identityidentitystringIdentity string for EAP authentication methods. Often the user's user or login name.optionaloptionalbooleanFALSEWhether the 802.1X authentication is optional. If TRUE, the activation will continue even after a timeout or an authentication failure. Setting the property to TRUE is currently allowed only for Ethernet connections. If set to FALSE, the activation can continue only after a successful authentication.pac-filepac-filestringUTF-8 encoded file path containing PAC for EAP-FAST.passwordpasswordstringUTF-8 encoded password used for EAP authentication methods. If both the "password" property and the "password-raw" property are specified, "password" is preferred.password-flagspassword-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property.password-rawpassword-rawbyte arrayPassword used for EAP authentication methods, given as a byte array to allow passwords in other encodings than UTF-8 to be used. If both the "password" property and the "password-raw" property are specified, "password" is preferred.password-raw-flagspassword-raw-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password-raw" property.phase1-auth-flagsphase1-auth-flagsuint320Specifies authentication flags to use in "phase 1" outer authentication using NMSetting8021xAuthFlags options. The individual TLS versions can be explicitly disabled. If a certain TLS disable flag is not set, it is up to the supplicant to allow or forbid it. The TLS options map to tls_disable_tlsv1_x settings. See the wpa_supplicant documentation for more details.phase1-fast-provisioningphase1-fast-provisioningstringEnables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the "eap" property. Recognized values are "0" (disabled), "1" (allow unauthenticated provisioning), "2" (allow authenticated provisioning), and "3" (allow both authenticated and unauthenticated provisioning). See the wpa_supplicant documentation for more details.phase1-peaplabelphase1-peaplabelstringForces use of the new PEAP label during key derivation. Some RADIUS servers may require forcing the new PEAP label to interoperate with PEAPv1. Set to "1" to force use of the new PEAP label. See the wpa_supplicant documentation for more details.phase1-peapverphase1-peapverstringForces which PEAP version is used when PEAP is set as the EAP method in the "eap" property. When unset, the version reported by the server will be used. Sometimes when using older RADIUS servers, it is necessary to force the client to use a particular PEAP version. To do so, this property may be set to "0" or "1" to force that specific PEAP version.phase2-altsubject-matchesphase2-altsubject-matchesarray of stringList of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner "phase 2" authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed.phase2-authphase2-authstringSpecifies the allowed "phase 2" inner non-EAP authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. Recognized non-EAP "phase 2" methods are "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.phase2-autheapphase2-autheapstringSpecifies the allowed "phase 2" inner EAP-based authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.phase2-ca-certphase2-ca-certbyte arrayContains the "phase 2" CA certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory.phase2-ca-cert-passwordphase2-ca-cert-passwordstringThe password used to access the "phase2" CA certificate stored in "phase2-ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.phase2-ca-cert-password-flagsphase2-ca-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-ca-cert-password" property.phase2-ca-pathphase2-ca-pathstringUTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the "phase2-ca-cert" property. If NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an existing directory, then this setting is ignored.phase2-client-certphase2-client-certbyte arrayContains the "phase 2" client certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended.phase2-client-cert-passwordphase2-client-cert-passwordstringThe password used to access the "phase2" client certificate stored in "phase2-client-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.phase2-client-cert-password-flagsphase2-client-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-client-cert-password" property.phase2-domain-matchphase2-domain-matchstringConstraint for server domain name. If set, this list of FQDNs is used as a match requirement for dNSName element(s) of the certificate presented by the authentication server during the inner "phase 2" authentication. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using the same comparison. Multiple valid FQDNs can be passed as a ";" delimited list.phase2-domain-suffix-matchphase2-domain-suffix-matchstringConstraint for server domain name. If set, this FQDN is used as a suffix match requirement for dNSName element(s) of the certificate presented by the authentication server during the inner "phase 2" authentication. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using same suffix match comparison. Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited list.phase2-private-keyphase2-private-keybyte arrayContains the "phase 2" inner private key when the "phase2-auth" or "phase2-autheap" property is set to "tls". Key data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the "phase2-private-key-password" property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte, and as with the blob scheme the "phase2-private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate.phase2-private-key-passwordphase2-private-key-passwordstringThe password used to decrypt the "phase 2" private key specified in the "phase2-private-key" property when the private key either uses the path scheme, or is a PKCS#12 format key.phase2-private-key-password-flagsphase2-private-key-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-private-key-password" property.phase2-subject-matchphase2-subject-matchstringSubstring to be matched against the subject of the certificate presented by the authentication server during the inner "phase 2" authentication. When unset, no verification of the authentication server certificate's subject is performed. This property provides little security, if any, and its use is deprecated in favor of NMSetting8021x:phase2-domain-suffix-match.pinpinstringPIN used for EAP authentication methods.pin-flagspin-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "pin" property.private-keyprivate-keybyte arrayContains the private key when the "eap" property is set to "tls". Key data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the "private-key-password" property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte, and as with the blob scheme the "private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate. WARNING: "private-key" is not a "secret" property, and thus unencrypted private key data using the BLOB scheme may be readable by unprivileged users. Private keys should always be encrypted with a private key password to prevent unauthorized access to unencrypted private key data.private-key-passwordprivate-key-passwordstringThe password used to decrypt the private key specified in the "private-key" property when the private key either uses the path scheme, or if the private key is a PKCS#12 format key.private-key-password-flagsprivate-key-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "private-key-password" property.subject-matchsubject-matchstringSubstring to be matched against the subject of the certificate presented by the authentication server. When unset, no verification of the authentication server certificate's subject is performed. This property provides little security, if any, and its use is deprecated in favor of NMSetting8021x:domain-suffix-match.system-ca-certssystem-ca-certsbooleanFALSEWhen TRUE, overrides the "ca-path" and "phase2-ca-path" properties using the system CA directory specified at configure time with the --system-ca-path switch. The certificates in this directory are added to the verification chain in addition to any certificates specified by the "ca-cert" and "phase2-ca-cert" properties. If the path provided with --system-ca-path is rather a file name (bundle of trusted CA certificates), it overrides "ca-cert" and "phase2-ca-cert" properties instead (sets ca_cert/ca_cert2 options for wpa_supplicant).
adslADSL Settings + Key NameValue TypeDefault ValueValue Descriptionaltsubject-matchesaltsubject-matchesarray of stringList of strings to be matched against the altSubjectName of the certificate presented by the authentication server. If the list is empty, no verification of the server certificate's altSubjectName is performed.anonymous-identityanonymous-identitystringAnonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS.auth-timeoutauth-timeoutint320A timeout for the authentication. Zero means the global default; if the global default is not set, the authentication timeout is 25 seconds.ca-certca-certbyte arrayContains the CA certificate if used by the EAP method specified in the "eap" property. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory.ca-cert-passwordca-cert-passwordstringThe password used to access the CA certificate stored in "ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.ca-cert-password-flagsca-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "ca-cert-password" property.ca-pathca-pathstringUTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the "ca-cert" property. If NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an existing directory, then this setting is ignored.client-certclient-certbyte arrayContains the client certificate if used by the EAP method specified in the "eap" property. Certificate data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte.client-cert-passwordclient-cert-passwordstringThe password used to access the client certificate stored in "client-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.client-cert-password-flagsclient-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "client-cert-password" property.domain-matchdomain-matchstringConstraint for server domain name. If set, this list of FQDNs is used as a match requirement for dNSName element(s) of the certificate presented by the authentication server. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using the same comparison. Multiple valid FQDNs can be passed as a ";" delimited list.domain-suffix-matchdomain-suffix-matchstringConstraint for server domain name. If set, this FQDN is used as a suffix match requirement for dNSName element(s) of the certificate presented by the authentication server. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using same suffix match comparison. Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited list.eapeaparray of stringThe allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: "leap", "md5", "tls", "peap", "ttls", "pwd", and "fast". Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations.identityidentitystringIdentity string for EAP authentication methods. Often the user's user or login name.optionaloptionalbooleanFALSEWhether the 802.1X authentication is optional. If TRUE, the activation will continue even after a timeout or an authentication failure. Setting the property to TRUE is currently allowed only for Ethernet connections. If set to FALSE, the activation can continue only after a successful authentication.pac-filepac-filestringUTF-8 encoded file path containing PAC for EAP-FAST.passwordpasswordstringUTF-8 encoded password used for EAP authentication methods. If both the "password" property and the "password-raw" property are specified, "password" is preferred.password-flagspassword-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property.password-rawpassword-rawbyte arrayPassword used for EAP authentication methods, given as a byte array to allow passwords in other encodings than UTF-8 to be used. If both the "password" property and the "password-raw" property are specified, "password" is preferred.password-raw-flagspassword-raw-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password-raw" property.phase1-auth-flagsphase1-auth-flagsuint320Specifies authentication flags to use in "phase 1" outer authentication using NMSetting8021xAuthFlags options. The individual TLS versions can be explicitly disabled. If a certain TLS disable flag is not set, it is up to the supplicant to allow or forbid it. The TLS options map to tls_disable_tlsv1_x settings. See the wpa_supplicant documentation for more details.phase1-fast-provisioningphase1-fast-provisioningstringEnables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the "eap" property. Recognized values are "0" (disabled), "1" (allow unauthenticated provisioning), "2" (allow authenticated provisioning), and "3" (allow both authenticated and unauthenticated provisioning). See the wpa_supplicant documentation for more details.phase1-peaplabelphase1-peaplabelstringForces use of the new PEAP label during key derivation. Some RADIUS servers may require forcing the new PEAP label to interoperate with PEAPv1. Set to "1" to force use of the new PEAP label. See the wpa_supplicant documentation for more details.phase1-peapverphase1-peapverstringForces which PEAP version is used when PEAP is set as the EAP method in the "eap" property. When unset, the version reported by the server will be used. Sometimes when using older RADIUS servers, it is necessary to force the client to use a particular PEAP version. To do so, this property may be set to "0" or "1" to force that specific PEAP version.phase2-altsubject-matchesphase2-altsubject-matchesarray of stringList of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner "phase 2" authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed.phase2-authphase2-authstringSpecifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified.phase2-autheapphase2-autheapstringSpecifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.phase2-ca-certphase2-ca-certbyte arrayContains the "phase 2" CA certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory.phase2-ca-cert-passwordphase2-ca-cert-passwordstringThe password used to access the "phase2" CA certificate stored in "phase2-ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.phase2-ca-cert-password-flagsphase2-ca-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-ca-cert-password" property.phase2-ca-pathphase2-ca-pathstringUTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the "phase2-ca-cert" property. If NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an existing directory, then this setting is ignored.phase2-client-certphase2-client-certbyte arrayContains the "phase 2" client certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended.phase2-client-cert-passwordphase2-client-cert-passwordstringThe password used to access the "phase2" client certificate stored in "phase2-client-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.phase2-client-cert-password-flagsphase2-client-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-client-cert-password" property.phase2-domain-matchphase2-domain-matchstringConstraint for server domain name. If set, this list of FQDNs is used as a match requirement for dNSName element(s) of the certificate presented by the authentication server during the inner "phase 2" authentication. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using the same comparison. Multiple valid FQDNs can be passed as a ";" delimited list.phase2-domain-suffix-matchphase2-domain-suffix-matchstringConstraint for server domain name. If set, this FQDN is used as a suffix match requirement for dNSName element(s) of the certificate presented by the authentication server during the inner "phase 2" authentication. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using same suffix match comparison. Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited list.phase2-private-keyphase2-private-keybyte arrayContains the "phase 2" inner private key when the "phase2-auth" or "phase2-autheap" property is set to "tls". Key data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the "phase2-private-key-password" property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte, and as with the blob scheme the "phase2-private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate.phase2-private-key-passwordphase2-private-key-passwordstringThe password used to decrypt the "phase 2" private key specified in the "phase2-private-key" property when the private key either uses the path scheme, or is a PKCS#12 format key.phase2-private-key-password-flagsphase2-private-key-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-private-key-password" property.phase2-subject-matchphase2-subject-matchstringSubstring to be matched against the subject of the certificate presented by the authentication server during the inner "phase 2" authentication. When unset, no verification of the authentication server certificate's subject is performed. This property provides little security, if any, and its use is deprecated in favor of NMSetting8021x:phase2-domain-suffix-match.pinpinstringPIN used for EAP authentication methods.pin-flagspin-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "pin" property.private-keyprivate-keybyte arrayContains the private key when the "eap" property is set to "tls". Key data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the "private-key-password" property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte, and as with the blob scheme the "private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate. WARNING: "private-key" is not a "secret" property, and thus unencrypted private key data using the BLOB scheme may be readable by unprivileged users. Private keys should always be encrypted with a private key password to prevent unauthorized access to unencrypted private key data.private-key-passwordprivate-key-passwordstringThe password used to decrypt the private key specified in the "private-key" property when the private key either uses the path scheme, or if the private key is a PKCS#12 format key.private-key-password-flagsprivate-key-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "private-key-password" property.subject-matchsubject-matchstringSubstring to be matched against the subject of the certificate presented by the authentication server. When unset, no verification of the authentication server certificate's subject is performed. This property provides little security, if any, and its use is deprecated in favor of NMSetting8021x:domain-suffix-match.system-ca-certssystem-ca-certsbooleanFALSEWhen TRUE, overrides the "ca-path" and "phase2-ca-path" properties using the system CA directory specified at configure time with the --system-ca-path switch. The certificates in this directory are added to the verification chain in addition to any certificates specified by the "ca-cert" and "phase2-ca-cert" properties. If the path provided with --system-ca-path is rather a file name (bundle of trusted CA certificates), it overrides "ca-cert" and "phase2-ca-cert" properties instead (sets ca_cert/ca_cert2 options for wpa_supplicant).
adslADSL Settings Properties Key NameValue TypeDefault ValueValue DescriptionencapsulationencapsulationstringEncapsulation of ADSL connection. Can be "vcmux" or "llc".passwordpasswordstringPassword used to authenticate with the ADSL service.password-flagspassword-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property.protocolprotocolstringADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm".usernameusernamestringUsername used to authenticate with the ADSL service.vcivciuint320VCI of ADSL connectionvpivpiuint320VPI of ADSL connection
bluetoothBluetooth Settings Properties diff --git a/docs/api/version.xml b/docs/api/version.xml index df48db0..453ca86 100644 --- a/docs/api/version.xml +++ b/docs/api/version.xml @@ -1 +1 @@ -1.29.11 +1.29.90 diff --git a/docs/libnm/Makefile.am b/docs/libnm/Makefile.am index c8f095f..ae61d85 100644 --- a/docs/libnm/Makefile.am +++ b/docs/libnm/Makefile.am @@ -40,6 +40,7 @@ IGNORE_HFILES= \ nm-crypto-impl.h \ nm-crypto.h \ nm-dbus-helpers.h \ + nm-default-libnm-core.h \ nm-device-private.h \ nm-dhcp4-config.h \ nm-dhcp6-config.h \ diff --git a/docs/libnm/Makefile.in b/docs/libnm/Makefile.in index ff0504a..c69f89b 100644 --- a/docs/libnm/Makefile.in +++ b/docs/libnm/Makefile.in @@ -489,6 +489,7 @@ IGNORE_HFILES = \ nm-crypto-impl.h \ nm-crypto.h \ nm-dbus-helpers.h \ + nm-default-libnm-core.h \ nm-device-private.h \ nm-dhcp4-config.h \ nm-dhcp6-config.h \ diff --git a/docs/libnm/html/NMSetting8021x.html b/docs/libnm/html/NMSetting8021x.html index f9f0c30..9f3fbf5 100644 --- a/docs/libnm/html/NMSetting8021x.html +++ b/docs/libnm/html/NMSetting8021x.html @@ -4961,12 +4961,16 @@ server certificate's altSubjectName is performed.</p> <div class="refsect2"> <a name="NMSetting8021x--phase2-auth"></a><h3>The <code class="literal">“phase2-auth”</code> property</h3> <pre class="programlisting"> “phase2-auth” <span class="type">char</span> *</pre> -<p>Specifies the allowed "phase 2" inner non-EAP authentication method when -an EAP method that uses an inner TLS tunnel is specified in the -<a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title="The “eap” property"><span class="type">“eap”</span></a> property. Recognized non-EAP "phase 2" methods are -"pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls". +<p>Specifies the allowed "phase 2" inner authentication method when an EAP +method that uses an inner TLS tunnel is specified in the <a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title="The “eap” property"><span class="type">“eap”</span></a> +property. For TTLS this property selects one of the supported non-EAP +inner methods: "pap", "chap", "mschap", "mschapv2" while +<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-autheap" title="The “phase2-autheap” property"><span class="type">“phase2-autheap”</span></a> selects an EAP inner method. For PEAP +this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful -authentication; see the wpa_supplicant documentation for more details.</p> +authentication; see the wpa_supplicant documentation for more details. +Both <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-auth" title="The “phase2-auth” property"><span class="type">“phase2-auth”</span></a> and <a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-autheap" title="The “phase2-autheap” property"><span class="type">“phase2-autheap”</span></a> cannot +be specified.</p> <p>Owner: NMSetting8021x</p> <p>Flags: Read / Write</p> <p>Default value: NULL</p> @@ -4976,11 +4980,11 @@ authentication; see the wpa_supplicant documentation for more details.</p> <a name="NMSetting8021x--phase2-autheap"></a><h3>The <code class="literal">“phase2-autheap”</code> property</h3> <pre class="programlisting"> “phase2-autheap” <span class="type">char</span> *</pre> <p>Specifies the allowed "phase 2" inner EAP-based authentication method -when an EAP method that uses an inner TLS tunnel is specified in the -<a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title="The “eap” property"><span class="type">“eap”</span></a> property. Recognized EAP-based "phase 2" methods are -"md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method -requires specific parameters for successful authentication; see the -wpa_supplicant documentation for more details.</p> +when TTLS is specified in the <a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title="The “eap” property"><span class="type">“eap”</span></a> property. Recognized +EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and +"tls". Each "phase 2" inner method requires specific parameters for +successful authentication; see the wpa_supplicant documentation for +more details.</p> <p>Owner: NMSetting8021x</p> <p>Flags: Read / Write</p> <p>Default value: NULL</p> diff --git a/docs/libnm/html/api-index-full.html b/docs/libnm/html/api-index-full.html index b526e52..0a6143b 100644 --- a/docs/libnm/html/api-index-full.html +++ b/docs/libnm/html/api-index-full.html @@ -33,6 +33,10 @@ <dd></dd> <a name="idxN"></a><h3 class="title">N</h3> <dt> +NETWORKMANAGER_COMPILATION, macro in nm-default-libnm +</dt> +<dd></dd> +<dt> <a class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags" title="enum NM80211ApFlags">NM80211ApFlags</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a> </dt> <dd></dd> @@ -1557,6 +1561,18 @@ NML_NMCLIENT_LOG_W, macro in <a class="link" href="NMIPConfig.html" title="NMIPC </dt> <dd></dd> <dt> +NMMetaSettingInfo, typedef in nm-meta-setting-base-impl +</dt> +<dd></dd> +<dt> +NMMetaSettingInfo_Alias, struct in nm-meta-setting-base-impl +</dt> +<dd></dd> +<dt> +NMMetaSettingType, enum in nm-meta-setting-base-impl +</dt> +<dd></dd> +<dt> <a class="link" href="libnm-nm-dbus-interface.html#NMMetered" title="enum NMMetered">NMMetered</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a> </dt> <dd></dd> @@ -1873,6 +1889,14 @@ NMSetting6Lowpan:parent, object property in NMSettingOvs </dt> <dd></dd> <dt> +NMSetting8021xSchemeType, enum in nm-meta-setting-base-impl +</dt> +<dd></dd> +<dt> +NMSetting8021xSchemeVtable, struct in nm-meta-setting-base-impl +</dt> +<dd></dd> +<dt> <a class="link" href="NMSetting.html#NMSetting--name" title="The “name” property">NMSetting:name</a>, object property in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a> </dt> <dd></dd> @@ -2889,6 +2913,10 @@ NMSettingOvsPort:vlan-mode, object property in NMSettingOvs </dt> <dd></dd> <dt> +NMSettingPriority, enum in nm-meta-setting-base-impl +</dt> +<dd></dd> +<dt> <a class="link" href="NMSettingProxy.html#NMSettingProxy-struct" title="NMSettingProxy">NMSettingProxy</a>, struct in <a class="link" href="NMSettingProxy.html" title="NMSettingProxy">NMSettingProxy</a> </dt> <dd></dd> @@ -4153,6 +4181,10 @@ NMWimaxNsp, struct in NMDeviceOvs </dt> <dd></dd> <dt> +NM_API_VERSION, macro in nm-version-macros +</dt> +<dd></dd> +<dt> nm_auto_free_team_setting, macro in nm-team-utils </dt> <dd></dd> @@ -4317,6 +4349,10 @@ nm_auto_unref_nml_dbusobj, macro in <a class="link" href="NMIPConfig.html" title </dt> <dd></dd> <dt> +NM_CHECK_VERSION, macro in nm-version-macros +</dt> +<dd></dd> +<dt> <a class="link" href="NMClient.html#nm-client-activate-connection-async" title="nm_client_activate_connection_async ()">nm_client_activate_connection_async</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a> </dt> <dd></dd> @@ -7005,6 +7041,10 @@ nm_dbus_path_not_empty, function in <a class="link" href="NMIPConfig.html" title </dt> <dd></dd> <dt> +NM_ENCODE_VERSION, macro in nm-version-macros +</dt> +<dd></dd> +<dt> NM_ETHTOOL_OPTNAME_COALESCE_ADAPTIVE_RX, macro in nm-ethtool-utils </dt> <dd></dd> @@ -7133,6 +7173,10 @@ NM_ETHTOOL_OPTNAME_FEATURE_LRO, macro in nm-ethtool-utils </dt> <dd></dd> <dt> +NM_ETHTOOL_OPTNAME_FEATURE_MACSEC_HW_OFFLOAD, macro in nm-ethtool-utils +</dt> +<dd></dd> +<dt> NM_ETHTOOL_OPTNAME_FEATURE_NTUPLE, macro in nm-ethtool-utils </dt> <dd></dd> @@ -7161,6 +7205,14 @@ NM_ETHTOOL_OPTNAME_FEATURE_RX_GRO_HW, macro in nm-ethtool-utils </dt> <dd></dd> <dt> +NM_ETHTOOL_OPTNAME_FEATURE_RX_GRO_LIST, macro in nm-ethtool-utils +</dt> +<dd></dd> +<dt> +NM_ETHTOOL_OPTNAME_FEATURE_RX_UDP_GRO_FORWARDING, macro in nm-ethtool-utils +</dt> +<dd></dd> +<dt> NM_ETHTOOL_OPTNAME_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD, macro in nm-ethtool-utils </dt> <dd></dd> @@ -7185,6 +7237,10 @@ NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_RECORD, macro in nm-ethtool-utils </dt> <dd></dd> <dt> +NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_RX_OFFLOAD, macro in nm-ethtool-utils +</dt> +<dd></dd> +<dt> NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_TX_OFFLOAD, macro in nm-ethtool-utils </dt> <dd></dd> @@ -7237,6 +7293,10 @@ NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_SEGMENTATION, macro in nm-ethtool-utils </dt> <dd></dd> <dt> +NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_LIST, macro in nm-ethtool-utils +</dt> +<dd></dd> +<dt> NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_PARTIAL, macro in nm-ethtool-utils </dt> <dd></dd> @@ -7285,6 +7345,10 @@ NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_SEGMENTATION, macro in nm-ethtool-utils </dt> <dd></dd> <dt> +NM_ETHTOOL_OPTNAME_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION, macro in nm-ethtool-utils +</dt> +<dd></dd> +<dt> NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_SEGMENTATION, macro in nm-ethtool-utils </dt> <dd></dd> @@ -7961,6 +8025,10 @@ NM_ETHTOOL_OPTNAME_RING_TX, macro in nm-ethtool-utils </dt> <dd></dd> <dt> +NM_MAJOR_VERSION, macro in nm-version-macros +</dt> +<dd></dd> +<dt> <a class="link" href="libnm-nm-errors.html#NM-MANAGER-ERROR:CAPS" title="NM_MANAGER_ERROR">NM_MANAGER_ERROR</a>, macro in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a> </dt> <dd></dd> @@ -7969,6 +8037,26 @@ NM_ETHTOOL_OPTNAME_RING_TX, macro in nm-ethtool-utils </dt> <dd></dd> <dt> +nm_meta_setting_infos_by_gtype, function in nm-meta-setting-base-impl +</dt> +<dd></dd> +<dt> +nm_meta_setting_infos_by_name, function in nm-meta-setting-base-impl +</dt> +<dd></dd> +<dt> +nm_meta_setting_info_get_base_type_priority, function in nm-meta-setting-base-impl +</dt> +<dd></dd> +<dt> +NM_MICRO_VERSION, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_MINOR_VERSION, macro in nm-version-macros +</dt> +<dd></dd> +<dt> <a class="link" href="NMObject.html#nm-object-get-client" title="nm_object_get_client ()">nm_object_get_client</a>, function in <a class="link" href="NMObject.html" title="NMObject">NMObject</a> </dt> <dd></dd> @@ -13985,6 +14073,86 @@ nm_utils_wincaps_to_dash, function in <a class="link" href="NMIPConfig.html" tit </dt> <dd></dd> <dt> +NM_VERSION, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_0_9_10, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_0_9_8, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_0, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_10, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_12, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_14, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_16, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_18, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_2, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_20, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_22, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_24, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_26, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_28, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_30, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_4, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_6, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_1_8, macro in nm-version-macros +</dt> +<dd></dd> +<dt> +NM_VERSION_CUR_STABLE, macro in nm-version-macros +</dt> +<dd></dd> +<dt> <a class="link" href="libnm-nm-version.html#NM-VERSION-MAX-ALLOWED:CAPS" title="NM_VERSION_MAX_ALLOWED">NM_VERSION_MAX_ALLOWED</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a> </dt> <dd></dd> @@ -13993,6 +14161,10 @@ nm_utils_wincaps_to_dash, function in <a class="link" href="NMIPConfig.html" tit </dt> <dd></dd> <dt> +NM_VERSION_NEXT_STABLE, macro in nm-version-macros +</dt> +<dd></dd> +<dt> <a class="link" href="NMSettingVlan.html#NM-VLAN-FLAGS-ALL:CAPS" title="NM_VLAN_FLAGS_ALL">NM_VLAN_FLAGS_ALL</a>, macro in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a> </dt> <dd></dd> diff --git a/docs/libnm/html/index.html b/docs/libnm/html/index.html index 3431fe9..86f29a7 100644 --- a/docs/libnm/html/index.html +++ b/docs/libnm/html/index.html @@ -15,7 +15,7 @@ <div> <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">libnm Reference Manual</p></th></tr></table></div> <div><p class="releaseinfo"> - for libnm 1.29.11 + for libnm 1.29.90 The latest version of this documentation can be found on-line at <a class="ulink" href="https://developer.gnome.org/libnm/stable/" target="_top">https://developer.gnome.org/libnm/stable/</a>. diff --git a/docs/libnm/html/usage.html b/docs/libnm/html/usage.html index 6bcba45..c56cd08 100644 --- a/docs/libnm/html/usage.html +++ b/docs/libnm/html/usage.html @@ -96,7 +96,7 @@ </p> <pre class="screen"><code class="prompt">$ </code><strong class="userinput"><code>cc $(pkg-config --libs --cflags libnm) -o hello-nm hello-nm.c</code></strong> <code class="prompt">$ </code><strong class="userinput"><code>./hello-nm</code></strong> - NetworkManager version: 1.29.11 + NetworkManager version: 1.29.90 <code class="prompt">$ </code></pre> <p> diff --git a/docs/libnm/libnm-sections.txt b/docs/libnm/libnm-sections.txt index a2ecc9e..35b3c8c 100644 --- a/docs/libnm/libnm-sections.txt +++ b/docs/libnm/libnm-sections.txt @@ -706,6 +706,16 @@ NMClientPermissionResult </SECTION> <SECTION> +<FILE>nm-default-client</FILE> +NETWORKMANAGER_COMPILATION +</SECTION> + +<SECTION> +<FILE>nm-default-libnm</FILE> +NETWORKMANAGER_COMPILATION +</SECTION> + +<SECTION> <FILE>nm-device</FILE> <TITLE>NMDevice NM_DEVICE_DEVICE_TYPE @@ -1539,6 +1549,7 @@ NM_ETHTOOL_OPTNAME_FEATURE_HW_TC_OFFLOAD NM_ETHTOOL_OPTNAME_FEATURE_L2_FWD_OFFLOAD NM_ETHTOOL_OPTNAME_FEATURE_LOOPBACK NM_ETHTOOL_OPTNAME_FEATURE_LRO +NM_ETHTOOL_OPTNAME_FEATURE_MACSEC_HW_OFFLOAD NM_ETHTOOL_OPTNAME_FEATURE_NTUPLE NM_ETHTOOL_OPTNAME_FEATURE_RX NM_ETHTOOL_OPTNAME_FEATURE_RXHASH @@ -1546,12 +1557,15 @@ NM_ETHTOOL_OPTNAME_FEATURE_RXVLAN NM_ETHTOOL_OPTNAME_FEATURE_RX_ALL NM_ETHTOOL_OPTNAME_FEATURE_RX_FCS NM_ETHTOOL_OPTNAME_FEATURE_RX_GRO_HW +NM_ETHTOOL_OPTNAME_FEATURE_RX_GRO_LIST +NM_ETHTOOL_OPTNAME_FEATURE_RX_UDP_GRO_FORWARDING NM_ETHTOOL_OPTNAME_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD NM_ETHTOOL_OPTNAME_FEATURE_RX_VLAN_FILTER NM_ETHTOOL_OPTNAME_FEATURE_RX_VLAN_STAG_FILTER NM_ETHTOOL_OPTNAME_FEATURE_RX_VLAN_STAG_HW_PARSE NM_ETHTOOL_OPTNAME_FEATURE_SG NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_RECORD +NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_RX_OFFLOAD NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_TX_OFFLOAD NM_ETHTOOL_OPTNAME_FEATURE_TSO NM_ETHTOOL_OPTNAME_FEATURE_TX @@ -1565,6 +1579,7 @@ NM_ETHTOOL_OPTNAME_FEATURE_TX_ESP_SEGMENTATION NM_ETHTOOL_OPTNAME_FEATURE_TX_FCOE_SEGMENTATION NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_CSUM_SEGMENTATION NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_SEGMENTATION +NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_LIST NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_PARTIAL NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_ROBUST NM_ETHTOOL_OPTNAME_FEATURE_TX_IPXIP4_SEGMENTATION @@ -1577,6 +1592,7 @@ NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP6_SEGMENTATION NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_ECN_SEGMENTATION NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_MANGLEID_SEGMENTATION NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_SEGMENTATION +NM_ETHTOOL_OPTNAME_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_SEGMENTATION NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_TNL_SEGMENTATION @@ -1760,6 +1776,24 @@ NML_IS_DBUS_OBJECT
+nm-meta-setting-base + +
+ +
+nm-meta-setting-base-impl +NMSettingPriority +NMSetting8021xSchemeType +NMSetting8021xSchemeVtable +NMMetaSettingType +NMMetaSettingInfo_Alias +NMMetaSettingInfo +nm_meta_setting_infos_by_name +nm_meta_setting_infos_by_gtype +nm_meta_setting_info_get_base_type_priority +
+ +
nm-object NMObject NM_OBJECT_PATH @@ -4426,6 +4460,37 @@ NM_AVAILABLE_IN_1_30
+nm-version-macros +NM_MAJOR_VERSION +NM_MINOR_VERSION +NM_MICRO_VERSION +NM_CHECK_VERSION +NM_ENCODE_VERSION +NM_VERSION_0_9_8 +NM_VERSION_0_9_10 +NM_VERSION_1_0 +NM_VERSION_1_2 +NM_VERSION_1_4 +NM_VERSION_1_6 +NM_VERSION_1_8 +NM_VERSION_1_10 +NM_VERSION_1_12 +NM_VERSION_1_14 +NM_VERSION_1_16 +NM_VERSION_1_18 +NM_VERSION_1_20 +NM_VERSION_1_22 +NM_VERSION_1_24 +NM_VERSION_1_26 +NM_VERSION_1_28 +NM_VERSION_1_30 +NM_API_VERSION +NM_VERSION_CUR_STABLE +NM_VERSION_NEXT_STABLE +NM_VERSION +
+ +
nm-vpn-connection NMVpnConnection NM_VPN_CONNECTION_VPN_STATE diff --git a/docs/libnm/meson.build b/docs/libnm/meson.build index 2f70eb5..1020098 100644 --- a/docs/libnm/meson.build +++ b/docs/libnm/meson.build @@ -13,6 +13,7 @@ private_headers = [ 'nm-crypto-impl.h', 'nm-crypto.h', 'nm-dbus-helpers.h', + 'nm-default-libnm-core.h', 'nm-device-private.h', 'nm-dhcp4-config.h', 'nm-dhcp6-config.h', diff --git a/docs/libnm/version.xml b/docs/libnm/version.xml index df48db0..453ca86 100644 --- a/docs/libnm/version.xml +++ b/docs/libnm/version.xml @@ -1 +1 @@ -1.29.11 +1.29.90 diff --git a/libnm-core/meson.build b/libnm-core/meson.build index a02bbe1..ec9fb8c 100644 --- a/libnm-core/meson.build +++ b/libnm-core/meson.build @@ -2,6 +2,12 @@ libnm_core_inc = include_directories('.') +nm_version_macro_header = configure_file( + input: 'nm-version-macros.h.in', + output: '@BASENAME@', + configuration: data_conf, +) + libnm_core_nm_default_dep = declare_dependency( sources: nm_version_macro_header, include_directories: libnm_core_inc, @@ -79,7 +85,7 @@ libnm_core_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 "nm-default.h"', + body_prefix: '#include "libnm-core/nm-default-libnm-core.h"', install_header: true, install_dir: libnm_pkgincludedir, ) @@ -95,8 +101,7 @@ libnm_libnm_core_intern = static_library( libnm_base_dep, ], c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE', + '-DG_LOG_DOMAIN="libnm"', ], ) @@ -118,8 +123,7 @@ libnm_crypto = static_library( libnm_glib_aux_dep, ], c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE', + '-DG_LOG_DOMAIN="libnm"', ], ) @@ -183,6 +187,9 @@ libnm_core_sources = libnm_core_settings_sources + files( 'nm-crypto.c', 'nm-dbus-utils.c', 'nm-errors.c', + 'nm-keyfile-utils.c', + 'nm-keyfile.c', + 'nm-meta-setting-base-impl.c', 'nm-property-compare.c', 'nm-setting.c', 'nm-simple-connection.c', @@ -194,7 +201,7 @@ libnm_core_sources = libnm_core_settings_sources + files( libnm_core = static_library( 'nm-core', - sources: libnm_core_sources + libnm_core_enum_sources + nm_meta_setting_source + [nm_version_macro_header], + sources: libnm_core_sources + libnm_core_enum_sources + [nm_version_macro_header], include_directories: top_inc, dependencies: [ dl_dep, @@ -203,8 +210,7 @@ libnm_core = static_library( uuid_dep, ], c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE', + '-DG_LOG_DOMAIN="libnm"', ], link_with: [ libnm_crypto, @@ -226,8 +232,7 @@ libnm_libnm_core_aux = static_library( ) + [libnm_core_enum_sources[1]], dependencies: libnm_glib_aux_dep, c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_WITH_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)', + '-DG_LOG_DOMAIN="libnm"', ], link_with: [ libnm_libnm_core_intern, @@ -242,29 +247,6 @@ libnm_libnm_core_aux_dep = declare_dependency( link_with: libnm_libnm_core_aux, ) -nm_keyfile_source = files( - 'nm-keyfile/nm-keyfile-utils.c', - 'nm-keyfile/nm-keyfile.c', -) - -libnm_keyfile = static_library( - 'nm-keyfile', - sources: nm_keyfile_source + [libnm_core_enum_sources[1]], - dependencies: libnm_glib_aux_dep, - c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)', - ], - link_with: libnm_libnm_core_intern, -) - -libnm_keyfile_dep = declare_dependency( - sources: [libnm_core_enum_sources[1], nm_version_macro_header], - include_directories: [libnm_core_inc, shared_inc], - dependencies: glib_dep, - link_with: libnm_keyfile, -) - 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'], diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c index 60b2485..b39c41d 100644 --- a/libnm-core/nm-connection.c +++ b/libnm-core/nm-connection.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-connection.h" diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h index bda7f89..d9374fe 100644 --- a/libnm-core/nm-core-internal.h +++ b/libnm-core/nm-core-internal.h @@ -24,7 +24,7 @@ #include "nm-connection.h" #include "nm-core-enum-types.h" #include "nm-core-types-internal.h" -#include "nm-meta-setting.h" +#include "nm-meta-setting-base.h" #include "nm-setting-6lowpan.h" #include "nm-setting-8021x.h" #include "nm-setting-adsl.h" diff --git a/libnm-core/nm-crypto-gnutls.c b/libnm-core/nm-crypto-gnutls.c index 6b71efe..17c5d1d 100644 --- a/libnm-core/nm-crypto-gnutls.c +++ b/libnm-core/nm-crypto-gnutls.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-crypto-impl.h" diff --git a/libnm-core/nm-crypto-nss.c b/libnm-core/nm-crypto-nss.c index 871b6d7..8cbb4da 100644 --- a/libnm-core/nm-crypto-nss.c +++ b/libnm-core/nm-crypto-nss.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2009 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-crypto-impl.h" diff --git a/libnm-core/nm-crypto.c b/libnm-core/nm-crypto.c index 229f564..0eaeeb7 100644 --- a/libnm-core/nm-crypto.c +++ b/libnm-core/nm-crypto.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-crypto.h" diff --git a/libnm-core/nm-dbus-utils.c b/libnm-core/nm-dbus-utils.c index 52a3c02..cf679da 100644 --- a/libnm-core/nm-dbus-utils.c +++ b/libnm-core/nm-dbus-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-core-internal.h" diff --git a/libnm-core/nm-default-libnm-core.h b/libnm-core/nm-default-libnm-core.h new file mode 100644 index 0000000..6eb84b9 --- /dev/null +++ b/libnm-core/nm-default-libnm-core.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_DEFAULT_LIBNM_CORE_H__ +#define __NM_DEFAULT_LIBNM_CORE_H__ + +/*****************************************************************************/ + +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" + +#undef NETWORKMANAGER_COMPILATION +#define NETWORKMANAGER_COMPILATION NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE + +/*****************************************************************************/ + +#include "nm-version.h" + +/*****************************************************************************/ + +#endif /* __NM_DEFAULT_LIBNM_CORE_H__ */ diff --git a/libnm-core/nm-errors.c b/libnm-core/nm-errors.c index 95a12c0..0239266 100644 --- a/libnm-core/nm-errors.c +++ b/libnm-core/nm-errors.c @@ -3,7 +3,7 @@ * Copyright (C) 2004 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-errors.h" diff --git a/libnm-core/nm-keyfile-internal.h b/libnm-core/nm-keyfile-internal.h new file mode 100644 index 0000000..bb89214 --- /dev/null +++ b/libnm-core/nm-keyfile-internal.h @@ -0,0 +1,124 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2008 Novell, Inc. + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_KEYFILE_INTERNAL_H__ +#define __NM_KEYFILE_INTERNAL_H__ + +#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL) + #error Cannot use this header. +#endif + +#include + +#include "nm-keyfile.h" + +#include "nm-connection.h" +#include "nm-setting-8021x.h" + +#include "nm-core-internal.h" + +/*****************************************************************************/ + +#define NM_KEYFILE_CERT_SCHEME_PREFIX_PATH "file://" +#define NM_KEYFILE_CERT_SCHEME_PREFIX_PKCS11 "pkcs11:" +#define NM_KEYFILE_CERT_SCHEME_PREFIX_BLOB "data:;base64," + +char *nm_keyfile_detect_unqualified_path_scheme(const char * base_dir, + gconstpointer pdata, + gsize data_len, + gboolean consider_exists, + gboolean * out_exists); + +gboolean nm_keyfile_read_ensure_id(NMConnection *connection, const char *fallback_id); + +gboolean nm_keyfile_read_ensure_uuid(NMConnection *connection, const char *fallback_uuid_seed); + +/*****************************************************************************/ + +/** + * NMKeyfileHandlerDataWarn: + * + * this struct is passed as @handler_data for the @NMKeyfileReadHandler of + * type %NM_KEYFILE_HANDLER_TYPE_WARN. + */ +typedef struct { + NMKeyfileWarnSeverity severity; + char * message; + const char * fmt; + va_list ap; +} NMKeyfileHandlerDataWarn; + +/** + * NMKeyfileHandlerDataWriteCert: + * + * this struct is passed as @handler_data for the @NMKeyfileWriteHandler of + * type %NM_KEYFILE_HANDLER_TYPE_WRITE_CERT. + */ +typedef struct { + const NMSetting8021xSchemeVtable *vtable; +} NMKeyfileHandlerDataWriteCert; + +struct _NMKeyfileHandlerData { + NMKeyfileHandlerType type; + + GError **p_error; + + const char *kf_group_name; + const char *kf_key; + + NMSetting * cur_setting; + const char *cur_property; + + union { + NMKeyfileHandlerDataWarn warn; + NMKeyfileHandlerDataWriteCert write_cert; + }; +}; + +/*****************************************************************************/ + +const char *_nm_keyfile_handler_data_warn_get_message(const NMKeyfileHandlerData *handler_data); + +/*****************************************************************************/ + +char * +nm_keyfile_plugin_kf_get_string(GKeyFile *kf, const char *group, const char *key, GError **error); +void nm_keyfile_plugin_kf_set_string(GKeyFile * kf, + const char *group, + const char *key, + const char *value); + +int nm_key_file_get_boolean(GKeyFile *kf, const char *group, const char *key, int default_value); + +void _nm_keyfile_copy(GKeyFile *dst, GKeyFile *src); +gboolean _nm_keyfile_a_contains_all_in_b(GKeyFile *kf_a, GKeyFile *kf_b); +gboolean _nm_keyfile_equals(GKeyFile *kf_a, GKeyFile *kf_b, gboolean consider_order); +gboolean _nm_keyfile_has_values(GKeyFile *keyfile); + +/*****************************************************************************/ + +#define NM_KEYFILE_GROUP_NMMETA ".nmmeta" +#define NM_KEYFILE_KEY_NMMETA_NM_GENERATED "nm-generated" +#define NM_KEYFILE_KEY_NMMETA_VOLATILE "volatile" +#define NM_KEYFILE_KEY_NMMETA_EXTERNAL "external" +#define NM_KEYFILE_KEY_NMMETA_SHADOWED_STORAGE "shadowed-storage" +#define NM_KEYFILE_KEY_NMMETA_SHADOWED_OWNED "shadowed-owned" + +#define NM_KEYFILE_PATH_NAME_LIB NMLIBDIR "/system-connections" +#define NM_KEYFILE_PATH_NAME_ETC_DEFAULT NMCONFDIR "/system-connections" +#define NM_KEYFILE_PATH_NAME_RUN NMRUNDIR "/system-connections" + +#define NM_KEYFILE_PATH_SUFFIX_NMCONNECTION ".nmconnection" + +#define NM_KEYFILE_PATH_SUFFIX_NMMETA ".nmmeta" + +#define NM_KEYFILE_PATH_NMMETA_SYMLINK_NULL "/dev/null" + +gboolean nm_keyfile_utils_ignore_filename(const char *filename, gboolean require_extension); + +char *nm_keyfile_utils_create_filename(const char *filename, gboolean with_extension); + +#endif /* __NM_KEYFILE_INTERNAL_H__ */ diff --git a/libnm-core/nm-keyfile-utils.c b/libnm-core/nm-keyfile-utils.c new file mode 100644 index 0000000..8de4b0d --- /dev/null +++ b/libnm-core/nm-keyfile-utils.c @@ -0,0 +1,684 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2010 Red Hat, Inc. + */ + +#include "libnm-core/nm-default-libnm-core.h" + +#include "nm-keyfile-utils.h" + +#include + +#include "nm-glib-aux/nm-str-buf.h" + +#include "nm-keyfile.h" +#include "nm-setting-wired.h" +#include "nm-setting-wireless.h" +#include "nm-setting-wireless-security.h" + +#include "nm-keyfile-internal.h" + +/*****************************************************************************/ + +/** + * nm_key_file_get_boolean: + * @kf: the #GKeyFile + * @group: the group + * @key: the key + * @default_value: the default value if the value is set or not parsable as a boolean. + * + * Replacement for g_key_file_get_boolean() (which uses g_key_file_parse_value_as_boolean()). + * g_key_file_get_boolean() seems odd to me, because it accepts trailing ASCII whitespace, + * but not leading. + * This uses _nm_utils_ascii_str_to_bool(), which accepts trailing and leading whitespace, + * case-insensitive words, and also strings like "on" and "off". + * _nm_utils_ascii_str_to_bool() is our way to parse booleans from string, and we should + * use that one consistently. + * + * Also, it doesn't have g_key_file_get_boolean()'s odd API to require an error argument + * to detect parsing failures. + * + * Returns: either %TRUE or %FALSE if the key exists and is parsable as a boolean. + * Otherwise, @default_value. Sets errno to ENODATA, EINVAL or 0, depending on whether + * the key exists, whether the value is invalid, or success. + */ +int +nm_key_file_get_boolean(GKeyFile *kf, const char *group, const char *key, int default_value) +{ + int v; + gs_free char *value = NULL; + + value = g_key_file_get_value(kf, group, key, NULL); + + if (!value) { + errno = ENODATA; + return default_value; + } + v = _nm_utils_ascii_str_to_bool(value, -1); + if (v != -1) { + errno = 0; + return v; + } + errno = EINVAL; + return default_value; +} + +/*****************************************************************************/ + +typedef struct { + const char *setting; + const char *alias; +} SettingAlias; + +static const SettingAlias alias_list[] = { + {NM_SETTING_WIRED_SETTING_NAME, "ethernet"}, + {NM_SETTING_WIRELESS_SETTING_NAME, "wifi"}, + {NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, "wifi-security"}, +}; + +const char * +nm_keyfile_plugin_get_alias_for_setting_name(const char *setting_name) +{ + guint i; + + g_return_val_if_fail(setting_name != NULL, NULL); + + for (i = 0; i < G_N_ELEMENTS(alias_list); i++) { + if (nm_streq(setting_name, alias_list[i].setting)) + return alias_list[i].alias; + } + return NULL; +} + +const char * +nm_keyfile_plugin_get_setting_name_for_alias(const char *alias) +{ + guint i; + + g_return_val_if_fail(alias != NULL, NULL); + + for (i = 0; i < G_N_ELEMENTS(alias_list); i++) { + if (nm_streq(alias, alias_list[i].alias)) + return alias_list[i].setting; + } + return NULL; +} + +/*****************************************************************************/ + +char ** +nm_keyfile_plugin_kf_get_string_list(GKeyFile * kf, + const char *group, + const char *key, + gsize * out_length, + GError ** error) +{ + char ** list; + const char *alias; + GError * local = NULL; + gsize l; + + list = g_key_file_get_string_list(kf, group, key, &l, &local); + if (nm_g_error_matches(local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { + alias = nm_keyfile_plugin_get_alias_for_setting_name(group); + if (alias) { + g_clear_error(&local); + list = g_key_file_get_string_list(kf, alias, key, &l, &local); + } + } + if (local) + g_propagate_error(error, local); + if (!list) + l = 0; + NM_SET_OUT(out_length, l); + return list; +} + +guint * +nm_keyfile_plugin_kf_get_integer_list_uint(GKeyFile * key_file, + const char *group_name, + const char *key, + gsize * out_length, + GError ** error) +{ + GError * key_file_error = NULL; + gs_strfreev char **values = NULL; + gs_free guint *int_values = NULL; + gsize i, num_ints; + + NM_SET_OUT(out_length, 0); + + g_return_val_if_fail(key_file != NULL, NULL); + g_return_val_if_fail(group_name != NULL, NULL); + g_return_val_if_fail(key != NULL, NULL); + + values = + nm_keyfile_plugin_kf_get_string_list(key_file, group_name, key, &num_ints, &key_file_error); + + if (key_file_error) + g_propagate_error(error, key_file_error); + if (!values) + return NULL; + + int_values = g_new(guint, num_ints); + + for (i = 0; i < num_ints; i++) { + gint64 v; + + G_STATIC_ASSERT_EXPR(sizeof(v) > sizeof(guint)); + v = _nm_utils_ascii_str_to_int64(values[i], 10, 0, G_MAXUINT, -1); + if (v == -1) { + g_set_error(error, + G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_INVALID_VALUE, + _("Value cannot be interpreted as a list of numbers.")); + return NULL; + } + + int_values[i] = v; + } + + NM_SET_OUT(out_length, num_ints); + return g_steal_pointer(&int_values); +} + +void +nm_keyfile_plugin_kf_set_string_list(GKeyFile * kf, + const char * group, + const char * key, + const char *const *list, + gsize length) +{ + const char *alias; + + alias = nm_keyfile_plugin_get_alias_for_setting_name(group); + g_key_file_set_string_list(kf, alias ?: group, key, list, length); +} + +void +nm_keyfile_plugin_kf_set_integer_list_uint(GKeyFile * kf, + const char * group, + const char * key, + const guint *data, + gsize length) +{ + nm_auto_str_buf NMStrBuf strbuf = {}; + gsize i; + + g_return_if_fail(kf); + g_return_if_fail(!length || data); + g_return_if_fail(group && group[0]); + g_return_if_fail(key && key[0]); + + nm_str_buf_init(&strbuf, length * 4u + 2u, FALSE); + for (i = 0; i < length; i++) + nm_str_buf_append_printf(&strbuf, "%u;", data[i]); + nm_keyfile_plugin_kf_set_value(kf, group, key, nm_str_buf_get_str(&strbuf)); +} + +void +nm_keyfile_plugin_kf_set_integer_list_uint8(GKeyFile * kf, + const char * group, + const char * key, + const guint8 *data, + gsize length) +{ + nm_auto_str_buf NMStrBuf strbuf = {}; + gsize i; + + g_return_if_fail(kf); + g_return_if_fail(!length || data); + g_return_if_fail(group && group[0]); + g_return_if_fail(key && key[0]); + + nm_str_buf_init(&strbuf, length * 4u + 2u, FALSE); + for (i = 0; i < length; i++) + nm_str_buf_append_printf(&strbuf, "%u;", (guint) data[i]); + nm_keyfile_plugin_kf_set_value(kf, group, key, nm_str_buf_get_str(&strbuf)); +} + +#define DEFINE_KF_WRAPPER_GET(fcn_name, get_ctype, key_file_get_fcn) \ + get_ctype fcn_name(GKeyFile *kf, const char *group, const char *key, GError **error) \ + { \ + get_ctype val; \ + const char *alias; \ + GError * local = NULL; \ + \ + val = key_file_get_fcn(kf, group, key, &local); \ + if (nm_g_error_matches(local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { \ + alias = nm_keyfile_plugin_get_alias_for_setting_name(group); \ + if (alias) { \ + g_clear_error(&local); \ + val = key_file_get_fcn(kf, alias, key, &local); \ + } \ + } \ + if (local) \ + g_propagate_error(error, local); \ + return val; \ + } + +DEFINE_KF_WRAPPER_GET(nm_keyfile_plugin_kf_get_string, char *, g_key_file_get_string); +DEFINE_KF_WRAPPER_GET(nm_keyfile_plugin_kf_get_boolean, gboolean, g_key_file_get_boolean); +DEFINE_KF_WRAPPER_GET(nm_keyfile_plugin_kf_get_value, char *, g_key_file_get_value); + +#define DEFINE_KF_WRAPPER_SET(fcn_name, set_ctype, key_file_set_fcn) \ + void fcn_name(GKeyFile *kf, const char *group, const char *key, set_ctype value) \ + { \ + const char *alias; \ + \ + alias = nm_keyfile_plugin_get_alias_for_setting_name(group); \ + key_file_set_fcn(kf, alias ?: group, key, value); \ + } + +DEFINE_KF_WRAPPER_SET(nm_keyfile_plugin_kf_set_string, const char *, g_key_file_set_string); +DEFINE_KF_WRAPPER_SET(nm_keyfile_plugin_kf_set_boolean, gboolean, g_key_file_set_boolean); +DEFINE_KF_WRAPPER_SET(nm_keyfile_plugin_kf_set_value, const char *, g_key_file_set_value); + +gint64 +nm_keyfile_plugin_kf_get_int64(GKeyFile * kf, + const char *group, + const char *key, + guint base, + gint64 min, + gint64 max, + gint64 fallback, + GError ** error) +{ + gs_free char *s = NULL; + int errsv; + gint64 v; + + s = nm_keyfile_plugin_kf_get_value(kf, group, key, error); + if (!s) { + errno = ENODATA; + return fallback; + } + + v = _nm_utils_ascii_str_to_int64(s, base, min, max, fallback); + errsv = errno; + if (errsv != 0 && error) { + g_set_error(error, + G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_INVALID_VALUE, + _("value is not an integer in range [%lld, %lld]"), + (long long) min, + (long long) max); + errno = errsv; + } + return v; +} + +char ** +nm_keyfile_plugin_kf_get_keys(GKeyFile *kf, const char *group, gsize *out_length, GError **error) +{ + char ** keys; + const char *alias; + GError * local = NULL; + gsize l; + + keys = g_key_file_get_keys(kf, group, &l, &local); + if (nm_g_error_matches(local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { + alias = nm_keyfile_plugin_get_alias_for_setting_name(group); + if (alias) { + g_clear_error(&local); + keys = g_key_file_get_keys(kf, alias, &l, error ? &local : NULL); + } + } + nm_assert((!local) != (!keys)); + if (!keys) + l = 0; + nm_assert(l == NM_PTRARRAY_LEN(keys)); + NM_SET_OUT(out_length, l); + if (local) + g_propagate_error(error, local); + return keys; +} + +gboolean +nm_keyfile_plugin_kf_has_key(GKeyFile *kf, const char *group, const char *key, GError **error) +{ + gboolean has; + const char *alias; + GError * local = NULL; + + has = g_key_file_has_key(kf, group, key, &local); + if (nm_g_error_matches(local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { + alias = nm_keyfile_plugin_get_alias_for_setting_name(group); + if (alias) { + g_clear_error(&local); + has = g_key_file_has_key(kf, alias, key, &local); + } + } + if (local) + g_propagate_error(error, local); + return has; +} + +/*****************************************************************************/ + +void +_nm_keyfile_copy(GKeyFile *dst, GKeyFile *src) +{ + gs_strfreev char **groups = NULL; + guint g, k; + + groups = g_key_file_get_groups(src, NULL); + for (g = 0; groups && groups[g]; g++) { + const char * group = groups[g]; + gs_strfreev char **keys = NULL; + + keys = g_key_file_get_keys(src, group, NULL, NULL); + if (!keys) + continue; + + for (k = 0; keys[k]; k++) { + const char * key = keys[k]; + gs_free char *value = NULL; + + value = g_key_file_get_value(src, group, key, NULL); + if (value) + g_key_file_set_value(dst, group, key, value); + else + g_key_file_remove_key(dst, group, key, NULL); + } + } +} + +/*****************************************************************************/ + +gboolean +_nm_keyfile_a_contains_all_in_b(GKeyFile *kf_a, GKeyFile *kf_b) +{ + gs_strfreev char **groups = NULL; + guint i, j; + + if (kf_a == kf_b) + return TRUE; + if (!kf_a || !kf_b) + return FALSE; + + groups = g_key_file_get_groups(kf_a, NULL); + for (i = 0; groups && groups[i]; i++) { + gs_strfreev char **keys = NULL; + + keys = g_key_file_get_keys(kf_a, groups[i], NULL, NULL); + if (!keys) + continue; + + for (j = 0; keys[j]; j++) { + gs_free char *key_a = g_key_file_get_value(kf_a, groups[i], keys[j], NULL); + gs_free char *key_b = g_key_file_get_value(kf_b, groups[i], keys[j], NULL); + + if (g_strcmp0(key_a, key_b) != 0) + return FALSE; + } + } + return TRUE; +} + +static gboolean +_nm_keyfile_equals_ordered(GKeyFile *kf_a, GKeyFile *kf_b) +{ + gs_strfreev char **groups = NULL; + gs_strfreev char **groups_b = NULL; + guint i, j; + + if (kf_a == kf_b) + return TRUE; + if (!kf_a || !kf_b) + return FALSE; + + groups = g_key_file_get_groups(kf_a, NULL); + groups_b = g_key_file_get_groups(kf_b, NULL); + if (!groups && !groups_b) + return TRUE; + if (!groups || !groups_b) + return FALSE; + for (i = 0; groups[i] && groups_b[i] && !strcmp(groups[i], groups_b[i]); i++) + ; + if (groups[i] || groups_b[i]) + return FALSE; + + for (i = 0; groups[i]; i++) { + gs_strfreev char **keys = NULL; + gs_strfreev char **keys_b = NULL; + + keys = g_key_file_get_keys(kf_a, groups[i], NULL, NULL); + keys_b = g_key_file_get_keys(kf_b, groups[i], NULL, NULL); + + if ((!keys) != (!keys_b)) + return FALSE; + if (!keys) + continue; + + for (j = 0; keys[j] && keys_b[j] && !strcmp(keys[j], keys_b[j]); j++) + ; + if (keys[j] || keys_b[j]) + return FALSE; + + for (j = 0; keys[j]; j++) { + gs_free char *key_a = g_key_file_get_value(kf_a, groups[i], keys[j], NULL); + gs_free char *key_b = g_key_file_get_value(kf_b, groups[i], keys[j], NULL); + + if (g_strcmp0(key_a, key_b) != 0) + return FALSE; + } + } + return TRUE; +} + +gboolean +_nm_keyfile_equals(GKeyFile *kf_a, GKeyFile *kf_b, gboolean consider_order) +{ + if (!consider_order) { + return _nm_keyfile_a_contains_all_in_b(kf_a, kf_b) + && _nm_keyfile_a_contains_all_in_b(kf_b, kf_a); + } else { + return _nm_keyfile_equals_ordered(kf_a, kf_b); + } +} + +gboolean +_nm_keyfile_has_values(GKeyFile *keyfile) +{ + gs_strfreev char **groups = NULL; + + g_return_val_if_fail(keyfile, FALSE); + + groups = g_key_file_get_groups(keyfile, NULL); + return groups && groups[0]; +} + +/*****************************************************************************/ + +static const char * +_keyfile_key_encode(const char *name, char **out_to_free) +{ + NMStrBuf str; + gsize len; + gsize i; + + nm_assert(name); + nm_assert(out_to_free && !*out_to_free); + + /* See g_key_file_is_key_name(). + * + * GKeyFile allows all UTF-8 characters (even non-well formed sequences), + * except: + * - no empty keys + * - no leading/trailing ' ' + * - no '=', '[', ']' + * + * We do something more strict here. All non-ASCII characters, all non-printable + * characters, and all invalid characters are escaped with "\\XX". + * + * We don't escape \\, unless it is followed by two hex digits. + */ + + if (!name[0]) { + /* empty keys are backslash encoded. Note that usually + * \\00 is not a valid encode, the only exception is the empty + * word. */ + return "\\00"; + } + + /* find the first character that needs escaping. */ + i = 0; + if (name[0] != ' ') { + for (;; i++) { + const guchar ch = (guchar) name[i]; + + if (ch == '\0') + return name; + + if (ch < 0x20 || ch >= 127 || NM_IN_SET(ch, '=', '[', ']') + || (ch == '\\' && g_ascii_isxdigit(name[i + 1]) && g_ascii_isxdigit(name[i + 2])) + || (ch == ' ' && name[i + 1] == '\0')) + break; + } + } else if (name[1] == '\0') + return "\\20"; + + len = i + strlen(&name[i]); + nm_assert(len == strlen(name)); + + nm_str_buf_init(&str, len + 15u, FALSE); + + if (name[0] == ' ') { + nm_assert(i == 0); + nm_str_buf_append(&str, "\\20"); + i = 1; + } else + nm_str_buf_append_len(&str, name, i); + + for (;; i++) { + const guchar ch = (guchar) name[i]; + + if (ch == '\0') + break; + + if (ch < 0x20 || ch >= 127 || NM_IN_SET(ch, '=', '[', ']') + || (ch == '\\' && g_ascii_isxdigit(name[i + 1]) && g_ascii_isxdigit(name[i + 2])) + || (ch == ' ' && name[i + 1] == '\0')) { + nm_str_buf_append_c(&str, '\\'); + nm_str_buf_append_c_hex(&str, ch, TRUE); + } else + nm_str_buf_append_c(&str, (char) ch); + } + + return (*out_to_free = nm_str_buf_finalize(&str, NULL)); +} + +static const char * +_keyfile_key_decode(const char *key, char **out_to_free) +{ + char *out; + gsize len; + gsize i; + gsize j; + + nm_assert(key); + nm_assert(out_to_free && !*out_to_free); + + if (!key[0]) + return ""; + + for (i = 0; TRUE; i++) { + const char ch = key[i]; + + if (ch == '\0') + return key; + if (ch == '\\' && g_ascii_isxdigit(key[i + 1]) && g_ascii_isxdigit(key[i + 2])) + break; + } + + len = i + strlen(&key[i]); + + if (len == 3 && nm_streq(key, "\\00")) + return ""; + + nm_assert(len == strlen(key)); + + out = g_new(char, len + 1u); + + memcpy(out, key, sizeof(char) * i); + + j = i; + for (;;) { + const char ch = key[i]; + char ch1, ch2; + unsigned v; + + if (ch == '\0') + break; + + if (ch == '\\' && g_ascii_isxdigit((ch1 = key[i + 1])) + && g_ascii_isxdigit((ch2 = key[i + 2]))) { + v = (g_ascii_xdigit_value(ch1) << 4) + g_ascii_xdigit_value(ch2); + if (v != 0) { + out[j++] = (char) v; + i += 3; + continue; + } + } + out[j++] = ch; + i++; + } + + nm_assert(j <= len); + out[j] = '\0'; + return (*out_to_free = out); +} + +/*****************************************************************************/ + +const char * +nm_keyfile_key_encode(const char *name, char **out_to_free) +{ + const char *key; + + key = _keyfile_key_encode(name, out_to_free); +#if NM_MORE_ASSERTS > 5 + nm_assert(key); + nm_assert(!*out_to_free || key == *out_to_free); + nm_assert(!*out_to_free || !nm_streq0(name, key)); + { + gs_free char *to_free2 = NULL; + const char * name2; + + name2 = _keyfile_key_decode(key, &to_free2); + /* name2, the result of encode()+decode() is identical to name. + * That is because + * - encode() is a injective function. + * - decode() is a surjective function, however for output + * values of encode() is behaves injective too. */ + nm_assert(nm_streq0(name2, name)); + } +#endif + return key; +} + +const char * +nm_keyfile_key_decode(const char *key, char **out_to_free) +{ + const char *name; + + name = _keyfile_key_decode(key, out_to_free); +#if NM_MORE_ASSERTS > 5 + nm_assert(name); + nm_assert(!*out_to_free || name == *out_to_free); + { + gs_free char *to_free2 = NULL; + const char * key2; + + key2 = _keyfile_key_encode(name, &to_free2); + /* key2, the result of decode+encode may not be identical + * to the original key. That is, decode() is a surjective + * function mapping different keys to the same name. + * However, decode() behaves injective for input that + * are valid output of encode(). */ + nm_assert(key2); + } +#endif + return name; +} diff --git a/libnm-core/nm-keyfile-utils.h b/libnm-core/nm-keyfile-utils.h new file mode 100644 index 0000000..1555c11 --- /dev/null +++ b/libnm-core/nm-keyfile-utils.h @@ -0,0 +1,95 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2010 - 2015 Red Hat, Inc. + */ + +#ifndef __NM_KEYFILE_UTILS_H__ +#define __NM_KEYFILE_UTILS_H__ + +#if !((NETWORKMANAGER_COMPILATION) &NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL) + #error Cannot use this header. +#endif + +/*****************************************************************************/ + +#include "nm-glib-aux/nm-shared-utils.h" + +/*****************************************************************************/ + +#define NM_KEYFILE_GROUP_VPN_SECRETS "vpn-secrets" +#define NM_KEYFILE_GROUPPREFIX_WIREGUARD_PEER "wireguard-peer." + +#define nm_keyfile_error_is_not_found(error) \ + nm_g_error_matches(error, \ + G_KEY_FILE_ERROR, \ + G_KEY_FILE_ERROR_GROUP_NOT_FOUND, \ + G_KEY_FILE_ERROR_KEY_NOT_FOUND) + +const char *nm_keyfile_plugin_get_alias_for_setting_name(const char *setting_name); + +const char *nm_keyfile_plugin_get_setting_name_for_alias(const char *alias); + +/*****************************************************************************/ + +guint *nm_keyfile_plugin_kf_get_integer_list_uint(GKeyFile * kf, + const char *group, + const char *key, + gsize * out_length, + GError ** error); +char **nm_keyfile_plugin_kf_get_string_list(GKeyFile * kf, + const char *group, + const char *key, + gsize * out_length, + GError ** error); +char * +nm_keyfile_plugin_kf_get_string(GKeyFile *kf, const char *group, const char *key, GError **error); +gboolean +nm_keyfile_plugin_kf_get_boolean(GKeyFile *kf, const char *group, const char *key, GError **error); +char * +nm_keyfile_plugin_kf_get_value(GKeyFile *kf, const char *group, const char *key, GError **error); + +void nm_keyfile_plugin_kf_set_integer_list_uint8(GKeyFile * kf, + const char * group, + const char * key, + const guint8 *list, + gsize length); +void nm_keyfile_plugin_kf_set_integer_list_uint(GKeyFile * kf, + const char * group, + const char * key, + const guint *list, + gsize length); +void nm_keyfile_plugin_kf_set_string_list(GKeyFile * kf, + const char * group, + const char * key, + const char *const *list, + gsize length); + +void nm_keyfile_plugin_kf_set_string(GKeyFile * kf, + const char *group, + const char *key, + const char *value); +void +nm_keyfile_plugin_kf_set_boolean(GKeyFile *kf, const char *group, const char *key, gboolean value); +void +nm_keyfile_plugin_kf_set_value(GKeyFile *kf, const char *group, const char *key, const char *value); + +gint64 nm_keyfile_plugin_kf_get_int64(GKeyFile * kf, + const char *group, + const char *key, + guint base, + gint64 min, + gint64 max, + gint64 fallback, + GError ** error); + +char ** +nm_keyfile_plugin_kf_get_keys(GKeyFile *kf, const char *group, gsize *out_length, GError **error); + +gboolean +nm_keyfile_plugin_kf_has_key(GKeyFile *kf, const char *group, const char *key, GError **error); + +const char *nm_keyfile_key_encode(const char *name, char **out_to_free); + +const char *nm_keyfile_key_decode(const char *key, char **out_to_free); + +#endif /* __NM_KEYFILE_UTILS_H__ */ diff --git a/libnm-core/nm-keyfile.c b/libnm-core/nm-keyfile.c new file mode 100644 index 0000000..c9c8cf8 --- /dev/null +++ b/libnm-core/nm-keyfile.c @@ -0,0 +1,4443 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2008 - 2009 Novell, Inc. + * Copyright (C) 2008 - 2017 Red Hat, Inc. + */ + +#include "libnm-core/nm-default-libnm-core.h" + +#include "nm-keyfile-internal.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "nm-glib-aux/nm-str-buf.h" +#include "nm-glib-aux/nm-secret-utils.h" +#include "systemd/nm-sd-utils-shared.h" +#include "nm-libnm-core-intern/nm-common-macros.h" + +#include "nm-core-internal.h" +#include "nm-keyfile.h" +#include "nm-setting-user.h" +#include "nm-setting-ovs-external-ids.h" + +#include "nm-keyfile-utils.h" + +#define ETHERNET_S390_OPTIONS_GROUP_NAME "ethernet-s390-options" + +#define OVS_EXTERNAL_IDS_DATA_PREFIX "data." + +/*****************************************************************************/ + +typedef struct _ParseInfoProperty ParseInfoProperty; + +typedef struct { + NMConnection * connection; + GKeyFile * keyfile; + const char * base_dir; + NMKeyfileReadHandler read_handler; + void * user_data; + GError * error; + const char * group; + NMSetting * setting; +} KeyfileReaderInfo; + +typedef struct { + NMConnection * connection; + GKeyFile * keyfile; + GError * error; + NMKeyfileWriteHandler write_handler; + void * user_data; +} KeyfileWriterInfo; + +/*****************************************************************************/ + +static void +_key_file_handler_data_init(NMKeyfileHandlerData *handler_data, + NMKeyfileHandlerType handler_type, + const char * kf_group_name, + const char * kf_key, + NMSetting * cur_setting, + const char * cur_property, + GError ** p_error) +{ + nm_assert(handler_data); + nm_assert(p_error && !*p_error); + + handler_data->type = handler_type; + handler_data->p_error = p_error; + handler_data->kf_group_name = kf_group_name; + handler_data->kf_key = kf_key; + handler_data->cur_setting = cur_setting; + handler_data->cur_property = cur_property; +} + +static void +_key_file_handler_data_init_read(NMKeyfileHandlerData *handler_data, + NMKeyfileHandlerType handler_type, + KeyfileReaderInfo * info, + const char * kf_key, + const char * cur_property) +{ + _key_file_handler_data_init(handler_data, + handler_type, + info->group, + kf_key, + info->setting, + cur_property, + &info->error); +} + +static void +_key_file_handler_data_init_write(NMKeyfileHandlerData *handler_data, + NMKeyfileHandlerType handler_type, + KeyfileWriterInfo * info, + const char * kf_group, + const char * kf_key, + NMSetting * cur_setting, + const char * cur_property) +{ + _key_file_handler_data_init(handler_data, + handler_type, + kf_group, + kf_key, + cur_setting, + cur_property, + &info->error); +} + +_nm_printf(5, 6) static void _handle_warn(KeyfileReaderInfo * info, + const char * kf_key, + const char * cur_property, + NMKeyfileWarnSeverity severity, + const char * fmt, + ...) +{ + NMKeyfileHandlerData handler_data; + + _key_file_handler_data_init_read(&handler_data, + NM_KEYFILE_HANDLER_TYPE_WARN, + info, + kf_key, + cur_property); + handler_data.warn = (NMKeyfileHandlerDataWarn){ + .severity = severity, + .message = NULL, + .fmt = fmt, + }; + + va_start(handler_data.warn.ap, fmt); + + info->read_handler(info->keyfile, + info->connection, + NM_KEYFILE_HANDLER_TYPE_WARN, + &handler_data, + info->user_data); + + va_end(handler_data.warn.ap); + + g_free(handler_data.warn.message); +} + +#define handle_warn(arg_info, arg_kf_key, arg_property_name, arg_severity, ...) \ + ({ \ + KeyfileReaderInfo *_info = (arg_info); \ + \ + nm_assert(!_info->error); \ + \ + if (_info->read_handler) { \ + _handle_warn(_info, (arg_kf_key), (arg_property_name), (arg_severity), __VA_ARGS__); \ + } \ + _info->error == NULL; \ + }) + +/*****************************************************************************/ + +static gboolean +_secret_flags_persist_secret(NMSettingSecretFlags flags) +{ + return flags == NM_SETTING_SECRET_FLAG_NONE; +} + +/*****************************************************************************/ +/* Some setting properties also contain setting names, such as + * NMSettingConnection's 'type' property (which specifies the base type of the + * connection, e.g. ethernet or wifi) or 'slave-type' (specifies type of slave + * connection, e.g. bond or bridge). This function handles translating those + * properties' values to the real setting name if they are an alias. + */ +static void +setting_alias_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + const char * setting_name = nm_setting_get_name(setting); + const char * key_setting_name; + gs_free char *s = NULL; + + s = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, key, NULL); + if (!s) + return; + + key_setting_name = nm_keyfile_plugin_get_setting_name_for_alias(s); + g_object_set(G_OBJECT(setting), key, key_setting_name ?: s, NULL); +} + +static void +sriov_vfs_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + const char * setting_name = nm_setting_get_name(setting); + gs_unref_ptrarray GPtrArray *vfs = NULL; + gs_strfreev char ** keys = NULL; + gsize n_keys = 0; + int i; + + keys = nm_keyfile_plugin_kf_get_keys(info->keyfile, setting_name, &n_keys, NULL); + if (n_keys == 0) + return; + + vfs = g_ptr_array_new_with_free_func((GDestroyNotify) nm_sriov_vf_unref); + + for (i = 0; i < n_keys; i++) { + gs_free char *value = NULL; + NMSriovVF * vf; + const char * rest; + + if (!g_str_has_prefix(keys[i], "vf.")) + continue; + + rest = &keys[i][3]; + + if (!NM_STRCHAR_ALL(rest, ch, g_ascii_isdigit(ch))) + continue; + + value = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, keys[i], NULL); + + vf = _nm_utils_sriov_vf_from_strparts(rest, value, TRUE, NULL); + if (vf) + g_ptr_array_add(vfs, vf); + } + + g_object_set(G_OBJECT(setting), key, vfs, NULL); +} + +static void +read_array_of_uint(GKeyFile *file, NMSetting *setting, const char *key) +{ + gs_unref_array GArray *array = NULL; + gs_free_error GError *error = NULL; + gs_free guint *tmp = NULL; + gsize length; + + tmp = nm_keyfile_plugin_kf_get_integer_list_uint(file, + nm_setting_get_name(setting), + key, + &length, + &error); + if (error) + return; + + array = g_array_sized_new(FALSE, FALSE, sizeof(guint), length); + g_array_append_vals(array, tmp, length); + g_object_set(setting, key, array, NULL); +} + +static gboolean +get_one_int(KeyfileReaderInfo *info, + const char * kf_key, + const char * property_name, + const char * str, + guint32 max_val, + guint32 * out) +{ + gint64 tmp; + + nm_assert((!info) == (!property_name)); + nm_assert((!info) == (!kf_key)); + + if (!str || !str[0]) { + if (info) { + handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring missing number")); + } + return FALSE; + } + + tmp = _nm_utils_ascii_str_to_int64(str, 10, 0, max_val, -1); + if (tmp == -1) { + if (info) { + handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid number '%s'"), + str); + } + return FALSE; + } + + *out = (guint32) tmp; + return TRUE; +} + +static gpointer +build_address(KeyfileReaderInfo *info, + const char * kf_key, + const char * property_name, + int family, + const char * address_str, + guint32 plen) +{ + NMIPAddress *addr; + GError * error = NULL; + + g_return_val_if_fail(address_str, NULL); + + addr = nm_ip_address_new(family, address_str, plen, &error); + if (!addr) { + handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid %s address: %s"), + family == AF_INET ? "IPv4" : "IPv6", + error->message); + g_error_free(error); + } + + return addr; +} + +static gpointer +build_route(KeyfileReaderInfo *info, + const char * kf_key, + const char * property_name, + int family, + const char * dest_str, + guint32 plen, + const char * gateway_str, + const char * metric_str) +{ + NMIPRoute *route; + guint32 u32; + gint64 metric = -1; + GError * error = NULL; + + g_return_val_if_fail(dest_str, NULL); + + /* Next hop */ + if (gateway_str && gateway_str[0]) { + if (!nm_utils_ipaddr_is_valid(family, gateway_str)) { + /* Try workaround for routes written by broken keyfile writer. + * Due to bug bgo#719851, an older version of writer would have + * written "a:b:c:d::/plen,metric" if the gateway was ::, instead + * of "a:b:c:d::/plen,,metric" or "a:b:c:d::/plen,::,metric" + * Try workaround by interpreting gateway_str as metric to accept such + * invalid routes. This broken syntax should not be not officially + * supported. + **/ + if (family == AF_INET6 && !metric_str + && get_one_int(NULL, NULL, NULL, gateway_str, G_MAXUINT32, &u32)) { + metric = u32; + gateway_str = NULL; + } else { + handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid gateway '%s' for %s route"), + gateway_str, + family == AF_INET ? "IPv4" : "IPv6"); + return NULL; + } + } + } else + gateway_str = NULL; + + /* parse metric, default to -1 */ + if (metric_str) { + if (!get_one_int(info, kf_key, property_name, metric_str, G_MAXUINT32, &u32)) + return NULL; + metric = u32; + } + + route = nm_ip_route_new(family, dest_str, plen, gateway_str, metric, &error); + if (!route) { + handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid %s route: %s"), + family == AF_INET ? "IPv4" : "IPv6", + error->message); + g_error_free(error); + } + + return route; +} + +/* On success, returns pointer to the zero-terminated field (original @current). + * The @current * pointer target is set to point to the rest of the input + * or %NULL if there is no more input. Sets error to %NULL for convenience. + * + * On failure, returns %NULL (unspecified). The @current pointer target is + * resets to its original value to allow skipping fields. The @error target + * is set to the character that breaks the parsing or %NULL if @current was %NULL. + * + * When @current target is %NULL, gracefully fail returning %NULL while + * leaving the @current target %NULL end setting @error to %NULL; + */ +static const char * +read_field(char **current, const char **out_err_str, const char *characters, const char *delimiters) +{ + const char *start; + + nm_assert(current); + nm_assert(out_err_str); + nm_assert(characters); + nm_assert(delimiters); + + *out_err_str = NULL; + + if (!*current) { + /* graceful failure, leave '*current' NULL */ + return NULL; + } + + /* fail on empty input */ + if (!**current) + return NULL; + + /* remember beginning of input */ + start = *current; + + while (**current && strchr(characters, **current)) + (*current)++; + if (**current) + if (strchr(delimiters, **current)) { + /* success, more data available */ + *(*current)++ = '\0'; + return start; + } else { + /* error, bad character */ + *out_err_str = *current; + *current = (char *) start; + return NULL; + } + else { + /* success, end of input */ + *current = NULL; + return start; + } +} + +/*****************************************************************************/ + +#define NM_DBUS_SERVICE_OPENCONNECT "org.freedesktop.NetworkManager.openconnect" +#define NM_OPENCONNECT_KEY_GATEWAY "gateway" +#define NM_OPENCONNECT_KEY_COOKIE "cookie" +#define NM_OPENCONNECT_KEY_GWCERT "gwcert" +#define NM_OPENCONNECT_KEY_XMLCONFIG "xmlconfig" +#define NM_OPENCONNECT_KEY_LASTHOST "lasthost" +#define NM_OPENCONNECT_KEY_AUTOCONNECT "autoconnect" +#define NM_OPENCONNECT_KEY_CERTSIGS "certsigs" + +static void +openconnect_fix_secret_flags(NMSetting *setting) +{ + NMSettingVpn * s_vpn; + NMSettingSecretFlags flags; + + /* Huge hack. There were some openconnect changes that needed to happen + * pretty late, too late to get into distros. Migration has already + * happened for many people, and their secret flags are wrong. But we + * don't want to require re-migration, so we have to fix it up here. Ugh. + */ + + if (!NM_IS_SETTING_VPN(setting)) + return; + + s_vpn = NM_SETTING_VPN(setting); + + if (!nm_streq0(nm_setting_vpn_get_service_type(s_vpn), NM_DBUS_SERVICE_OPENCONNECT)) + return; + + /* These are different for every login session, and should not be stored */ + flags = NM_SETTING_SECRET_FLAG_NOT_SAVED; + nm_setting_set_secret_flags(NM_SETTING(s_vpn), NM_OPENCONNECT_KEY_GATEWAY, flags, NULL); + nm_setting_set_secret_flags(NM_SETTING(s_vpn), NM_OPENCONNECT_KEY_COOKIE, flags, NULL); + nm_setting_set_secret_flags(NM_SETTING(s_vpn), NM_OPENCONNECT_KEY_GWCERT, flags, NULL); + + /* These are purely internal data for the auth-dialog, and should be stored */ + flags = 0; + nm_setting_set_secret_flags(NM_SETTING(s_vpn), NM_OPENCONNECT_KEY_XMLCONFIG, flags, NULL); + nm_setting_set_secret_flags(NM_SETTING(s_vpn), NM_OPENCONNECT_KEY_LASTHOST, flags, NULL); + nm_setting_set_secret_flags(NM_SETTING(s_vpn), NM_OPENCONNECT_KEY_AUTOCONNECT, flags, NULL); + nm_setting_set_secret_flags(NM_SETTING(s_vpn), NM_OPENCONNECT_KEY_CERTSIGS, flags, NULL); +} + +/*****************************************************************************/ + +#define IP_ADDRESS_CHARS "0123456789abcdefABCDEF:.%" +#define DIGITS "0123456789" +#define DELIMITERS "/;," + +/* The following IPv4 and IPv6 address formats are supported: + * + * address (DEPRECATED) + * address/plen + * address/gateway (DEPRECATED) + * address/plen,gateway + * + * The following IPv4 and IPv6 route formats are supported: + * + * address/plen (NETWORK dev DEVICE) + * address/plen,gateway (NETWORK via GATEWAY dev DEVICE) + * address/plen,,metric (NETWORK dev DEVICE metric METRIC) + * address/plen,gateway,metric (NETWORK via GATEWAY dev DEVICE metric METRIC) + * + * For backward, forward and sideward compatibility, slash (/), + * semicolon (;) and comma (,) are interchangeable. The choice of + * separator in the above examples is therefore not significant. + * + * Leaving out the prefix length is discouraged and DEPRECATED. The + * default value of IPv6 prefix length was 64 and has not been + * changed. The default for IPv4 is now 24, which is the closest + * IPv4 equivalent. These defaults may just as well be changed to + * match the iproute2 defaults (32 for IPv4 and 128 for IPv6). + */ +static gpointer +read_one_ip_address_or_route(KeyfileReaderInfo *info, + const char * property_name, + const char * setting_name, + const char * kf_key, + gboolean ipv6, + gboolean route, + char ** out_gateway, + NMSetting * setting) +{ + guint plen; + gpointer result; + const char * address_str; + const char * plen_str; + const char * gateway_str; + const char * metric_str; + const char * err_str = NULL; + char * current; + gs_free char *value = NULL; + gs_free char *value_orig = NULL; + +#define VALUE_ORIG() \ + (value_orig \ + ?: (value_orig = \ + nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, kf_key, NULL))) + + value = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, kf_key, NULL); + if (!value) + return NULL; + + current = value; + + /* get address field */ + address_str = read_field(¤t, &err_str, IP_ADDRESS_CHARS, DELIMITERS); + if (err_str) { + handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("unexpected character '%c' for address %s: '%s' (position %td)"), + *err_str, + kf_key, + VALUE_ORIG(), + err_str - current); + return NULL; + } + /* get prefix length field (skippable) */ + plen_str = read_field(¤t, &err_str, DIGITS, DELIMITERS); + /* get gateway field */ + gateway_str = read_field(¤t, &err_str, IP_ADDRESS_CHARS, DELIMITERS); + if (err_str) { + handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("unexpected character '%c' for %s: '%s' (position %td)"), + *err_str, + kf_key, + VALUE_ORIG(), + err_str - current); + return NULL; + } + /* for routes, get metric */ + if (route) { + metric_str = read_field(¤t, &err_str, DIGITS, DELIMITERS); + if (err_str) { + handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("unexpected character '%c' in prefix length for %s: '%s' (position %td)"), + *err_str, + kf_key, + VALUE_ORIG(), + err_str - current); + return NULL; + } + } else + metric_str = NULL; + if (current) { + /* there is still some data */ + if (*current) { + /* another field follows */ + handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("garbage at the end of value %s: '%s'"), + kf_key, + VALUE_ORIG()); + return NULL; + } else { + /* semicolon at the end of input */ + if (!handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_INFO, + _("deprecated semicolon at the end of value %s: '%s'"), + kf_key, + VALUE_ORIG())) + return NULL; + } + } + +#define DEFAULT_PREFIX(for_route, for_ipv6) \ + ((for_route) ? ((for_ipv6) ? 128 : 24) : ((for_ipv6) ? 64 : 24)) + + /* parse plen, fallback to defaults */ + if (plen_str) { + if (!get_one_int(info, kf_key, property_name, plen_str, ipv6 ? 128 : 32, &plen)) { + plen = DEFAULT_PREFIX(route, ipv6); + if (info->error + || !handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid prefix length for %s '%s', defaulting to %d"), + kf_key, + VALUE_ORIG(), + plen)) + return NULL; + } + } else { + plen = DEFAULT_PREFIX(route, ipv6); + if (!handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("missing prefix length for %s '%s', defaulting to %d"), + kf_key, + VALUE_ORIG(), + plen)) + return NULL; + } + + /* build the appropriate data structure for NetworkManager settings */ + if (route) { + result = build_route(info, + kf_key, + property_name, + ipv6 ? AF_INET6 : AF_INET, + address_str, + plen, + gateway_str, + metric_str); + } else { + result = build_address(info, + kf_key, + property_name, + ipv6 ? AF_INET6 : AF_INET, + address_str, + plen); + if (!result) + return NULL; + if (gateway_str) + NM_SET_OUT(out_gateway, g_strdup(gateway_str)); + } + +#undef VALUE_ORIG + + return result; +} + +static void +fill_route_attributes(GKeyFile * kf, + NMIPRoute * route, + const char *setting, + const char *key, + int family) +{ + gs_free char * value = NULL; + gs_unref_hashtable GHashTable *hash = NULL; + GHashTableIter iter; + char * name; + GVariant * variant; + + value = nm_keyfile_plugin_kf_get_string(kf, setting, key, NULL); + if (!value || !value[0]) + return; + + hash = nm_utils_parse_variant_attributes(value, + ',', + '=', + TRUE, + nm_ip_route_get_variant_attribute_spec(), + NULL); + if (hash) { + g_hash_table_iter_init(&iter, hash); + while (g_hash_table_iter_next(&iter, (gpointer *) &name, (gpointer *) &variant)) { + if (nm_ip_route_attribute_validate(name, variant, family, NULL, NULL)) + nm_ip_route_set_attribute(route, name, g_variant_ref(variant)); + } + } +} + +typedef struct { + const char *s_key; + gint32 key_idx; + gint8 key_type; +} BuildListData; + +typedef enum { + BUILD_LIST_TYPE_ADDRESSES, + BUILD_LIST_TYPE_ROUTES, + BUILD_LIST_TYPE_ROUTING_RULES, +} BuildListType; + +static int +_build_list_data_cmp(gconstpointer p_a, gconstpointer p_b, gpointer user_data) +{ + const BuildListData *a = p_a; + const BuildListData *b = p_b; + + NM_CMP_FIELD(a, b, key_idx); + NM_CMP_FIELD(a, b, key_type); + NM_CMP_FIELD_STR(a, b, s_key); + return 0; +} + +static gboolean +_build_list_data_is_shadowed(const BuildListData *build_list, gsize build_list_len, gsize idx) +{ + /* the keyfile contains duplicate keys, which are both returned + * by g_key_file_get_keys() (WHY??). + * + * Skip the earlier one. */ + return idx + 1 < build_list_len && build_list[idx].key_idx == build_list[idx + 1].key_idx + && build_list[idx].key_type == build_list[idx + 1].key_type + && nm_streq(build_list[idx].s_key, build_list[idx + 1].s_key); +} + +static gboolean +_build_list_match_key_w_name_impl(const char *key, + const char *base_name, + gsize base_name_l, + gint32 * out_key_idx) +{ + gint64 v; + + /* some very strict parsing. */ + + /* the key must start with base_name. */ + if (strncmp(key, base_name, base_name_l) != 0) + return FALSE; + + key += base_name_l; + if (key[0] == '\0') { + /* if key is identical to base_name, that's good. */ + NM_SET_OUT(out_key_idx, -1); + return TRUE; + } + + /* if base_name is followed by a zero, then it must be + * only a zero, nothing else. */ + if (key[0] == '0') { + if (key[1] != '\0') + return FALSE; + NM_SET_OUT(out_key_idx, 0); + return TRUE; + } + + /* otherwise, it can only be followed by a non-zero decimal. */ + if (!(key[0] >= '1' && key[0] <= '9')) + return FALSE; + /* and all remaining chars must be decimals too. */ + if (!NM_STRCHAR_ALL(&key[1], ch, g_ascii_isdigit(ch))) + return FALSE; + + /* and it must be convertible to a (positive) int. */ + v = _nm_utils_ascii_str_to_int64(key, 10, 0, G_MAXINT32, -1); + if (v < 0) + return FALSE; + + /* good */ + NM_SET_OUT(out_key_idx, v); + return TRUE; +} + +#define _build_list_match_key_w_name(key, base_name, out_key_idx) \ + _build_list_match_key_w_name_impl(key, base_name, NM_STRLEN(base_name), out_key_idx) + +static BuildListData * +_build_list_create(GKeyFile * keyfile, + const char * group_name, + BuildListType build_list_type, + gsize * out_build_list_len, + char *** out_keys_strv) +{ + gs_strfreev char **keys = NULL; + gsize i_keys, n_keys; + gs_free BuildListData *build_list = NULL; + gsize build_list_len = 0; + + nm_assert(out_build_list_len && *out_build_list_len == 0); + nm_assert(out_keys_strv && !*out_keys_strv); + + keys = nm_keyfile_plugin_kf_get_keys(keyfile, group_name, &n_keys, NULL); + if (n_keys == 0) + return NULL; + + for (i_keys = 0; i_keys < n_keys; i_keys++) { + const char *s_key = keys[i_keys]; + gint32 key_idx; + gint8 key_type = 0; + + switch (build_list_type) { + case BUILD_LIST_TYPE_ROUTES: + if (_build_list_match_key_w_name(s_key, "route", &key_idx)) + key_type = 0; + else if (_build_list_match_key_w_name(s_key, "routes", &key_idx)) + key_type = 1; + else + continue; + break; + case BUILD_LIST_TYPE_ADDRESSES: + if (_build_list_match_key_w_name(s_key, "address", &key_idx)) + key_type = 0; + else if (_build_list_match_key_w_name(s_key, "addresses", &key_idx)) + key_type = 1; + else + continue; + break; + case BUILD_LIST_TYPE_ROUTING_RULES: + if (_build_list_match_key_w_name(s_key, "routing-rule", &key_idx)) + key_type = 0; + else + continue; + break; + default: + nm_assert_not_reached(); + break; + } + + if (G_UNLIKELY(!build_list)) + build_list = g_new(BuildListData, n_keys - i_keys); + + build_list[build_list_len++] = (BuildListData){ + .s_key = s_key, + .key_idx = key_idx, + .key_type = key_type, + }; + } + + if (build_list_len == 0) + return NULL; + + if (build_list_len > 1) { + g_qsort_with_data(build_list, + build_list_len, + sizeof(BuildListData), + _build_list_data_cmp, + NULL); + } + + *out_build_list_len = build_list_len; + *out_keys_strv = g_steal_pointer(&keys); + return g_steal_pointer(&build_list); +} + +static void +ip_address_or_route_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *setting_key) +{ + const char * setting_name = nm_setting_get_name(setting); + gboolean is_ipv6 = nm_streq(setting_name, "ipv6"); + gboolean is_routes = nm_streq(setting_key, "routes"); + gs_free char * gateway = NULL; + gs_unref_ptrarray GPtrArray *list = NULL; + gs_strfreev char ** keys = NULL; + gs_free BuildListData *build_list = NULL; + gsize i_build_list, build_list_len = 0; + + build_list = _build_list_create(info->keyfile, + setting_name, + is_routes ? BUILD_LIST_TYPE_ROUTES : BUILD_LIST_TYPE_ADDRESSES, + &build_list_len, + &keys); + if (!build_list) + return; + + list = g_ptr_array_new_with_free_func(is_routes ? (GDestroyNotify) nm_ip_route_unref + : (GDestroyNotify) nm_ip_address_unref); + + for (i_build_list = 0; i_build_list < build_list_len; i_build_list++) { + const char *s_key; + gpointer item; + + if (_build_list_data_is_shadowed(build_list, build_list_len, i_build_list)) + continue; + + s_key = build_list[i_build_list].s_key; + item = read_one_ip_address_or_route(info, + setting_key, + setting_name, + s_key, + is_ipv6, + is_routes, + gateway ? NULL : &gateway, + setting); + if (item && is_routes) { + char options_key[128]; + + nm_sprintf_buf(options_key, "%s_options", s_key); + fill_route_attributes(info->keyfile, + item, + setting_name, + options_key, + is_ipv6 ? AF_INET6 : AF_INET); + } + + if (info->error) + return; + + if (item) + g_ptr_array_add(list, item); + } + + if (list->len >= 1) + g_object_set(setting, setting_key, list, NULL); + + if (gateway) + g_object_set(setting, "gateway", gateway, NULL); +} + +static void +ip_routing_rule_parser_full(KeyfileReaderInfo * info, + const NMMetaSettingInfo * setting_info, + const NMSettInfoProperty *property_info, + const ParseInfoProperty * pip, + NMSetting * setting) +{ + const char * setting_name = nm_setting_get_name(setting); + gboolean is_ipv6 = nm_streq(setting_name, "ipv6"); + gs_strfreev char **keys = NULL; + gs_free BuildListData *build_list = NULL; + gsize i_build_list, build_list_len = 0; + + build_list = _build_list_create(info->keyfile, + setting_name, + BUILD_LIST_TYPE_ROUTING_RULES, + &build_list_len, + &keys); + if (!build_list) + return; + + for (i_build_list = 0; i_build_list < build_list_len; i_build_list++) { + nm_auto_unref_ip_routing_rule NMIPRoutingRule *rule = NULL; + gs_free char * value = NULL; + gs_free_error GError *local = NULL; + + if (_build_list_data_is_shadowed(build_list, build_list_len, i_build_list)) + continue; + + value = nm_keyfile_plugin_kf_get_string(info->keyfile, + setting_name, + build_list[i_build_list].s_key, + NULL); + if (!value) + continue; + + rule = nm_ip_routing_rule_from_string( + value, + (NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE + | (is_ipv6 ? NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6 + : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET)), + NULL, + &local); + if (!rule) { + if (!handle_warn(info, + build_list[i_build_list].s_key, + property_info->name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid value for \"%s\": %s"), + build_list[i_build_list].s_key, + local->message)) + return; + continue; + } + + nm_setting_ip_config_add_routing_rule(NM_SETTING_IP_CONFIG(setting), rule); + } +} + +static void +_parser_full_ovs_external_ids_data(KeyfileReaderInfo * info, + const NMMetaSettingInfo * setting_info, + const NMSettInfoProperty *property_info, + const ParseInfoProperty * pip, + NMSetting * setting) +{ + const char * setting_name = NM_SETTING_OVS_EXTERNAL_IDS_SETTING_NAME; + gs_strfreev char **keys = NULL; + gsize n_keys; + gsize i; + + nm_assert(NM_IS_SETTING_OVS_EXTERNAL_IDS(setting)); + nm_assert(nm_streq(property_info->name, NM_SETTING_OVS_EXTERNAL_IDS_DATA)); + nm_assert(nm_streq(setting_name, setting_info->setting_name)); + nm_assert(nm_streq(setting_name, nm_setting_get_name(setting))); + + keys = nm_keyfile_plugin_kf_get_keys(info->keyfile, setting_name, &n_keys, NULL); + + for (i = 0; i < n_keys; i++) { + const char * key = keys[i]; + gs_free char *name_to_free = NULL; + gs_free char *value = NULL; + const char * name; + + if (!NM_STR_HAS_PREFIX(key, OVS_EXTERNAL_IDS_DATA_PREFIX)) + continue; + + value = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, key, NULL); + if (!value) + continue; + + name = &key[NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX)]; + name = nm_keyfile_key_decode(name, &name_to_free); + nm_setting_ovs_external_ids_set_data(NM_SETTING_OVS_EXTERNAL_IDS(setting), name, value); + } +} + +static void +ip_dns_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + int addr_family; + gs_strfreev char **list = NULL; + gsize i, n, length; + + nm_assert(NM_IS_SETTING_IP4_CONFIG(setting) || NM_IS_SETTING_IP6_CONFIG(setting)); + + list = nm_keyfile_plugin_kf_get_string_list(info->keyfile, + nm_setting_get_name(setting), + key, + &length, + NULL); + nm_assert(length == NM_PTRARRAY_LEN(list)); + if (length == 0) + return; + + addr_family = NM_IS_SETTING_IP4_CONFIG(setting) ? AF_INET : AF_INET6; + + n = 0; + for (i = 0; i < length; i++) { + NMIPAddr addr; + + if (inet_pton(addr_family, list[i], &addr) <= 0) { + if (!handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid DNS server IPv%c address '%s'"), + nm_utils_addr_family_to_char(addr_family), + list[i])) { + do { + nm_clear_g_free(&list[i]); + } while (++i < length); + return; + } + nm_clear_g_free(&list[i]); + continue; + } + + if (n != i) + list[n] = g_steal_pointer(&list[i]); + n++; + } + + g_object_set(setting, key, list, NULL); +} + +static void +ip6_addr_gen_mode_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + NMSettingIP6ConfigAddrGenMode addr_gen_mode; + const char * setting_name = nm_setting_get_name(setting); + gs_free char * s = NULL; + + s = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, key, NULL); + if (s) { + if (!nm_utils_enum_from_str(nm_setting_ip6_config_addr_gen_mode_get_type(), + s, + (int *) &addr_gen_mode, + NULL)) { + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid option '%s', use one of [%s]"), + s, + "eui64,stable-privacy"); + return; + } + } else + addr_gen_mode = NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64; + + g_object_set(G_OBJECT(setting), key, (int) addr_gen_mode, NULL); +} + +static void +mac_address_parser(KeyfileReaderInfo *info, + NMSetting * setting, + const char * key, + gsize addr_len, + gboolean cloned_mac_addr) +{ + const char * setting_name = nm_setting_get_name(setting); + char addr_str[NM_UTILS_HWADDR_LEN_MAX * 3]; + guint8 addr_bin[NM_UTILS_HWADDR_LEN_MAX]; + gs_free char *tmp_string = NULL; + gs_free guint *int_list = NULL; + const char * mac_str; + gsize int_list_len; + gsize i; + + nm_assert(addr_len > 0); + nm_assert(addr_len <= NM_UTILS_HWADDR_LEN_MAX); + + tmp_string = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, key, NULL); + + if (cloned_mac_addr && NM_CLONED_MAC_IS_SPECIAL(tmp_string)) { + mac_str = tmp_string; + goto out; + } + + if (tmp_string && nm_utils_hwaddr_aton(tmp_string, addr_bin, addr_len)) + goto good_addr_bin; + + /* Old format; list of ints */ + int_list = nm_keyfile_plugin_kf_get_integer_list_uint(info->keyfile, + setting_name, + key, + &int_list_len, + NULL); + if (int_list_len == addr_len) { + for (i = 0; i < addr_len; i++) { + const guint val = int_list[i]; + + if (val > 255) + break; + addr_bin[i] = (guint8) val; + } + if (i == addr_len) + goto good_addr_bin; + } + + handle_warn(info, key, key, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid MAC address")); + return; + +good_addr_bin: + nm_utils_bin2hexstr_full(addr_bin, addr_len, ':', TRUE, addr_str); + mac_str = addr_str; + +out: + g_object_set(setting, key, mac_str, NULL); +} + +static void +mac_address_parser_ETHER(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + mac_address_parser(info, setting, key, ETH_ALEN, FALSE); +} + +static void +mac_address_parser_ETHER_cloned(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + mac_address_parser(info, setting, key, ETH_ALEN, TRUE); +} + +static void +mac_address_parser_INFINIBAND(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + mac_address_parser(info, setting, key, INFINIBAND_ALEN, FALSE); +} + +static void +read_hash_of_string(KeyfileReaderInfo *info, + GKeyFile * file, + NMSetting * setting, + const char * kf_group) +{ + gs_strfreev char **keys = NULL; + const char *const *iter; + const char * setting_name = nm_setting_get_name(setting); + gboolean is_vpn; + gsize n_keys; + + nm_assert((NM_IS_SETTING_VPN(setting) && nm_streq(kf_group, NM_SETTING_VPN_DATA)) + || (NM_IS_SETTING_VPN(setting) && nm_streq(kf_group, NM_SETTING_VPN_SECRETS)) + || (NM_IS_SETTING_BOND(setting) && nm_streq(kf_group, NM_SETTING_BOND_OPTIONS)) + || (NM_IS_SETTING_USER(setting) && nm_streq(kf_group, NM_SETTING_USER_DATA))); + + keys = nm_keyfile_plugin_kf_get_keys(file, setting_name, &n_keys, NULL); + if (n_keys == 0) + return; + + if ((is_vpn = NM_IS_SETTING_VPN(setting)) || NM_IS_SETTING_BOND(setting)) { + for (iter = (const char *const *) keys; *iter; iter++) { + const char * kf_key = *iter; + gs_free char *to_free = NULL; + gs_free char *value = NULL; + const char * name; + + value = nm_keyfile_plugin_kf_get_string(file, setting_name, kf_key, NULL); + if (!value) + continue; + + name = nm_keyfile_key_decode(kf_key, &to_free); + + if (is_vpn) { + /* Add any item that's not a class property to the data hash */ + if (!g_object_class_find_property(G_OBJECT_GET_CLASS(setting), name)) + nm_setting_vpn_add_data_item(NM_SETTING_VPN(setting), name, value); + } else { + if (!nm_streq(name, "interface-name")) { + gs_free_error GError *error = NULL; + + if (!_nm_setting_bond_validate_option(name, value, &error)) { + if (!handle_warn(info, + kf_key, + name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid bond option %s%s%s = %s%s%s: %s"), + NM_PRINT_FMT_QUOTE_STRING(name), + NM_PRINT_FMT_QUOTE_STRING(value), + error->message)) + return; + } else + nm_setting_bond_add_option(NM_SETTING_BOND(setting), name, value); + } + } + } + openconnect_fix_secret_flags(setting); + return; + } + + if (NM_IS_SETTING_USER(setting)) { + gs_unref_hashtable GHashTable *data = NULL; + + data = g_hash_table_new_full(nm_str_hash, g_str_equal, g_free, g_free); + for (iter = (const char *const *) keys; *iter; iter++) { + gs_free char *to_free = NULL; + char * value = NULL; + const char * name; + + value = nm_keyfile_plugin_kf_get_string(file, setting_name, *iter, NULL); + if (!value) + continue; + name = nm_keyfile_key_decode(*iter, &to_free); + g_hash_table_insert(data, g_steal_pointer(&to_free) ?: g_strdup(name), value); + } + g_object_set(setting, NM_SETTING_USER_DATA, data, NULL); + return; + } + + nm_assert_not_reached(); +} + +static gsize +unescape_semicolons(char *str) +{ + gsize i, j; + + for (i = 0, j = 0; str[i];) { + if (str[i] == '\\' && str[i + 1] == ';') + i++; + str[j++] = str[i++]; + } + nm_explicit_bzero(&str[j], i - j); + return j; +} + +static GBytes * +get_bytes(KeyfileReaderInfo *info, + const char * setting_name, + const char * key, + gboolean zero_terminate, + gboolean unescape_semicolon) +{ + nm_auto_free_secret char *tmp_string = NULL; + gboolean may_be_int_list = TRUE; + gsize length; + GBytes * result; + + /* New format: just a string + * Old format: integer list; e.g. 11;25;38; + */ + tmp_string = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, key, NULL); + if (!tmp_string) + return NULL; + + /* if the string is empty, we return an empty GBytes array. + * Note that for NM_SETTING_802_1X_PASSWORD_RAW both %NULL and + * an empty GBytes are valid, and shall be destinguished. */ + if (!tmp_string[0]) { + /* note that even if @zero_terminate is TRUE, we return an empty + * byte-array. The reason is that zero_terminate is there to terminate + * *valid* strings. It's not there to terminated invalid (empty) strings. + */ + return g_bytes_new_static("", 0); + } + + for (length = 0; tmp_string[length]; length++) { + const char ch = tmp_string[length]; + + if (!g_ascii_isspace(ch) && !g_ascii_isdigit(ch) && ch != ';') { + may_be_int_list = FALSE; + length += strlen(&tmp_string[length]); + break; + } + } + + /* Try to parse the string as a integer list. */ + if (may_be_int_list && length > 0) { + nm_auto_free_secret_buf NMSecretBuf *bin = NULL; + const char *const s = tmp_string; + gsize i, d; + + bin = nm_secret_buf_new(length / 2 + 3); + +#define DIGIT(c) ((c) - '0') + i = 0; + d = 0; + while (TRUE) { + int n; + + /* leading whitespace */ + while (g_ascii_isspace(s[i])) + i++; + if (s[i] == '\0') + break; + /* then expect 1 to 3 digits */ + if (!g_ascii_isdigit(s[i])) { + d = 0; + break; + } + n = DIGIT(s[i]); + i++; + if (g_ascii_isdigit(s[i])) { + n = 10 * n + DIGIT(s[i]); + i++; + if (g_ascii_isdigit(s[i])) { + n = 10 * n + DIGIT(s[i]); + i++; + } + } + if (n > 255) { + d = 0; + break; + } + + nm_assert(d < bin->len); + bin->bin[d++] = n; + + /* allow whitespace after the digit. */ + while (g_ascii_isspace(s[i])) + i++; + /* need a semicolon as separator. */ + if (s[i] != ';') { + d = 0; + break; + } + i++; + } +#undef DIGIT + + /* Old format; list of ints. We already did a strict validation of the + * string format before. We expect that this conversion cannot fail. */ + if (d > 0) { + /* note that @zero_terminate does not add a terminating '\0' to + * binary data as an integer list. If the bytes are expressed as + * an integer list, all potential NUL characters are supposed to + * be included there explicitly. + * + * However, in the spirit of defensive programming, we do append a + * NUL character to the buffer, although this character is hidden + * and only a mitigation for bugs. */ + + if (d + 10 < bin->len) { + /* hm, too much unused memory. Copy the memory to a suitable + * sized buffer. */ + return nm_secret_copy_to_gbytes(bin->bin, d); + } + + nm_assert(d < bin->len); + bin->bin[d] = '\0'; + return nm_secret_buf_to_gbytes_take(g_steal_pointer(&bin), d); + } + } + + /* Handle as a simple string (ie, new format) */ + if (unescape_semicolon) + length = unescape_semicolons(tmp_string); + if (zero_terminate) + length++; + if (length == 0) + return NULL; + + result = + g_bytes_new_with_free_func(tmp_string, length, (GDestroyNotify) nm_free_secret, tmp_string); + tmp_string = NULL; + return result; +} + +static void +ssid_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + const char * setting_name = nm_setting_get_name(setting); + gs_unref_bytes GBytes *bytes = NULL; + + bytes = get_bytes(info, setting_name, key, FALSE, TRUE); + if (!bytes) { + handle_warn(info, key, key, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid SSID")); + return; + } + g_object_set(setting, key, bytes, NULL); +} + +static void +password_raw_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + const char * setting_name = nm_setting_get_name(setting); + gs_unref_bytes GBytes *bytes = NULL; + + bytes = get_bytes(info, setting_name, key, FALSE, TRUE); + if (!bytes) { + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid raw password")); + return; + } + g_object_set(setting, key, bytes, NULL); +} + +static char * +get_cert_path(const char *base_dir, const guint8 *cert_path, gsize cert_path_len) +{ + const char *base; + char * p = NULL, *path, *tmp; + + g_return_val_if_fail(base_dir != NULL, NULL); + g_return_val_if_fail(cert_path != NULL, NULL); + + path = g_strndup((char *) cert_path, cert_path_len); + + if (path[0] == '/') + return path; + + base = path; + p = strrchr(path, '/'); + if (p) + base = p + 1; + + tmp = g_build_path("/", base_dir, base, NULL); + g_free(path); + return tmp; +} + +static const char *certext[] = {".pem", ".cert", ".crt", ".cer", ".p12", ".der", ".key"}; + +static gboolean +has_cert_ext(const char *path) +{ + int i; + + for (i = 0; i < G_N_ELEMENTS(certext); i++) { + if (g_str_has_suffix(path, certext[i])) + return TRUE; + } + return FALSE; +} + +char * +nm_keyfile_detect_unqualified_path_scheme(const char * base_dir, + gconstpointer pdata, + gsize data_len, + gboolean consider_exists, + gboolean * out_exists) +{ + const char * data = pdata; + gboolean exists = FALSE; + gsize validate_len; + gsize path_len, pathuri_len; + gs_free char *path = NULL; + gs_free char *pathuri = NULL; + + g_return_val_if_fail(base_dir && base_dir[0] == '/', NULL); + + if (!pdata) + return NULL; + if (data_len == -1) + data_len = strlen(data); + if (data_len > 500 || data_len < 1) + return NULL; + + /* If there's a trailing zero tell g_utf8_validate() to validate until the zero */ + if (data[data_len - 1] == '\0') { + /* setting it to -1, would mean we accept data to contain NUL characters before the + * end. Don't accept any NUL in [0 .. data_len-1[ . */ + validate_len = data_len - 1; + } else + validate_len = data_len; + if (validate_len == 0 || g_utf8_validate((const char *) data, validate_len, NULL) == FALSE) + return NULL; + + /* Might be a bare path without the file:// prefix; in that case + * if it's an absolute path, use that, otherwise treat it as a + * relative path to the current directory. + */ + + path = get_cert_path(base_dir, (const guint8 *) data, data_len); + + /* FIXME(keyfile-parse-in-memory): it is wrong that keyfile reader makes decisions based on + * the file systems content. The serialization/parsing should be entirely in-memory. */ + if (!memchr(data, '/', data_len) && !has_cert_ext(path)) { + if (!consider_exists) + return NULL; + exists = g_file_test(path, G_FILE_TEST_EXISTS); + if (!exists) + return NULL; + } else if (out_exists) + exists = g_file_test(path, G_FILE_TEST_EXISTS); + + /* Construct the proper value as required for the PATH scheme. + * + * When returning TRUE, we must also be sure that @data_len does not look like + * the deprecated format of list of integers. With this implementation that is the + * case, as long as @consider_exists is FALSE. */ + path_len = strlen(path); + pathuri_len = (NM_STRLEN(NM_KEYFILE_CERT_SCHEME_PREFIX_PATH) + 1) + path_len; + pathuri = g_new(char, pathuri_len); + memcpy(pathuri, + NM_KEYFILE_CERT_SCHEME_PREFIX_PATH, + NM_STRLEN(NM_KEYFILE_CERT_SCHEME_PREFIX_PATH)); + memcpy(&pathuri[NM_STRLEN(NM_KEYFILE_CERT_SCHEME_PREFIX_PATH)], path, path_len + 1); + if (nm_setting_802_1x_check_cert_scheme(pathuri, pathuri_len, NULL) + != NM_SETTING_802_1X_CK_SCHEME_PATH) + return NULL; + + NM_SET_OUT(out_exists, exists); + return g_steal_pointer(&pathuri); +} + +#define HAS_SCHEME_PREFIX(bin, bin_len, scheme) \ + ({ \ + const char *const _bin = (bin); \ + const gsize _bin_len = (bin_len); \ + \ + nm_assert(_bin &&_bin_len > 0); \ + \ + (_bin_len > NM_STRLEN(scheme) + 1 && _bin[_bin_len - 1] == '\0' \ + && memcmp(_bin, scheme, NM_STRLEN(scheme)) == 0); \ + }) + +static void +cert_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + const char * setting_name = nm_setting_get_name(setting); + gs_unref_bytes GBytes *bytes = NULL; + const char * bin = NULL; + gsize bin_len = 0; + char * path; + gboolean path_exists; + + bytes = get_bytes(info, setting_name, key, TRUE, FALSE); + if (bytes) + bin = g_bytes_get_data(bytes, &bin_len); + if (bin_len == 0) { + if (!info->error) { + handle_warn(info, key, key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid key/cert value")); + } + return; + } + + if (HAS_SCHEME_PREFIX(bin, bin_len, NM_KEYFILE_CERT_SCHEME_PREFIX_PATH)) { + const char * path2 = &bin[NM_STRLEN(NM_KEYFILE_CERT_SCHEME_PREFIX_PATH)]; + gs_free char *path2_free = NULL; + + if (nm_setting_802_1x_check_cert_scheme(bin, bin_len, NULL) + != NM_SETTING_802_1X_CK_SCHEME_PATH) { + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid key/cert value path \"%s\""), + bin); + return; + } + + g_object_set(setting, key, bytes, NULL); + + if (path2[0] != '/') { + /* we want to read absolute paths because we use keyfile as exchange + * between different processes which might not have the same cwd. */ + path2_free = get_cert_path(info->base_dir, + (const guint8 *) path2, + bin_len - NM_STRLEN(NM_KEYFILE_CERT_SCHEME_PREFIX_PATH) - 1); + path2 = path2_free; + } + + /* FIXME(keyfile-parse-in-memory): keyfile reader must not access the file system and + * (in a first step) only operate in memory-only. If the presence of files should be checked, + * then by invoking a callback (and possibly keyfile settings plugin would + * collect the file names to be checked and check them later). */ + if (!g_file_test(path2, G_FILE_TEST_EXISTS)) { + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE, + _("certificate or key file '%s' does not exist"), + path2); + } + return; + } + + if (HAS_SCHEME_PREFIX(bin, bin_len, NM_KEYFILE_CERT_SCHEME_PREFIX_PKCS11)) { + if (nm_setting_802_1x_check_cert_scheme(bin, bin_len, NULL) + != NM_SETTING_802_1X_CK_SCHEME_PKCS11) { + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid PKCS#11 URI \"%s\""), + bin); + return; + } + + g_object_set(setting, key, bytes, NULL); + return; + } + + if (HAS_SCHEME_PREFIX(bin, bin_len, NM_KEYFILE_CERT_SCHEME_PREFIX_BLOB)) { + const char *cdata = bin + NM_STRLEN(NM_KEYFILE_CERT_SCHEME_PREFIX_BLOB); + gsize cdata_len = bin_len - NM_STRLEN(NM_KEYFILE_CERT_SCHEME_PREFIX_BLOB) - 1; + gs_free guchar *bin_decoded = NULL; + gsize bin_decoded_len = 0; + gsize i; + gboolean valid_base64; + gs_unref_bytes GBytes *val = NULL; + + /* Let's be strict here. We expect valid base64, no funny stuff!! + * We didn't write such invalid data ourselfes and refuse to read it as blob. */ + if ((valid_base64 = (cdata_len % 4 == 0))) { + for (i = 0; i < cdata_len; i++) { + char c = cdata[i]; + + if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') + || (c == '+' || c == '/'))) { + if (c != '=' || i < cdata_len - 2) + valid_base64 = FALSE; + else { + for (; i < cdata_len; i++) { + if (cdata[i] != '=') + valid_base64 = FALSE; + } + } + break; + } + } + } + if (valid_base64) + bin_decoded = g_base64_decode(cdata, &bin_decoded_len); + + if (bin_decoded_len == 0) { + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid key/cert value data:;base64, is not base64")); + return; + } + + if (nm_setting_802_1x_check_cert_scheme(bin_decoded, bin_decoded_len, NULL) + != NM_SETTING_802_1X_CK_SCHEME_BLOB) { + /* The blob probably starts with "file://". Setting the cert data will confuse NMSetting8021x. + * In fact this is a limitation of NMSetting8021x which does not support setting blobs that start + * with file://. Just warn and return TRUE to signal that we ~handled~ the setting. */ + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid key/cert value data:;base64,file://")); + return; + } + + val = g_bytes_new_take(g_steal_pointer(&bin_decoded), bin_decoded_len); + g_object_set(setting, key, val, NULL); + return; + } + + /* If not, it might be a plain path */ + path = + nm_keyfile_detect_unqualified_path_scheme(info->base_dir, bin, bin_len, TRUE, &path_exists); + if (path) { + gs_unref_bytes GBytes *val = NULL; + + /* Construct the proper value as required for the PATH scheme */ + val = g_bytes_new_take(path, strlen(path) + 1); + g_object_set(setting, key, val, NULL); + + /* Warn if the certificate didn't exist */ + if (!path_exists) { + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE, + _("certificate or key file '%s' does not exist"), + path); + } + return; + } + + if (nm_setting_802_1x_check_cert_scheme(bin, bin_len, NULL) + != NM_SETTING_802_1X_CK_SCHEME_BLOB) { + /* The blob probably starts with "file://" but contains invalid characters for a path. + * Setting the cert data will confuse NMSetting8021x. + * In fact, NMSetting8021x does not support setting such binary data, so just warn and + * continue. */ + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid key/cert value is not a valid blob")); + return; + } + + g_object_set(setting, key, bytes, NULL); +} + +static int +_parity_from_char(int ch) +{ +#if NM_MORE_ASSERTS > 5 + { + static char check = 0; + + if (check == 0) { + nm_auto_unref_gtypeclass GEnumClass *klass = + g_type_class_ref(NM_TYPE_SETTING_SERIAL_PARITY); + guint i; + + check = 1; + + /* In older versions, parity was G_TYPE_CHAR/gint8, and the character + * value was stored as integer. + * For example parity=69 equals parity=E, meaning NM_SETTING_SERIAL_PARITY_EVEN. + * + * That means, certain values are reserved. Assert that these numbers + * are not reused when we extend NMSettingSerialParity enum. + * Actually, since NM_SETTING_SERIAL_PARITY is g_param_spec_enum(), + * we anyway cannot extend the enum without breaking API... + * + * [1] commit "a91e60902e libnm-core: make NMSettingSerial:parity an enum" + * [2] https://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=a91e60902eabae1de93d61323dae6ac894b5d40f + */ + g_assert(G_IS_ENUM_CLASS(klass)); + for (i = 0; i < klass->n_values; i++) { + const GEnumValue *v = &klass->values[i]; + int num = v->value; + + g_assert(_parity_from_char(num) == -1); + g_assert(!NM_IN_SET(num, 'e', 'E', 'o', 'O', 'n', 'N')); + } + } + } +#endif + + switch (ch) { + case 'E': + case 'e': + return NM_SETTING_SERIAL_PARITY_EVEN; + case 'O': + case 'o': + return NM_SETTING_SERIAL_PARITY_ODD; + case 'N': + case 'n': + return NM_SETTING_SERIAL_PARITY_NONE; + } + + return -1; +} + +static void +parity_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + const char * setting_name = nm_setting_get_name(setting); + gs_free_error GError *err = NULL; + int parity; + gs_free char * tmp_str = NULL; + gint64 i64; + + /* Keyfile traditionally stored this as the ASCII value for 'E', 'o', or 'n'. + * We now accept either that or the (case-insensitive) character itself (but + * still always write it the old way, for backward compatibility). + */ + tmp_str = nm_keyfile_plugin_kf_get_value(info->keyfile, setting_name, key, &err); + if (err) + goto out_err; + + if (tmp_str && tmp_str[0] != '\0' && tmp_str[1] == '\0') { + /* the ASCII characters like 'E' are taken directly... */ + parity = _parity_from_char(tmp_str[0]); + if (parity >= 0) + goto parity_good; + } + + i64 = _nm_utils_ascii_str_to_int64(tmp_str, 0, G_MININT, G_MAXINT, G_MININT64); + if (i64 != G_MININT64 && errno == 0) { + if ((parity = _parity_from_char(i64)) >= 0) { + /* another oddity: the string is a valid number. However, if the numeric values + * is one of the supported ASCII codes, accept it (like 69 for 'E'). + */ + goto parity_good; + } + + /* Finally, take the numeric value as is. */ + parity = i64; + goto parity_good; + } + + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid parity value '%s'"), + tmp_str ?: ""); + return; + +parity_good: + nm_g_object_set_property_enum(G_OBJECT(setting), + key, + NM_TYPE_SETTING_SERIAL_PARITY, + parity, + &err); + +out_err: + if (!err) + return; + if (nm_keyfile_error_is_not_found(err)) { + /* ignore such errors. The key is not present. */ + return; + } + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid setting: %s"), + err->message); +} + +static void +team_config_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + const char * setting_name = nm_setting_get_name(setting); + gs_free char *conf = NULL; + gs_free_error GError *error = NULL; + + conf = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, key, NULL); + + g_object_set(G_OBJECT(setting), key, conf, NULL); + + if (conf && !nm_setting_verify(setting, NULL, &error)) { + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid team configuration: %s"), + error->message); + g_object_set(G_OBJECT(setting), key, NULL, NULL); + } +} + +static void +bridge_vlan_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + gs_unref_ptrarray GPtrArray *vlans = NULL; + gs_free char * value = NULL; + gs_free const char ** strv = NULL; + const char *const * iter; + GError * local = NULL; + NMBridgeVlan * vlan; + + value = nm_keyfile_plugin_kf_get_string(info->keyfile, nm_setting_get_name(setting), key, NULL); + if (!value || !value[0]) + return; + + vlans = g_ptr_array_new_with_free_func((GDestroyNotify) nm_bridge_vlan_unref); + + strv = nm_utils_escaped_tokens_split(value, ","); + if (strv) { + for (iter = strv; *iter; iter++) { + vlan = nm_bridge_vlan_from_str(*iter, &local); + if (!vlan) { + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + "invalid bridge VLAN: %s", + local->message); + g_clear_error(&local); + continue; + } + g_ptr_array_add(vlans, vlan); + } + } + + if (vlans->len > 0) + g_object_set(setting, key, vlans, NULL); +} + +static void +qdisc_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + const char * setting_name = nm_setting_get_name(setting); + gs_unref_ptrarray GPtrArray *qdiscs = NULL; + gs_strfreev char ** keys = NULL; + gsize n_keys = 0; + int i; + + keys = nm_keyfile_plugin_kf_get_keys(info->keyfile, setting_name, &n_keys, NULL); + if (n_keys == 0) + return; + + qdiscs = g_ptr_array_new_with_free_func((GDestroyNotify) nm_tc_qdisc_unref); + + for (i = 0; i < n_keys; i++) { + NMTCQdisc * qdisc; + const char * qdisc_parent; + gs_free char *qdisc_rest = NULL; + gs_free char *qdisc_str = NULL; + gs_free_error GError *err = NULL; + + if (!g_str_has_prefix(keys[i], "qdisc.")) + continue; + + qdisc_parent = keys[i] + sizeof("qdisc.") - 1; + qdisc_rest = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, keys[i], NULL); + qdisc_str = g_strdup_printf( + "%s%s %s", + _nm_utils_parse_tc_handle(qdisc_parent, NULL) != TC_H_UNSPEC ? "parent " : "", + qdisc_parent, + qdisc_rest); + + qdisc = nm_utils_tc_qdisc_from_str(qdisc_str, &err); + if (!qdisc) { + handle_warn(info, + keys[i], + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid qdisc: %s"), + err->message); + } else { + g_ptr_array_add(qdiscs, qdisc); + } + } + + if (qdiscs->len >= 1) + g_object_set(setting, key, qdiscs, NULL); +} + +static void +tfilter_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) +{ + const char * setting_name = nm_setting_get_name(setting); + gs_unref_ptrarray GPtrArray *tfilters = NULL; + gs_strfreev char ** keys = NULL; + gsize n_keys = 0; + int i; + + keys = nm_keyfile_plugin_kf_get_keys(info->keyfile, setting_name, &n_keys, NULL); + if (n_keys == 0) + return; + + tfilters = g_ptr_array_new_with_free_func((GDestroyNotify) nm_tc_tfilter_unref); + + for (i = 0; i < n_keys; i++) { + NMTCTfilter * tfilter; + const char * tfilter_parent; + gs_free char *tfilter_rest = NULL; + gs_free char *tfilter_str = NULL; + gs_free_error GError *err = NULL; + + if (!g_str_has_prefix(keys[i], "tfilter.")) + continue; + + tfilter_parent = keys[i] + sizeof("tfilter.") - 1; + tfilter_rest = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, keys[i], NULL); + tfilter_str = g_strdup_printf( + "%s%s %s", + _nm_utils_parse_tc_handle(tfilter_parent, NULL) != TC_H_UNSPEC ? "parent " : "", + tfilter_parent, + tfilter_rest); + + tfilter = nm_utils_tc_tfilter_from_str(tfilter_str, &err); + if (!tfilter) { + handle_warn(info, + keys[i], + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid tfilter: %s"), + err->message); + } else { + g_ptr_array_add(tfilters, tfilter); + } + } + + if (tfilters->len >= 1) + g_object_set(setting, key, tfilters, NULL); +} + +/*****************************************************************************/ + +/* Some setting properties also contain setting names, such as + * NMSettingConnection's 'type' property (which specifies the base type of the + * connection, eg ethernet or wifi) or the 802-11-wireless setting's + * 'security' property which specifies whether or not the AP requires + * encryption. This function handles translating those properties' values + * from the real setting name to the more-readable alias. + */ +static void +setting_alias_writer(KeyfileWriterInfo *info, + NMSetting * setting, + const char * key, + const GValue * value) +{ + const char *str, *alias; + + str = g_value_get_string(value); + alias = nm_keyfile_plugin_get_alias_for_setting_name(str); + nm_keyfile_plugin_kf_set_string(info->keyfile, nm_setting_get_name(setting), key, alias ?: str); +} + +static void +sriov_vfs_writer(KeyfileWriterInfo *info, NMSetting *setting, const char *key, const GValue *value) +{ + GPtrArray *vfs; + guint i; + + vfs = g_value_get_boxed(value); + if (!vfs) + return; + + for (i = 0; i < vfs->len; i++) { + const NMSriovVF *vf = vfs->pdata[i]; + gs_free char * kf_value = NULL; + char kf_key[32]; + + kf_value = nm_utils_sriov_vf_to_str(vf, TRUE, NULL); + if (!kf_value) + continue; + + nm_sprintf_buf(kf_key, "vf.%u", nm_sriov_vf_get_index(vf)); + + nm_keyfile_plugin_kf_set_string(info->keyfile, + nm_setting_get_name(setting), + kf_key, + kf_value); + } +} + +static void +write_array_of_uint(GKeyFile *file, NMSetting *setting, const char *key, const GValue *value) +{ + GArray *array; + + array = g_value_get_boxed(value); + + nm_assert(!array || g_array_get_element_size(array) == sizeof(guint)); + + if (!array || !array->len) + return; + + nm_keyfile_plugin_kf_set_integer_list_uint(file, + nm_setting_get_name(setting), + key, + (const guint *) array->data, + array->len); +} + +static void +dns_writer(KeyfileWriterInfo *info, NMSetting *setting, const char *key, const GValue *value) +{ + char **list; + + list = g_value_get_boxed(value); + if (list && list[0]) { + nm_keyfile_plugin_kf_set_string_list(info->keyfile, + nm_setting_get_name(setting), + key, + (const char **) list, + g_strv_length(list)); + } +} + +static void +ip6_addr_gen_mode_writer(KeyfileWriterInfo *info, + NMSetting * setting, + const char * key, + const GValue * value) +{ + NMSettingIP6ConfigAddrGenMode addr_gen_mode; + gs_free char * str = NULL; + + addr_gen_mode = (NMSettingIP6ConfigAddrGenMode) g_value_get_int(value); + str = nm_utils_enum_to_str(nm_setting_ip6_config_addr_gen_mode_get_type(), addr_gen_mode); + nm_keyfile_plugin_kf_set_string(info->keyfile, nm_setting_get_name(setting), key, str); +} + +static void +write_ip_values(GKeyFile * file, + const char *setting_name, + GPtrArray * array, + const char *gateway, + gboolean is_route) +{ + if (array->len > 0) { + nm_auto_str_buf NMStrBuf output = NM_STR_BUF_INIT(2 * INET_ADDRSTRLEN + 10, FALSE); + int addr_family; + guint i; + const char * addr; + const char * gw; + guint32 plen; + char key_name[64]; + char * key_name_idx; + + addr_family = + nm_streq(setting_name, NM_SETTING_IP4_CONFIG_SETTING_NAME) ? AF_INET : AF_INET6; + + strcpy(key_name, is_route ? "route" : "address"); + key_name_idx = key_name + strlen(key_name); + + for (i = 0; i < array->len; i++) { + gint64 metric = -1; + + if (is_route) { + NMIPRoute *route = array->pdata[i]; + + addr = nm_ip_route_get_dest(route); + plen = nm_ip_route_get_prefix(route); + gw = nm_ip_route_get_next_hop(route); + metric = nm_ip_route_get_metric(route); + } else { + NMIPAddress *address = array->pdata[i]; + + addr = nm_ip_address_get_address(address); + plen = nm_ip_address_get_prefix(address); + gw = (i == 0) ? gateway : NULL; + } + + nm_str_buf_set_size(&output, 0, FALSE, FALSE); + nm_str_buf_append_printf(&output, "%s/%u", addr, plen); + if (metric != -1 || gw) { + /* Older versions of the plugin do not support the form + * "a.b.c.d/plen,,metric", so, we always have to write the + * gateway, even if there isn't one. + * The current version supports reading of the above form. + */ + if (!gw) { + if (addr_family == AF_INET) + gw = "0.0.0.0"; + else + gw = "::"; + } + + nm_str_buf_append_c(&output, ','); + nm_str_buf_append(&output, gw); + if (is_route && metric != -1) + nm_str_buf_append_printf(&output, ",%lu", (unsigned long) metric); + } + + sprintf(key_name_idx, "%u", i + 1); + nm_keyfile_plugin_kf_set_string(file, + setting_name, + key_name, + nm_str_buf_get_str(&output)); + + if (is_route) { + gs_free char *attributes = NULL; + + attributes = + nm_utils_format_variant_attributes(_nm_ip_route_get_attributes(array->pdata[i]), + ',', + '='); + if (attributes) { + g_strlcat(key_name, "_options", sizeof(key_name)); + nm_keyfile_plugin_kf_set_string(file, setting_name, key_name, attributes); + } + } + } + } +} + +static void +addr_writer(KeyfileWriterInfo *info, NMSetting *setting, const char *key, const GValue *value) +{ + GPtrArray * array; + const char *setting_name = nm_setting_get_name(setting); + const char *gateway = nm_setting_ip_config_get_gateway(NM_SETTING_IP_CONFIG(setting)); + + array = (GPtrArray *) g_value_get_boxed(value); + if (array && array->len) + write_ip_values(info->keyfile, setting_name, array, gateway, FALSE); +} + +static void +route_writer(KeyfileWriterInfo *info, NMSetting *setting, const char *key, const GValue *value) +{ + GPtrArray * array; + const char *setting_name = nm_setting_get_name(setting); + + array = (GPtrArray *) g_value_get_boxed(value); + if (array && array->len) + write_ip_values(info->keyfile, setting_name, array, NULL, TRUE); +} + +static void +bridge_vlan_writer(KeyfileWriterInfo *info, + NMSetting * setting, + const char * key, + const GValue * value) +{ + GPtrArray *vlans; + + vlans = g_value_get_boxed(value); + if (vlans && vlans->len > 0) { + const guint string_initial_size = vlans->len * 10u; + nm_auto_str_buf NMStrBuf string = NM_STR_BUF_INIT(string_initial_size, FALSE); + guint i; + + for (i = 0; i < vlans->len; i++) { + gs_free char *vlan_str = NULL; + + vlan_str = nm_bridge_vlan_to_str(vlans->pdata[i], NULL); + if (i > 0) + nm_str_buf_append_c(&string, ','); + nm_utils_escaped_tokens_escape_strbuf_assert(vlan_str, ",", &string); + } + + nm_keyfile_plugin_kf_set_string(info->keyfile, + nm_setting_get_name(setting), + "vlans", + nm_str_buf_get_str(&string)); + } +} + +static void +wired_s390_options_parser_full(KeyfileReaderInfo * info, + const NMMetaSettingInfo * setting_info, + const NMSettInfoProperty *property_info, + const ParseInfoProperty * pip, + NMSetting * setting) +{ + NMSettingWired * s_wired = NM_SETTING_WIRED(setting); + gs_strfreev char **keys = NULL; + gsize n_keys; + gsize i; + + keys = nm_keyfile_plugin_kf_get_keys(info->keyfile, + ETHERNET_S390_OPTIONS_GROUP_NAME, + &n_keys, + NULL); + for (i = 0; i < n_keys; i++) { + gs_free char *value = NULL; + gs_free char *key_to_free = NULL; + + value = nm_keyfile_plugin_kf_get_string(info->keyfile, + ETHERNET_S390_OPTIONS_GROUP_NAME, + keys[i], + NULL); + if (!value) + continue; + + nm_setting_wired_add_s390_option(s_wired, + nm_keyfile_key_decode(keys[i], &key_to_free), + value); + } +} + +static void +wired_s390_options_writer_full(KeyfileWriterInfo * info, + const NMMetaSettingInfo * setting_info, + const NMSettInfoProperty *property_info, + const ParseInfoProperty * pip, + NMSetting * setting) +{ + NMSettingWired *s_wired = NM_SETTING_WIRED(setting); + guint i, n; + + n = nm_setting_wired_get_num_s390_options(s_wired); + for (i = 0; i < n; i++) { + gs_free char *key_to_free = NULL; + const char * opt_key; + const char * opt_val; + + nm_setting_wired_get_s390_option(s_wired, i, &opt_key, &opt_val); + nm_keyfile_plugin_kf_set_string(info->keyfile, + ETHERNET_S390_OPTIONS_GROUP_NAME, + nm_keyfile_key_encode(opt_key, &key_to_free), + opt_val); + } +} + +static void +ip_routing_rule_writer_full(KeyfileWriterInfo * info, + const NMMetaSettingInfo * setting_info, + const NMSettInfoProperty *property_info, + const ParseInfoProperty * pip, + NMSetting * setting) +{ + const char * setting_name = nm_setting_get_name(setting); + NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG(setting); + guint i, j, n; + char key_name_full[100] = "routing-rule"; + char * key_name_num = &key_name_full[NM_STRLEN("routing-rule")]; + + n = nm_setting_ip_config_get_num_routing_rules(s_ip); + j = 0; + for (i = 0; i < n; i++) { + NMIPRoutingRule *rule = nm_setting_ip_config_get_routing_rule(s_ip, i); + gs_free char * str = NULL; + + str = + nm_ip_routing_rule_to_string(rule, NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE, NULL, NULL); + if (!str) + continue; + + sprintf(key_name_num, "%u", ++j); + nm_keyfile_plugin_kf_set_string(info->keyfile, setting_name, key_name_full, str); + } +} + +static void +qdisc_writer(KeyfileWriterInfo *info, NMSetting *setting, const char *key, const GValue *value) +{ + nm_auto_free_gstring GString *key_name = NULL; + nm_auto_free_gstring GString *value_str = NULL; + GPtrArray * array; + guint i; + + array = g_value_get_boxed(value); + if (!array || !array->len) + return; + + for (i = 0; i < array->len; i++) { + NMTCQdisc *qdisc = array->pdata[i]; + + nm_gstring_prepare(&key_name); + nm_gstring_prepare(&value_str); + + g_string_append(key_name, "qdisc."); + _nm_utils_string_append_tc_parent(key_name, NULL, nm_tc_qdisc_get_parent(qdisc)); + _nm_utils_string_append_tc_qdisc_rest(value_str, qdisc); + + nm_keyfile_plugin_kf_set_string(info->keyfile, + NM_SETTING_TC_CONFIG_SETTING_NAME, + key_name->str, + value_str->str); + } +} + +static void +tfilter_writer(KeyfileWriterInfo *info, NMSetting *setting, const char *key, const GValue *value) +{ + nm_auto_free_gstring GString *key_name = NULL; + nm_auto_free_gstring GString *value_str = NULL; + GPtrArray * array; + guint i; + + array = g_value_get_boxed(value); + if (!array || !array->len) + return; + + for (i = 0; i < array->len; i++) { + NMTCTfilter *tfilter = array->pdata[i]; + + nm_gstring_prepare(&key_name); + nm_gstring_prepare(&value_str); + + g_string_append(key_name, "tfilter."); + _nm_utils_string_append_tc_parent(key_name, NULL, nm_tc_tfilter_get_parent(tfilter)); + _nm_utils_string_append_tc_tfilter_rest(value_str, tfilter, NULL); + + nm_keyfile_plugin_kf_set_string(info->keyfile, + NM_SETTING_TC_CONFIG_SETTING_NAME, + key_name->str, + value_str->str); + } +} + +static void +_writer_full_ovs_external_ids_data(KeyfileWriterInfo * info, + const NMMetaSettingInfo * setting_info, + const NMSettInfoProperty *property_info, + const ParseInfoProperty * pip, + NMSetting * setting) +{ + GHashTable * hash; + NMUtilsNamedValue data_static[300u / sizeof(NMUtilsNamedValue)]; + gs_free NMUtilsNamedValue *data_free = NULL; + const NMUtilsNamedValue * data; + guint data_len; + char full_key_static[NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX) + 300u]; + guint i; + + nm_assert(NM_IS_SETTING_OVS_EXTERNAL_IDS(setting)); + nm_assert(nm_streq(property_info->name, NM_SETTING_OVS_EXTERNAL_IDS_DATA)); + + hash = _nm_setting_ovs_external_ids_get_data(NM_SETTING_OVS_EXTERNAL_IDS(setting)); + if (!hash) + return; + + data = nm_utils_named_values_from_strdict(hash, &data_len, data_static, &data_free); + if (data_len == 0) + return; + + memcpy(full_key_static, OVS_EXTERNAL_IDS_DATA_PREFIX, NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX)); + + for (i = 0; i < data_len; i++) { + const char * key = data[i].name; + const char * val = data[i].value_str; + gs_free char *escaped_key_to_free = NULL; + const char * escaped_key; + gsize len; + gs_free char *full_key_free = NULL; + char * full_key = full_key_static; + + escaped_key = nm_keyfile_key_encode(key, &escaped_key_to_free); + + len = strlen(escaped_key) + 1u; + if (len >= G_N_ELEMENTS(full_key_static) - NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX)) { + full_key_free = g_new(char, NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX) + len); + full_key = full_key_free; + memcpy(full_key, OVS_EXTERNAL_IDS_DATA_PREFIX, NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX)); + } + memcpy(&full_key[NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX)], escaped_key, len); + + nm_keyfile_plugin_kf_set_string(info->keyfile, + NM_SETTING_OVS_EXTERNAL_IDS_SETTING_NAME, + full_key, + val); + } +} + +static void +write_hash_of_string(GKeyFile *file, NMSetting *setting, const char *key, const GValue *value) +{ + GHashTable * hash; + const char * group_name = nm_setting_get_name(setting); + gboolean vpn_secrets = FALSE; + gs_free const char **keys = NULL; + guint i, l; + + nm_assert((NM_IS_SETTING_VPN(setting) && nm_streq(key, NM_SETTING_VPN_DATA)) + || (NM_IS_SETTING_VPN(setting) && nm_streq(key, NM_SETTING_VPN_SECRETS)) + || (NM_IS_SETTING_BOND(setting) && nm_streq(key, NM_SETTING_BOND_OPTIONS)) + || (NM_IS_SETTING_USER(setting) && nm_streq(key, NM_SETTING_USER_DATA))); + + /* Write VPN secrets out to a different group to keep them separate */ + if (NM_IS_SETTING_VPN(setting) && nm_streq(key, NM_SETTING_VPN_SECRETS)) { + group_name = NM_KEYFILE_GROUP_VPN_SECRETS; + vpn_secrets = TRUE; + } + + hash = g_value_get_boxed(value); + + keys = nm_utils_strdict_get_keys(hash, TRUE, &l); + for (i = 0; i < l; i++) { + gs_free char *to_free = NULL; + const char * property, *data; + + property = keys[i]; + + /* Handle VPN secrets specially; they are nested in the property's hash; + * we don't want to write them if the secret is not saved, not required, + * or owned by a user's secret agent. + */ + if (vpn_secrets) { + NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE; + + if (!nm_setting_get_secret_flags(setting, property, &secret_flags, NULL)) + nm_assert_not_reached(); + if (!_secret_flags_persist_secret(secret_flags)) + continue; + } + + data = g_hash_table_lookup(hash, property); + nm_keyfile_plugin_kf_set_string(file, + group_name, + nm_keyfile_key_encode(property, &to_free), + data); + } +} + +static void +ssid_writer(KeyfileWriterInfo *info, NMSetting *setting, const char *key, const GValue *value) +{ + GBytes * bytes; + const guint8 *ssid_data; + gsize ssid_len; + const char * setting_name = nm_setting_get_name(setting); + gboolean new_format = TRUE; + gsize semicolons = 0; + gsize i; + + g_return_if_fail(G_VALUE_HOLDS(value, G_TYPE_BYTES)); + + bytes = g_value_get_boxed(value); + if (!bytes) + return; + ssid_data = g_bytes_get_data(bytes, &ssid_len); + if (!ssid_data || !ssid_len) { + nm_keyfile_plugin_kf_set_string(info->keyfile, setting_name, key, ""); + return; + } + + /* Check whether each byte is printable. If not, we have to use an + * integer list, otherwise we can just use a string. + */ + for (i = 0; i < ssid_len; i++) { + const char c = ssid_data[i]; + + if (!g_ascii_isprint(c)) { + new_format = FALSE; + break; + } + if (c == ';') + semicolons++; + } + + if (new_format) { + gs_free char *ssid = NULL; + + if (semicolons == 0) + ssid = g_strndup((char *) ssid_data, ssid_len); + else { + /* Escape semicolons with backslashes to make strings + * containing ';', such as '16;17;' unambiguous */ + gsize j = 0; + + ssid = g_malloc(ssid_len + semicolons + 1); + for (i = 0; i < ssid_len; i++) { + if (ssid_data[i] == ';') + ssid[j++] = '\\'; + ssid[j++] = ssid_data[i]; + } + ssid[j] = '\0'; + } + nm_keyfile_plugin_kf_set_string(info->keyfile, setting_name, key, ssid); + } else + nm_keyfile_plugin_kf_set_integer_list_uint8(info->keyfile, + setting_name, + key, + ssid_data, + ssid_len); +} + +static void +password_raw_writer(KeyfileWriterInfo *info, + NMSetting * setting, + const char * key, + const GValue * value) +{ + const char * setting_name = nm_setting_get_name(setting); + GBytes * array; + gsize len; + const guint8 *data; + + g_return_if_fail(G_VALUE_HOLDS(value, G_TYPE_BYTES)); + + array = (GBytes *) g_value_get_boxed(value); + if (!array) + return; + data = g_bytes_get_data(array, &len); + if (!data) + len = 0; + nm_keyfile_plugin_kf_set_integer_list_uint8(info->keyfile, setting_name, key, data, len); +} + +/*****************************************************************************/ + +static void +cert_writer_default(NMConnection * connection, + GKeyFile * file, + NMSetting8021x * setting, + const char * setting_name, + const NMSetting8021xSchemeVtable *vtable) +{ + NMSetting8021xCKScheme scheme; + + scheme = vtable->scheme_func(setting); + if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) { + gs_free char *path_free = NULL; + gs_free char *base_dir = NULL; + gs_free char *tmp = NULL; + const char * path; + + path = vtable->path_func(setting); + g_assert(path); + + /* If the path is relative, make it an absolute path. + * Relative paths make a keyfile not easily usable in another + * context. */ + if (path[0] && path[0] != '/') { + base_dir = g_get_current_dir(); + path_free = g_strconcat(base_dir, "/", path, NULL); + path = path_free; + } else + base_dir = g_path_get_dirname(path); + + /* path cannot start with "file://" or "data:;base64,", because it is an absolute path. + * Still, make sure that a prefix-less path will be recognized. This can happen + * for example if the path is longer then 500 chars. */ + tmp = nm_keyfile_detect_unqualified_path_scheme(base_dir, path, -1, FALSE, NULL); + if (tmp) + nm_clear_g_free(&tmp); + else { + tmp = g_strconcat(NM_KEYFILE_CERT_SCHEME_PREFIX_PATH, path, NULL); + path = tmp; + } + + /* Path contains at least a '/', hence it cannot be recognized as the old + * binary format consisting of a list of integers. */ + + nm_keyfile_plugin_kf_set_string(file, setting_name, vtable->setting_key, path); + } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) { + GBytes * blob; + const guint8 *blob_data; + gsize blob_len; + gs_free char *blob_base64 = NULL; + gs_free char *val = NULL; + + blob = vtable->blob_func(setting); + g_assert(blob); + blob_data = g_bytes_get_data(blob, &blob_len); + + blob_base64 = g_base64_encode(blob_data, blob_len); + val = g_strconcat(NM_KEYFILE_CERT_SCHEME_PREFIX_BLOB, blob_base64, NULL); + + nm_keyfile_plugin_kf_set_string(file, setting_name, vtable->setting_key, val); + } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11) { + nm_keyfile_plugin_kf_set_string(file, + setting_name, + vtable->setting_key, + vtable->uri_func(setting)); + } else { + /* scheme_func() returns UNKNOWN in all other cases. The only valid case + * where a scheme is allowed to be UNKNOWN, is unsetting the value. In this + * case, we don't expect the writer to be called, because the default value + * will not be serialized. + * The only other reason for the scheme to be UNKNOWN is an invalid cert. + * But our connection verifies, so that cannot happen either. */ + g_return_if_reached(); + } +} + +static void +cert_writer(KeyfileWriterInfo *info, NMSetting *setting, const char *key, const GValue *value) +{ + const NMSetting8021xSchemeVtable *vtable = NULL; + const char * setting_name; + guint i; + + for (i = 0; nm_setting_8021x_scheme_vtable[i].setting_key; i++) { + if (nm_streq0(nm_setting_8021x_scheme_vtable[i].setting_key, key)) { + vtable = &nm_setting_8021x_scheme_vtable[i]; + break; + } + } + if (!vtable) + g_return_if_reached(); + + setting_name = nm_setting_get_name(NM_SETTING(setting)); + + if (info->write_handler) { + NMKeyfileHandlerData handler_data; + + _key_file_handler_data_init_write(&handler_data, + NM_KEYFILE_HANDLER_TYPE_WRITE_CERT, + info, + setting_name, + vtable->setting_key, + setting, + key); + handler_data.write_cert = (NMKeyfileHandlerDataWriteCert){ + .vtable = vtable, + }; + + if (info->write_handler(info->connection, + info->keyfile, + NM_KEYFILE_HANDLER_TYPE_WRITE_CERT, + &handler_data, + info->user_data)) + return; + if (info->error) + return; + } + + cert_writer_default(info->connection, + info->keyfile, + NM_SETTING_802_1X(setting), + setting_name, + vtable); +} + +/*****************************************************************************/ + +struct _ParseInfoProperty { + const char *property_name; + union { + void (*parser)(KeyfileReaderInfo *info, NMSetting *setting, const char *key); + void (*parser_full)(KeyfileReaderInfo * info, + const NMMetaSettingInfo * setting_info, + const NMSettInfoProperty *property_info, + const ParseInfoProperty * pip, + NMSetting * setting); + }; + union { + void (*writer)(KeyfileWriterInfo *info, + NMSetting * setting, + const char * key, + const GValue * value); + void (*writer_full)(KeyfileWriterInfo * info, + const NMMetaSettingInfo * setting_info, + const NMSettInfoProperty *property_info, + const ParseInfoProperty * pip, + NMSetting * setting); + }; + bool parser_skip; + bool parser_no_check_key : 1; + bool writer_skip : 1; + bool has_writer_full : 1; + bool has_parser_full : 1; + + /* usually, we skip to write values that have their + * default value. By setting this flag to TRUE, also + * default values are written. */ + bool writer_persist_default : 1; +}; + +#define PARSE_INFO_PROPERTY(_property_name, ...) \ + (&((const ParseInfoProperty){.property_name = _property_name, __VA_ARGS__})) + +#define PARSE_INFO_PROPERTIES(...) \ + .properties = ((const ParseInfoProperty *const[]){ \ + __VA_ARGS__ NULL, \ + }) + +typedef struct { + const ParseInfoProperty *const *properties; +} ParseInfoSetting; + +#define PARSE_INFO_SETTING(setting_type, ...) \ + [setting_type] = (&((const ParseInfoSetting){__VA_ARGS__})) + +static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = { + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_WIRELESS, + PARSE_INFO_PROPERTIES( + PARSE_INFO_PROPERTY(NM_SETTING_WIRELESS_BSSID, .parser = mac_address_parser_ETHER, ), + PARSE_INFO_PROPERTY(NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, + .parser = mac_address_parser_ETHER_cloned, ), + PARSE_INFO_PROPERTY(NM_SETTING_WIRELESS_MAC_ADDRESS, + .parser = mac_address_parser_ETHER, ), + PARSE_INFO_PROPERTY(NM_SETTING_WIRELESS_SSID, + .parser = ssid_parser, + .writer = ssid_writer, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_802_1X, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_802_1X_CA_CERT, + .parser = cert_parser, + .writer = cert_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_802_1X_CLIENT_CERT, + .parser = cert_parser, + .writer = cert_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_802_1X_PASSWORD_RAW, + .parser = password_raw_parser, + .writer = password_raw_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_802_1X_PHASE2_CA_CERT, + .parser = cert_parser, + .writer = cert_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_802_1X_PHASE2_CLIENT_CERT, + .parser = cert_parser, + .writer = cert_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, + .parser = cert_parser, + .writer = cert_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_802_1X_PRIVATE_KEY, + .parser = cert_parser, + .writer = cert_writer, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_WIRED, + PARSE_INFO_PROPERTIES( + PARSE_INFO_PROPERTY(NM_SETTING_WIRED_CLONED_MAC_ADDRESS, + .parser = mac_address_parser_ETHER_cloned, ), + PARSE_INFO_PROPERTY(NM_SETTING_WIRED_MAC_ADDRESS, .parser = mac_address_parser_ETHER, ), + PARSE_INFO_PROPERTY(NM_SETTING_WIRED_S390_OPTIONS, + .parser_no_check_key = TRUE, + .parser_full = wired_s390_options_parser_full, + .writer_full = wired_s390_options_writer_full, + .has_parser_full = TRUE, + .has_writer_full = TRUE, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_BLUETOOTH, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_BLUETOOTH_BDADDR, + .parser = mac_address_parser_ETHER, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_BOND, + PARSE_INFO_PROPERTIES( + PARSE_INFO_PROPERTY(NM_SETTING_BOND_OPTIONS, .parser_no_check_key = TRUE, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_BRIDGE, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_BRIDGE_MAC_ADDRESS, + .parser = mac_address_parser_ETHER, ), + PARSE_INFO_PROPERTY(NM_SETTING_BRIDGE_VLANS, + .parser_no_check_key = TRUE, + .parser = bridge_vlan_parser, + .writer = bridge_vlan_writer, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_BRIDGE_PORT, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_BRIDGE_PORT_VLANS, + .parser_no_check_key = TRUE, + .parser = bridge_vlan_parser, + .writer = bridge_vlan_writer, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_CONNECTION, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_CONNECTION_READ_ONLY, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_CONNECTION_TYPE, + .parser = setting_alias_parser, + .writer = setting_alias_writer, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_INFINIBAND, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_INFINIBAND_MAC_ADDRESS, + .parser = mac_address_parser_INFINIBAND, ), ), ), + PARSE_INFO_SETTING(NM_META_SETTING_TYPE_IP4_CONFIG, + PARSE_INFO_PROPERTIES( + PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ADDRESSES, + .parser_no_check_key = TRUE, + .parser = ip_address_or_route_parser, + .writer = addr_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS, + .parser_no_check_key = TRUE, + .parser = ip_dns_parser, + .writer = dns_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_GATEWAY, .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTES, + .parser_no_check_key = TRUE, + .parser = ip_address_or_route_parser, + .writer = route_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTING_RULES, + .parser_no_check_key = TRUE, + .parser_full = ip_routing_rule_parser_full, + .writer_full = ip_routing_rule_writer_full, + .has_parser_full = TRUE, + .has_writer_full = TRUE, ), ), ), + PARSE_INFO_SETTING(NM_META_SETTING_TYPE_IP6_CONFIG, + PARSE_INFO_PROPERTIES( + PARSE_INFO_PROPERTY(NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE, + .parser_no_check_key = TRUE, + .parser = ip6_addr_gen_mode_parser, + .writer = ip6_addr_gen_mode_writer, + .writer_persist_default = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ADDRESSES, + .parser_no_check_key = TRUE, + .parser = ip_address_or_route_parser, + .writer = addr_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_DNS, + .parser_no_check_key = TRUE, + .parser = ip_dns_parser, + .writer = dns_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_GATEWAY, .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTES, + .parser_no_check_key = TRUE, + .parser = ip_address_or_route_parser, + .writer = route_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_IP_CONFIG_ROUTING_RULES, + .parser_no_check_key = TRUE, + .parser_full = ip_routing_rule_parser_full, + .writer_full = ip_routing_rule_writer_full, + .has_parser_full = TRUE, + .has_writer_full = TRUE, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_OVS_EXTERNAL_IDS_DATA, + .parser_no_check_key = TRUE, + .parser_full = _parser_full_ovs_external_ids_data, + .writer_full = _writer_full_ovs_external_ids_data, + .has_parser_full = TRUE, + .has_writer_full = TRUE, ), ), ), + PARSE_INFO_SETTING(NM_META_SETTING_TYPE_SERIAL, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_SERIAL_PARITY, + .parser = parity_parser, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_SRIOV, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_SRIOV_VFS, + .parser_no_check_key = TRUE, + .parser = sriov_vfs_parser, + .writer = sriov_vfs_writer, ), ), ), + PARSE_INFO_SETTING(NM_META_SETTING_TYPE_TC_CONFIG, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_TC_CONFIG_QDISCS, + .parser_no_check_key = TRUE, + .parser = qdisc_parser, + .writer = qdisc_writer, ), + PARSE_INFO_PROPERTY(NM_SETTING_TC_CONFIG_TFILTERS, + .parser_no_check_key = TRUE, + .parser = tfilter_parser, + .writer = tfilter_writer, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_TEAM, + PARSE_INFO_PROPERTIES( + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_CONFIG, .parser = team_config_parser, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_LINK_WATCHERS, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_MCAST_REJOIN_COUNT, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_MCAST_REJOIN_INTERVAL, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_NOTIFY_PEERS_COUNT, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_NOTIFY_PEERS_INTERVAL, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_RUNNER, .parser_skip = TRUE, .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_RUNNER_ACTIVE, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_RUNNER_FAST_RATE, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_RUNNER_HWADDR_POLICY, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_RUNNER_MIN_PORTS, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_RUNNER_SYS_PRIO, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_RUNNER_TX_BALANCER, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_RUNNER_TX_HASH, + .parser_skip = TRUE, + .writer_skip = TRUE, ), ), ), + PARSE_INFO_SETTING(NM_META_SETTING_TYPE_TEAM_PORT, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_TEAM_CONFIG, + .parser = team_config_parser, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_PORT_LACP_KEY, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_PORT_LACP_PRIO, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_PORT_LINK_WATCHERS, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_PORT_PRIO, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_PORT_QUEUE_ID, + .parser_skip = TRUE, + .writer_skip = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_TEAM_PORT_STICKY, + .parser_skip = TRUE, + .writer_skip = TRUE, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_USER, + PARSE_INFO_PROPERTIES( + PARSE_INFO_PROPERTY(NM_SETTING_USER_DATA, .parser_no_check_key = TRUE, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_VLAN, + PARSE_INFO_PROPERTIES( + PARSE_INFO_PROPERTY(NM_SETTING_VLAN_FLAGS, .writer_persist_default = TRUE, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_VPN, + PARSE_INFO_PROPERTIES( + PARSE_INFO_PROPERTY(NM_SETTING_VPN_DATA, .parser_no_check_key = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_VPN_PERSISTENT, .parser_no_check_key = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_VPN_SECRETS, .parser_no_check_key = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_VPN_SERVICE_TYPE, .parser_no_check_key = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_VPN_TIMEOUT, .parser_no_check_key = TRUE, ), + PARSE_INFO_PROPERTY(NM_SETTING_VPN_USER_NAME, .parser_no_check_key = TRUE, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_WIMAX, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_WIMAX_MAC_ADDRESS, + .parser = mac_address_parser_ETHER, ), ), ), +}; + +static void +_parse_info_find(NMSetting * setting, + const char * property_name, + const NMMetaSettingInfo **out_setting_info, + const ParseInfoSetting ** out_parse_info_setting, + const ParseInfoProperty **out_parse_info_property) +{ + const NMMetaSettingInfo *setting_info; + const ParseInfoSetting * pis; + const ParseInfoProperty *pip; + +#if NM_MORE_ASSERTS > 10 + { + guint i, j; + static int asserted = FALSE; + + if (!asserted) { + for (i = 0; i < G_N_ELEMENTS(parse_infos); i++) { + pis = parse_infos[i]; + + if (!pis) + continue; + if (!pis->properties) + continue; + + g_assert(pis->properties[0]); + for (j = 0; pis->properties[j]; j++) { + const ParseInfoProperty *pip0; + const ParseInfoProperty *pipj = pis->properties[j]; + + g_assert(pipj->property_name); + if (j > 0 && (pip0 = pis->properties[j - 1]) + && strcmp(pip0->property_name, pipj->property_name) >= 0) { + g_error("Wrong order at index #%d.%d: \"%s.%s\" before \"%s.%s\"", + i, + j - 1, + nm_meta_setting_infos[i].setting_name, + pip0->property_name, + nm_meta_setting_infos[i].setting_name, + pipj->property_name); + } + } + } + asserted = TRUE; + } + } +#endif + + if (!NM_IS_SETTING(setting) || !(setting_info = NM_SETTING_GET_CLASS(setting)->setting_info)) { + /* handle invalid setting objects gracefully. */ + NM_SET_OUT(out_setting_info, NULL); + NM_SET_OUT(out_parse_info_setting, NULL); + NM_SET_OUT(out_parse_info_property, NULL); + return; + } + + nm_assert(setting_info->setting_name); + nm_assert(_NM_INT_NOT_NEGATIVE(setting_info->meta_type)); + nm_assert(setting_info->meta_type < G_N_ELEMENTS(parse_infos)); + + pis = parse_infos[setting_info->meta_type]; + + pip = NULL; + if (pis && property_name) { + gssize idx; + + G_STATIC_ASSERT_EXPR(G_STRUCT_OFFSET(ParseInfoProperty, property_name) == 0); + + idx = nm_utils_ptrarray_find_binary_search((gconstpointer *) pis->properties, + NM_PTRARRAY_LEN(pis->properties), + &property_name, + nm_strcmp_p_with_data, + NULL, + NULL, + NULL); + if (idx >= 0) + pip = pis->properties[idx]; + } + + NM_SET_OUT(out_setting_info, setting_info); + NM_SET_OUT(out_parse_info_setting, pis); + NM_SET_OUT(out_parse_info_property, pip); +} + +/*****************************************************************************/ + +static void +read_one_setting_value(KeyfileReaderInfo * info, + NMSetting * setting, + const NMSettInfoProperty *property_info) +{ + GKeyFile * keyfile = info->keyfile; + gs_free_error GError * err = NULL; + const NMMetaSettingInfo *setting_info; + const ParseInfoProperty *pip; + gs_free char * tmp_str = NULL; + const char * key; + GType type; + guint64 u64; + gint64 i64; + + nm_assert(!info->error); + nm_assert(!property_info->param_spec + || nm_streq(property_info->param_spec->name, property_info->name)); + + key = property_info->name; + + _parse_info_find(setting, key, &setting_info, NULL, &pip); + + nm_assert(setting_info); + + if (!pip) { + if (nm_streq(key, NM_SETTING_NAME)) + return; + if (!property_info->param_spec) + return; + if ((property_info->param_spec->flags & (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)) + != G_PARAM_WRITABLE) + return; + } else { + if (pip->parser_skip) + return; + if (pip->has_parser_full) { + pip->parser_full(info, setting_info, property_info, pip, setting); + return; + } + } + + nm_assert(property_info->param_spec); + nm_assert((property_info->param_spec->flags & (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)) + == G_PARAM_WRITABLE); + + /* Check for the exact key in the GKeyFile if required. Most setting + * properties map 1:1 to a key in the GKeyFile, but for those properties + * like IP addresses and routes where more than one value is actually + * encoded by the setting property, this won't be true. + */ + if ((!pip || !pip->parser_no_check_key) + && !nm_keyfile_plugin_kf_has_key(keyfile, setting_info->setting_name, key, &err)) { + /* Key doesn't exist or an error occurred, thus nothing to do. */ + if (err) { + if (!handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("error loading setting value: %s"), + err->message)) + return; + } + return; + } + + if (pip && pip->parser) { + pip->parser(info, setting, key); + return; + } + + type = G_PARAM_SPEC_VALUE_TYPE(property_info->param_spec); + + if (type == G_TYPE_STRING) { + gs_free char *str_val = NULL; + + str_val = nm_keyfile_plugin_kf_get_string(keyfile, setting_info->setting_name, key, &err); + if (!err) + nm_g_object_set_property_string_take(G_OBJECT(setting), + key, + g_steal_pointer(&str_val), + &err); + } else if (type == G_TYPE_UINT) { + tmp_str = nm_keyfile_plugin_kf_get_value(keyfile, setting_info->setting_name, key, &err); + if (!err) { + u64 = _nm_utils_ascii_str_to_uint64(tmp_str, 0, 0, G_MAXUINT, G_MAXUINT64); + if (u64 == G_MAXUINT64 && errno != 0) { + g_set_error_literal(&err, + G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_INVALID_VALUE, + _("value cannot be interpreted as integer")); + } else + nm_g_object_set_property_uint(G_OBJECT(setting), key, u64, &err); + } + } else if (type == G_TYPE_INT) { + tmp_str = nm_keyfile_plugin_kf_get_value(keyfile, setting_info->setting_name, key, &err); + if (!err) { + i64 = _nm_utils_ascii_str_to_int64(tmp_str, 0, G_MININT, G_MAXINT, G_MININT64); + if (i64 == G_MININT64 && errno != 0) { + g_set_error_literal(&err, + G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_INVALID_VALUE, + _("value cannot be interpreted as integer")); + } else + nm_g_object_set_property_int(G_OBJECT(setting), key, i64, &err); + } + } else if (type == G_TYPE_BOOLEAN) { + gboolean bool_val; + + bool_val = nm_keyfile_plugin_kf_get_boolean(keyfile, setting_info->setting_name, key, &err); + if (!err) + nm_g_object_set_property_boolean(G_OBJECT(setting), key, bool_val, &err); + } else if (type == G_TYPE_CHAR) { + tmp_str = nm_keyfile_plugin_kf_get_value(keyfile, setting_info->setting_name, key, &err); + if (!err) { + /* As documented by glib, G_TYPE_CHAR is really a (signed!) gint8. */ + i64 = _nm_utils_ascii_str_to_int64(tmp_str, 0, G_MININT8, G_MAXINT8, G_MININT64); + if (i64 == G_MININT64 && errno != 0) { + g_set_error_literal(&err, + G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_INVALID_VALUE, + _("value cannot be interpreted as integer")); + } else + nm_g_object_set_property_char(G_OBJECT(setting), key, i64, &err); + } + } else if (type == G_TYPE_UINT64) { + tmp_str = nm_keyfile_plugin_kf_get_value(keyfile, setting_info->setting_name, key, &err); + if (!err) { + u64 = _nm_utils_ascii_str_to_uint64(tmp_str, 0, 0, G_MAXUINT64, G_MAXUINT64); + if (u64 == G_MAXUINT64 && errno != 0) { + g_set_error_literal(&err, + G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_INVALID_VALUE, + _("value cannot be interpreted as integer")); + } else + nm_g_object_set_property_uint64(G_OBJECT(setting), key, u64, &err); + } + } else if (type == G_TYPE_INT64) { + tmp_str = nm_keyfile_plugin_kf_get_value(keyfile, setting_info->setting_name, key, &err); + if (!err) { + i64 = _nm_utils_ascii_str_to_int64(tmp_str, 0, G_MININT64, G_MAXINT64, G_MAXINT64); + if (i64 == G_MAXINT64 && errno != 0) { + g_set_error_literal(&err, + G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_INVALID_VALUE, + _("value cannot be interpreted as integer")); + } else + nm_g_object_set_property_int64(G_OBJECT(setting), key, i64, &err); + } + } else if (type == G_TYPE_BYTES) { + nm_auto_unref_bytearray GByteArray *array = NULL; + gs_unref_bytes GBytes *bytes = NULL; + gs_free guint *tmp = NULL; + gsize length; + int i; + gboolean already_warned = FALSE; + + tmp = nm_keyfile_plugin_kf_get_integer_list_uint(keyfile, + setting_info->setting_name, + key, + &length, + NULL); + + array = g_byte_array_sized_new(length); + for (i = 0; i < length; i++) { + const guint val = tmp[i]; + unsigned char v = (unsigned char) (val & 0xFF); + + if (val > 255u) { + if (!already_warned + && !handle_warn( + info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid byte element '%u' (not between 0 and 255 inclusive)"), + val)) + return; + already_warned = TRUE; + } else + g_byte_array_append(array, (const unsigned char *) &v, sizeof(v)); + } + + bytes = g_byte_array_free_to_bytes(g_steal_pointer(&array)); + g_object_set(setting, key, bytes, NULL); + } else if (type == G_TYPE_STRV) { + gs_strfreev char **sa = NULL; + gsize length; + + sa = nm_keyfile_plugin_kf_get_string_list(keyfile, + setting_info->setting_name, + key, + &length, + NULL); + g_object_set(setting, key, sa, NULL); + } else if (type == G_TYPE_HASH_TABLE) { + read_hash_of_string(info, keyfile, setting, key); + } else if (type == G_TYPE_ARRAY) { + read_array_of_uint(keyfile, setting, key); + } else if (G_TYPE_IS_FLAGS(type)) { + tmp_str = nm_keyfile_plugin_kf_get_value(keyfile, setting_info->setting_name, key, &err); + if (!err) { + u64 = _nm_utils_ascii_str_to_uint64(tmp_str, 0, 0, G_MAXUINT, G_MAXUINT64); + if (u64 == G_MAXUINT64 && errno != 0) { + g_set_error_literal(&err, + G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_INVALID_VALUE, + _("value cannot be interpreted as integer")); + } else + nm_g_object_set_property_flags(G_OBJECT(setting), key, type, u64, &err); + } + } else if (G_TYPE_IS_ENUM(type)) { + tmp_str = nm_keyfile_plugin_kf_get_value(keyfile, setting_info->setting_name, key, &err); + if (!err) { + i64 = _nm_utils_ascii_str_to_int64(tmp_str, 0, G_MININT, G_MAXINT, G_MAXINT64); + if (i64 == G_MAXINT64 && errno != 0) { + g_set_error_literal(&err, + G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_INVALID_VALUE, + _("value cannot be interpreted as integer")); + } else + nm_g_object_set_property_enum(G_OBJECT(setting), key, type, i64, &err); + } + } else + g_return_if_reached(); + + if (err) { + if (nm_keyfile_error_is_not_found(err)) { + /* ignore such errors. The key is not present. */ + } else { + handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid setting: %s"), + err->message); + } + } +} + +static void +_read_setting(KeyfileReaderInfo *info) +{ + const NMSettInfoSetting *sett_info; + gs_unref_object NMSetting *setting = NULL; + const char * alias; + GType type; + guint i; + + alias = nm_keyfile_plugin_get_setting_name_for_alias(info->group); + if (!alias) + alias = info->group; + + type = nm_setting_lookup_type(alias); + if (!type) { + handle_warn(info, + NULL, + NULL, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid setting name '%s'"), + info->group); + return; + } + + setting = g_object_new(type, NULL); + + info->setting = setting; + + sett_info = _nm_setting_class_get_sett_info(NM_SETTING_GET_CLASS(setting)); + + if (sett_info->detail.gendata_info) { + gs_free char **keys = NULL; + gsize k, n_keys; + + keys = g_key_file_get_keys(info->keyfile, info->group, &n_keys, NULL); + if (!keys) + n_keys = 0; + if (n_keys > 0) { + GHashTable *h = _nm_setting_option_hash(setting, TRUE); + + nm_utils_strv_sort(keys, n_keys); + for (k = 0; k < n_keys; k++) { + gs_free char *key = keys[k]; + gs_free_error GError *local = NULL; + const GVariantType * variant_type; + GVariant * variant; + + /* a GKeyFile can return duplicate keys, there is just no API to make sense + * of them. Skip them. */ + if (k + 1 < n_keys && nm_streq(key, keys[k + 1])) + continue; + + /* currently, the API is very simple. The setting class just returns + * the desired variant type, and keyfile reader will try to parse + * it accordingly. Note, that this does currently not allow, that + * a particular key can contain different variant types, nor is it + * very flexible in general. + * + * We add flexibility when we need it. Keep it simple for now. */ + variant_type = + sett_info->detail.gendata_info->get_variant_type(sett_info, key, &local); + if (!variant_type) { + if (!handle_warn(info, + key, + NULL, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid key '%s.%s'"), + info->group, + key)) + break; + continue; + } + + if (g_variant_type_equal(variant_type, G_VARIANT_TYPE_BOOLEAN)) { + gboolean v; + + v = g_key_file_get_boolean(info->keyfile, info->group, key, &local); + if (local) { + if (!handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' is not boolean"), + info->group, + key)) + break; + continue; + } + variant = g_variant_new_boolean(v); + } else if (g_variant_type_equal(variant_type, G_VARIANT_TYPE_UINT32)) { + guint64 v; + + v = g_key_file_get_uint64(info->keyfile, info->group, key, &local); + + if (local) { + if (!handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' is not a uint32"), + info->group, + key)) + break; + continue; + } + variant = g_variant_new_uint32((guint32) v); + } else { + nm_assert_not_reached(); + continue; + } + + g_hash_table_insert(h, g_steal_pointer(&key), g_variant_take_ref(variant)); + } + for (; k < n_keys; k++) + g_free(keys[k]); + } + } + + for (i = 0; i < sett_info->property_infos_len; i++) { + read_one_setting_value(info, setting, &sett_info->property_infos[i]); + if (info->error) + goto out; + } + +out: + info->setting = NULL; + if (!info->error) + nm_connection_add_setting(info->connection, g_steal_pointer(&setting)); +} + +static void +_read_setting_wireguard_peer(KeyfileReaderInfo *info) +{ + gs_unref_object NMSettingWireGuard *s_wg_new = NULL; + nm_auto_unref_wgpeer NMWireGuardPeer *peer = NULL; + gs_free_error GError *error = NULL; + NMSettingWireGuard * s_wg; + gs_free char * str = NULL; + const char * cstr = NULL; + const char * key; + gint64 i64; + gs_strfreev char ** sa = NULL; + gsize n_sa; + + peer = nm_wireguard_peer_new(); + + nm_assert(g_str_has_prefix(info->group, NM_KEYFILE_GROUPPREFIX_WIREGUARD_PEER)); + cstr = &info->group[NM_STRLEN(NM_KEYFILE_GROUPPREFIX_WIREGUARD_PEER)]; + if (!nm_utils_base64secret_normalize(cstr, NM_WIREGUARD_PUBLIC_KEY_LEN, &str) + || !nm_streq0(str, cstr)) { + /* the group name must be identical to the normalized(!) key, so that it + * is uniquely identified. */ + handle_warn(info, + NULL, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid peer public key in section '%s'"), + info->group); + return; + } + nm_wireguard_peer_set_public_key(peer, cstr, TRUE); + nm_clear_g_free(&str); + + key = NM_WIREGUARD_PEER_ATTR_PRESHARED_KEY; + str = nm_keyfile_plugin_kf_get_string(info->keyfile, info->group, key, NULL); + if (str) { + if (!nm_wireguard_peer_set_preshared_key(peer, str, FALSE)) { + if (!handle_warn(info, + key, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' is not a valid 256 bit key in base64 encoding"), + info->group, + key)) + return; + } + nm_clear_g_free(&str); + } + + key = NM_WIREGUARD_PEER_ATTR_PRESHARED_KEY_FLAGS; + i64 = nm_keyfile_plugin_kf_get_int64(info->keyfile, + info->group, + key, + 0, + 0, + NM_SETTING_SECRET_FLAG_ALL, + -1, + NULL); + if (errno != ENODATA) { + if (i64 == -1 || !_nm_setting_secret_flags_valid(i64)) { + if (!handle_warn(info, + key, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' is not a valid secret flag"), + info->group, + key)) + return; + } else + nm_wireguard_peer_set_preshared_key_flags(peer, i64); + } + + key = NM_WIREGUARD_PEER_ATTR_PERSISTENT_KEEPALIVE; + i64 = nm_keyfile_plugin_kf_get_int64(info->keyfile, + info->group, + key, + 0, + 0, + G_MAXUINT32, + -1, + NULL); + if (errno != ENODATA) { + if (i64 == -1) { + if (!handle_warn(info, + key, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' is not a integer in range 0 to 2^32"), + info->group, + key)) + return; + } else + nm_wireguard_peer_set_persistent_keepalive(peer, i64); + } + + key = NM_WIREGUARD_PEER_ATTR_ENDPOINT; + str = nm_keyfile_plugin_kf_get_string(info->keyfile, info->group, key, NULL); + if (str && str[0]) { + if (!nm_wireguard_peer_set_endpoint(peer, str, FALSE)) { + if (!handle_warn(info, + key, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' is not a valid endpoint"), + info->group, + key)) + return; + } + } + nm_clear_g_free(&str); + + key = NM_WIREGUARD_PEER_ATTR_ALLOWED_IPS; + sa = nm_keyfile_plugin_kf_get_string_list(info->keyfile, info->group, key, &n_sa, NULL); + if (n_sa > 0) { + gboolean has_error = FALSE; + gsize i; + + for (i = 0; i < n_sa; i++) { + if (!nm_utils_parse_inaddr_prefix_bin(AF_UNSPEC, sa[i], NULL, NULL, NULL)) { + has_error = TRUE; + continue; + } + nm_wireguard_peer_append_allowed_ip(peer, sa[i], TRUE); + } + if (has_error) { + if (!handle_warn(info, + key, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' has invalid allowed-ips"), + info->group, + key)) + return; + } + } + + if (info->error) + return; + + if (!nm_wireguard_peer_is_valid(peer, TRUE, TRUE, &error)) { + handle_warn(info, + NULL, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("peer '%s' is invalid: %s"), + info->group, + error->message); + return; + } + + s_wg = NM_SETTING_WIREGUARD( + nm_connection_get_setting(info->connection, NM_TYPE_SETTING_WIREGUARD)); + if (!s_wg) { + s_wg_new = NM_SETTING_WIREGUARD(nm_setting_wireguard_new()); + s_wg = s_wg_new; + } + + nm_setting_wireguard_append_peer(s_wg, peer); + + if (s_wg_new) { + nm_connection_add_setting(info->connection, NM_SETTING(g_steal_pointer(&s_wg_new))); + } +} + +static void +_read_setting_vpn_secrets(KeyfileReaderInfo *info) +{ + gs_strfreev char **keys = NULL; + gsize i, n_keys; + NMSettingVpn * s_vpn; + + s_vpn = nm_connection_get_setting_vpn(info->connection); + if (!s_vpn) { + /* if we don't also have a [vpn] section (which must be parsed earlier), + * we don't do anything. */ + nm_assert(!g_key_file_has_group(info->keyfile, "vpn")); + return; + } + + keys = + nm_keyfile_plugin_kf_get_keys(info->keyfile, NM_KEYFILE_GROUP_VPN_SECRETS, &n_keys, NULL); + for (i = 0; i < n_keys; i++) { + gs_free char *secret = NULL; + + secret = nm_keyfile_plugin_kf_get_string(info->keyfile, + NM_KEYFILE_GROUP_VPN_SECRETS, + keys[i], + NULL); + if (secret) + nm_setting_vpn_add_secret(s_vpn, keys[i], secret); + } +} + +gboolean +nm_keyfile_read_ensure_id(NMConnection *connection, const char *fallback_id) +{ + NMSettingConnection *s_con; + + g_return_val_if_fail(NM_IS_CONNECTION(connection), FALSE); + g_return_val_if_fail(fallback_id, FALSE); + + s_con = nm_connection_get_setting_connection(connection); + g_return_val_if_fail(NM_IS_SETTING_CONNECTION(s_con), FALSE); + + if (nm_setting_connection_get_id(s_con)) + return FALSE; + + g_object_set(s_con, NM_SETTING_CONNECTION_ID, fallback_id, NULL); + return TRUE; +} + +gboolean +nm_keyfile_read_ensure_uuid(NMConnection *connection, const char *fallback_uuid_seed) +{ + NMSettingConnection *s_con; + gs_free char * hashed_uuid = NULL; + + g_return_val_if_fail(NM_IS_CONNECTION(connection), FALSE); + g_return_val_if_fail(fallback_uuid_seed, FALSE); + + s_con = nm_connection_get_setting_connection(connection); + g_return_val_if_fail(NM_IS_SETTING_CONNECTION(s_con), FALSE); + + if (nm_setting_connection_get_uuid(s_con)) + return FALSE; + + hashed_uuid = _nm_utils_uuid_generate_from_strings("keyfile", fallback_uuid_seed, NULL); + g_object_set(s_con, NM_SETTING_CONNECTION_UUID, hashed_uuid, NULL); + return TRUE; +} + +/** + * nm_keyfile_read: + * @keyfile: the keyfile from which to create the connection + * @base_dir: when reading certificates from files with relative name, + * the relative path is made absolute using @base_dir. This must + * be an absolute path. + * @handler_flags: the #NMKeyfileHandlerFlags. + * @handler: (allow-none) (scope call): read handler + * @user_data: user data for read handler + * @error: (allow-none) (out): error + * + * Tries to create a NMConnection from a keyfile. The resulting keyfile is + * not normalized and might not even verify. + * + * Returns: (transfer full): on success, returns the created connection. + * + * Since: 1.30 + */ +NMConnection * +nm_keyfile_read(GKeyFile * keyfile, + const char * base_dir, + NMKeyfileHandlerFlags handler_flags, + NMKeyfileReadHandler handler, + void * user_data, + GError ** error) +{ + gs_unref_object NMConnection *connection = NULL; + NMSettingConnection * s_con; + gs_strfreev char ** groups = NULL; + gsize n_groups; + gsize i; + gboolean vpn_secrets = FALSE; + KeyfileReaderInfo info; + + g_return_val_if_fail(keyfile, NULL); + g_return_val_if_fail(!error || !*error, NULL); + g_return_val_if_fail(base_dir && base_dir[0] == '/', NULL); + g_return_val_if_fail(handler_flags == NM_KEYFILE_HANDLER_FLAGS_NONE, NULL); + + connection = nm_simple_connection_new(); + + info = (KeyfileReaderInfo){ + .connection = connection, + .keyfile = keyfile, + .base_dir = base_dir, + .read_handler = handler, + .user_data = user_data, + }; + + groups = g_key_file_get_groups(keyfile, &n_groups); + if (!groups) + n_groups = 0; + + for (i = 0; i < n_groups; i++) { + info.group = groups[i]; + + if (nm_streq(groups[i], NM_KEYFILE_GROUP_VPN_SECRETS)) { + /* Only read out secrets when needed */ + vpn_secrets = TRUE; + } else if (NM_STR_HAS_PREFIX(groups[i], NM_KEYFILE_GROUPPREFIX_WIREGUARD_PEER)) + _read_setting_wireguard_peer(&info); + else if (NM_IN_STRSET(groups[i], + NM_KEYFILE_GROUP_NMMETA, + ETHERNET_S390_OPTIONS_GROUP_NAME)) { + /* pass */ + } else + _read_setting(&info); + + info.group = NULL; + + if (info.error) + goto out_with_info_error; + } + + s_con = nm_connection_get_setting_connection(connection); + if (!s_con) { + s_con = NM_SETTING_CONNECTION(nm_setting_connection_new()); + nm_connection_add_setting(connection, NM_SETTING(s_con)); + } + + /* Make sure that we have 'interface-name' even if it was specified in the + * "wrong" (ie, deprecated) group. + */ + if (!nm_setting_connection_get_interface_name(s_con) + && nm_setting_connection_get_connection_type(s_con)) { + gs_free char *interface_name = NULL; + + interface_name = g_key_file_get_string(keyfile, + nm_setting_connection_get_connection_type(s_con), + "interface-name", + NULL); + if (interface_name) + g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, interface_name, NULL); + } + + if (vpn_secrets) { + info.group = NM_KEYFILE_GROUP_VPN_SECRETS; + _read_setting_vpn_secrets(&info); + info.group = NULL; + if (info.error) + goto out_with_info_error; + } + + return g_steal_pointer(&connection); + +out_with_info_error: + g_propagate_error(error, info.error); + return NULL; +} + +/*****************************************************************************/ + +static void +write_setting_value(KeyfileWriterInfo * info, + NMSetting * setting, + const NMSettInfoProperty *property_info) +{ + const NMMetaSettingInfo *setting_info; + const ParseInfoProperty *pip; + const char * key; + char numstr[64]; + GValue value; + GType type; + + nm_assert(!info->error); + nm_assert(!property_info->param_spec + || nm_streq(property_info->param_spec->name, property_info->name)); + + key = property_info->name; + + _parse_info_find(setting, key, &setting_info, NULL, &pip); + + if (!pip) { + if (!setting_info) { + /* the setting type is unknown. That is highly unexpected + * (and as this is currently only called from NetworkManager + * daemon, not possible). + * + * Still, handle it gracefully, because later keyfile writer will become + * public API of libnm, where @setting is (untrusted) user input. + * + * Gracefully here just means: ignore the setting. */ + return; + } + if (!property_info->param_spec) + return; + if (nm_streq(key, NM_SETTING_NAME)) + return; + } else { + if (pip->has_writer_full) { + pip->writer_full(info, setting_info, property_info, pip, setting); + return; + } + if (pip->writer_skip) + return; + } + + nm_assert(property_info->param_spec); + + /* Don't write secrets that are owned by user secret agents or aren't + * supposed to be saved. VPN secrets are handled specially though since + * the secret flags there are in a third-level hash in the 'secrets' + * property. + */ + if ((property_info->param_spec->flags & NM_SETTING_PARAM_SECRET) + && !NM_IS_SETTING_VPN(setting)) { + NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE; + + if (!nm_setting_get_secret_flags(setting, key, &secret_flags, NULL)) + g_return_if_reached(); + if (!_secret_flags_persist_secret(secret_flags)) + return; + } + + value = (GValue){0}; + + g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(property_info->param_spec)); + g_object_get_property(G_OBJECT(setting), property_info->param_spec->name, &value); + + if ((!pip || !pip->writer_persist_default) + && g_param_value_defaults(property_info->param_spec, &value)) { + nm_assert(!g_key_file_has_key(info->keyfile, setting_info->setting_name, key, NULL)); + goto out_unset_value; + } + + if (pip && pip->writer) { + pip->writer(info, setting, key, &value); + goto out_unset_value; + } + + type = G_VALUE_TYPE(&value); + if (type == G_TYPE_STRING) { + const char *str; + + str = g_value_get_string(&value); + if (str) + nm_keyfile_plugin_kf_set_string(info->keyfile, setting_info->setting_name, key, str); + } else if (type == G_TYPE_UINT) { + nm_sprintf_buf(numstr, "%u", g_value_get_uint(&value)); + nm_keyfile_plugin_kf_set_value(info->keyfile, setting_info->setting_name, key, numstr); + } else if (type == G_TYPE_INT) { + nm_sprintf_buf(numstr, "%d", g_value_get_int(&value)); + nm_keyfile_plugin_kf_set_value(info->keyfile, setting_info->setting_name, key, numstr); + } else if (type == G_TYPE_UINT64) { + nm_sprintf_buf(numstr, "%" G_GUINT64_FORMAT, g_value_get_uint64(&value)); + nm_keyfile_plugin_kf_set_value(info->keyfile, setting_info->setting_name, key, numstr); + } else if (type == G_TYPE_INT64) { + nm_sprintf_buf(numstr, "%" G_GINT64_FORMAT, g_value_get_int64(&value)); + nm_keyfile_plugin_kf_set_value(info->keyfile, setting_info->setting_name, key, numstr); + } else if (type == G_TYPE_BOOLEAN) { + nm_keyfile_plugin_kf_set_value(info->keyfile, + setting_info->setting_name, + key, + g_value_get_boolean(&value) ? "true" : "false"); + } else if (type == G_TYPE_CHAR) { + nm_sprintf_buf(numstr, "%d", (int) g_value_get_schar(&value)); + nm_keyfile_plugin_kf_set_value(info->keyfile, setting_info->setting_name, key, numstr); + } else if (type == G_TYPE_BYTES) { + GBytes * bytes; + const guint8 *data; + gsize len = 0; + + bytes = g_value_get_boxed(&value); + data = bytes ? g_bytes_get_data(bytes, &len) : NULL; + + if (data != NULL && len > 0) + nm_keyfile_plugin_kf_set_integer_list_uint8(info->keyfile, + setting_info->setting_name, + key, + data, + len); + } else if (type == G_TYPE_STRV) { + char **array; + + array = (char **) g_value_get_boxed(&value); + nm_keyfile_plugin_kf_set_string_list(info->keyfile, + setting_info->setting_name, + key, + (const char **const) array, + g_strv_length(array)); + } else if (type == G_TYPE_HASH_TABLE) { + write_hash_of_string(info->keyfile, setting, key, &value); + } else if (type == G_TYPE_ARRAY) { + write_array_of_uint(info->keyfile, setting, key, &value); + } else if (G_VALUE_HOLDS_FLAGS(&value)) { + nm_sprintf_buf(numstr, "%u", g_value_get_flags(&value)); + nm_keyfile_plugin_kf_set_value(info->keyfile, setting_info->setting_name, key, numstr); + } else if (G_VALUE_HOLDS_ENUM(&value)) { + nm_sprintf_buf(numstr, "%d", g_value_get_enum(&value)); + nm_keyfile_plugin_kf_set_value(info->keyfile, setting_info->setting_name, key, numstr); + } else + g_return_if_reached(); + +out_unset_value: + g_value_unset(&value); +} + +static void +_write_setting_wireguard(NMSetting *setting, KeyfileWriterInfo *info) +{ + NMSettingWireGuard *s_wg; + guint i_peer, n_peers; + + s_wg = NM_SETTING_WIREGUARD(setting); + + n_peers = nm_setting_wireguard_get_peers_len(s_wg); + for (i_peer = 0; i_peer < n_peers; i_peer++) { + NMWireGuardPeer * peer = nm_setting_wireguard_get_peer(s_wg, i_peer); + const char * public_key; + char group[NM_STRLEN(NM_KEYFILE_GROUPPREFIX_WIREGUARD_PEER) + 200]; + NMSettingSecretFlags secret_flags; + gboolean any_key = FALSE; + guint i_aip, n_aip; + const char * cstr; + guint32 u32; + + public_key = nm_wireguard_peer_get_public_key(peer); + if (!public_key || !public_key[0] + || !NM_STRCHAR_ALL(public_key, ch, nm_sd_utils_unbase64char(ch, TRUE) >= 0)) { + /* invalid peer. Skip it */ + continue; + } + + if (g_snprintf(group, + sizeof(group), + "%s%s", + NM_KEYFILE_GROUPPREFIX_WIREGUARD_PEER, + nm_wireguard_peer_get_public_key(peer)) + >= sizeof(group)) { + /* Too long. Not a valid public key. Skip the peer. */ + continue; + } + + cstr = nm_wireguard_peer_get_endpoint(peer); + if (cstr) { + g_key_file_set_string(info->keyfile, group, NM_WIREGUARD_PEER_ATTR_ENDPOINT, cstr); + any_key = TRUE; + } + + secret_flags = nm_wireguard_peer_get_preshared_key_flags(peer); + if (_secret_flags_persist_secret(secret_flags)) { + cstr = nm_wireguard_peer_get_preshared_key(peer); + if (cstr) { + g_key_file_set_string(info->keyfile, + group, + NM_WIREGUARD_PEER_ATTR_PRESHARED_KEY, + cstr); + any_key = TRUE; + } + } + + /* usually, we don't persist the secret-flags 0 (because they are the default). + * For WireGuard peers, the default secret-flags for preshared-key are 4 (not-required). + * So, in this case behave differently: a missing preshared-key-flag setting means + * "not-required". */ + if (secret_flags != NM_SETTING_SECRET_FLAG_NOT_REQUIRED) { + g_key_file_set_int64(info->keyfile, + group, + NM_WIREGUARD_PEER_ATTR_PRESHARED_KEY_FLAGS, + secret_flags); + any_key = TRUE; + } + + u32 = nm_wireguard_peer_get_persistent_keepalive(peer); + if (u32) { + g_key_file_set_uint64(info->keyfile, + group, + NM_WIREGUARD_PEER_ATTR_PERSISTENT_KEEPALIVE, + u32); + any_key = TRUE; + } + + n_aip = nm_wireguard_peer_get_allowed_ips_len(peer); + if (n_aip > 0) { + gs_free const char **strv = NULL; + + strv = g_new(const char *, ((gsize) n_aip) + 1); + for (i_aip = 0; i_aip < n_aip; i_aip++) + strv[i_aip] = nm_wireguard_peer_get_allowed_ip(peer, i_aip, NULL); + strv[n_aip] = NULL; + g_key_file_set_string_list(info->keyfile, + group, + NM_WIREGUARD_PEER_ATTR_ALLOWED_IPS, + strv, + n_aip); + any_key = TRUE; + } + + if (!any_key) { + /* we cannot omit all keys. At an empty endpoint. */ + g_key_file_set_string(info->keyfile, group, NM_WIREGUARD_PEER_ATTR_ENDPOINT, ""); + } + } +} + +/** + * nm_keyfile_write: + * @connection: the #NMConnection to persist to keyfile. + * @handler_flags: the #NMKeyfileHandlerFlags. + * @handler: (allow-none) (scope call): optional handler for events and + * to override the default behavior. + * @user_data: argument for @handler. + * @error: the #GError in case writing fails. + * + * @connection must verify as a valid profile according to + * nm_connection_verify(). + * + * Returns: (transfer full): a new #GKeyFile or %NULL on error. + * + * Since: 1.30 + */ +GKeyFile * +nm_keyfile_write(NMConnection * connection, + NMKeyfileHandlerFlags handler_flags, + NMKeyfileWriteHandler handler, + void * user_data, + GError ** error) +{ + nm_auto_unref_keyfile GKeyFile *keyfile = NULL; + GError * local = NULL; + KeyfileWriterInfo info; + gs_free NMSetting **settings = NULL; + guint n_settings = 0; + guint i; + guint j; + + g_return_val_if_fail(NM_IS_CONNECTION(connection), NULL); + g_return_val_if_fail(!error || !*error, NULL); + g_return_val_if_fail(handler_flags == NM_KEYFILE_HANDLER_FLAGS_NONE, NULL); + + /* Technically, we might not require that a profile is valid in + * order to serialize it. Like also nm_keyfile_read() does not + * ensure that the read profile validates. + * + * However, if the profile does not validate, then there might be + * unexpected edge cases when we try to serialize it. Edge cases + * that might result in dangerous crash. + * + * So, for now we require valid profiles. */ + if (!nm_connection_verify(connection, error ? &local : NULL)) { + if (error) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_FAILED, + _("the profile is not valid: %s"), + local->message); + g_error_free(local); + } else + nm_assert(!local); + return NULL; + } + + keyfile = g_key_file_new(); + + info = (KeyfileWriterInfo){ + .connection = connection, + .keyfile = keyfile, + .error = NULL, + .write_handler = handler, + .user_data = user_data, + }; + + settings = nm_connection_get_settings(connection, &n_settings); + for (i = 0; i < n_settings; i++) { + const NMSettInfoSetting *sett_info; + NMSetting * setting = settings[i]; + const char * setting_name; + const char * setting_alias; + + sett_info = _nm_setting_class_get_sett_info(NM_SETTING_GET_CLASS(setting)); + + setting_name = sett_info->setting_class->setting_info->setting_name; + + if (sett_info->detail.gendata_info) { + guint k, n_keys; + const char *const *keys; + + nm_assert(!nm_keyfile_plugin_get_alias_for_setting_name( + sett_info->setting_class->setting_info->setting_name)); + + n_keys = _nm_setting_option_get_all(setting, &keys, NULL); + + if (n_keys > 0) { + GHashTable *h = _nm_setting_option_hash(setting, FALSE); + + for (k = 0; k < n_keys; k++) { + const char *key = keys[k]; + GVariant * v; + + v = g_hash_table_lookup(h, key); + + if (g_variant_is_of_type(v, G_VARIANT_TYPE_BOOLEAN)) { + g_key_file_set_boolean(info.keyfile, + setting_name, + key, + g_variant_get_boolean(v)); + } else if (g_variant_is_of_type(v, G_VARIANT_TYPE_UINT32)) { + g_key_file_set_uint64(info.keyfile, + setting_name, + key, + (guint64) g_variant_get_uint32(v)); + } else { + /* BUG: The variant type is not implemented. Since the connection + * verifies, this can only mean we either wrongly didn't reject + * the connection as invalid, or we didn't properly implement the + * variant type. */ + nm_assert_not_reached(); + continue; + } + } + } + } + + for (j = 0; j < sett_info->property_infos_len; j++) { + const NMSettInfoProperty *property_info = + _nm_sett_info_property_info_get_sorted(sett_info, j); + + write_setting_value(&info, setting, property_info); + if (info.error) + goto out_with_info_error; + } + + setting_alias = nm_keyfile_plugin_get_alias_for_setting_name(setting_name); + if ((setting_alias && g_key_file_has_group(info.keyfile, setting_alias)) + || g_key_file_has_group(info.keyfile, setting_name)) { + /* we have a section for the setting. Nothing to do. */ + } else { + /* ensure the group is present. There is no API for that, so add and remove + * a dummy key. */ + g_key_file_set_value(info.keyfile, setting_alias ?: setting_name, ".X", "1"); + g_key_file_remove_key(info.keyfile, setting_alias ?: setting_name, ".X", NULL); + } + + if (NM_IS_SETTING_WIREGUARD(setting)) { + _write_setting_wireguard(setting, &info); + if (info.error) + goto out_with_info_error; + } + + nm_assert(!info.error); + } + + nm_assert(!info.error); + + return g_steal_pointer(&keyfile); + +out_with_info_error: + g_propagate_error(error, info.error); + return NULL; +} + +/*****************************************************************************/ + +static const char temp_letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + +/* + * Check '.[a-zA-Z0-9]{6}' file suffix used for temporary files by g_file_set_contents() (mkstemp()). + */ +static gboolean +check_mkstemp_suffix(const char *path) +{ + const char *ptr; + + nm_assert(path); + + /* Matches *.[a-zA-Z0-9]{6} suffix of mkstemp()'s temporary files */ + ptr = strrchr(path, '.'); + if (ptr && strspn(&ptr[1], temp_letters) == 6 && ptr[7] == '\0') + return TRUE; + return FALSE; +} + +#define SWP_TAG ".swp" +#define SWPX_TAG ".swpx" +#define PEM_TAG ".pem" +#define DER_TAG ".der" + +gboolean +nm_keyfile_utils_ignore_filename(const char *filename, gboolean require_extension) +{ + const char *base; + gsize l; + + /* ignore_filename() must mirror nm_keyfile_utils_create_filename() */ + + g_return_val_if_fail(filename, TRUE); + + base = strrchr(filename, '/'); + if (base) + base++; + else + base = filename; + + if (!base[0]) { + /* this check above with strrchr() also rejects "/some/path/with/trailing/slash/", + * but that is fine, because such a path would name a directory, and we are not + * interested in directories. */ + return TRUE; + } + + if (base[0] == '.') { + /* don't allow hidden files */ + return TRUE; + } + + if (require_extension) { + if (!NM_STR_HAS_SUFFIX_WITH_MORE(base, NM_KEYFILE_PATH_SUFFIX_NMCONNECTION)) + return TRUE; + return FALSE; + } + + l = strlen(base); + + /* Ignore backup files */ + if (base[l - 1] == '~') + return TRUE; + + /* Ignore temporary files + * + * This check is also important to ignore .nmload files (see + * %NM_KEYFILE_PATH_SUFFIX_NMMETA). */ + if (check_mkstemp_suffix(base)) + return TRUE; + + /* Ignore 802.1x certificates and keys */ + if (NM_STR_HAS_SUFFIX_ASCII_CASE_WITH_MORE(base, PEM_TAG) + || NM_STR_HAS_SUFFIX_ASCII_CASE_WITH_MORE(base, DER_TAG)) + return TRUE; + + return FALSE; +} + +char * +nm_keyfile_utils_create_filename(const char *name, gboolean with_extension) +{ + /* keyfile used to escape with '*', do not change that behavior. + * + * But for newly added escapings, use '_' instead. + * Also, @with_extension is new-style. */ + const char ESCAPE_CHAR = with_extension ? '_' : '*'; + const char ESCAPE_CHAR2 = '_'; + NMStrBuf str; + char * p; + gsize len; + gsize i; + + g_return_val_if_fail(name && name[0], NULL); + + nm_str_buf_init(&str, 0, FALSE); + + len = strlen(name); + + p = nm_str_buf_append_len0(&str, name, len); + + /* Convert '/' to ESCAPE_CHAR */ + for (i = 0; i < len; i++) { + if (p[i] == '/') + p[i] = ESCAPE_CHAR; + } + + /* nm_keyfile_utils_create_filename() must avoid anything that ignore_filename() would reject. + * We can escape here more aggressively then what we would read back. */ + if (p[0] == '.') + p[0] = ESCAPE_CHAR2; + if (p[str.len - 1] == '~') + p[str.len - 1] = ESCAPE_CHAR2; + + if (check_mkstemp_suffix(p) || NM_STR_HAS_SUFFIX_ASCII_CASE_WITH_MORE(p, PEM_TAG) + || NM_STR_HAS_SUFFIX_ASCII_CASE_WITH_MORE(p, DER_TAG)) + nm_str_buf_append_c(&str, ESCAPE_CHAR2); + + if (with_extension) + nm_str_buf_append(&str, NM_KEYFILE_PATH_SUFFIX_NMCONNECTION); + + p = nm_str_buf_finalize(&str, NULL); + + /* nm_keyfile_utils_create_filename() must mirror ignore_filename() */ + nm_assert(!strchr(p, '/')); + nm_assert(!nm_keyfile_utils_ignore_filename(p, with_extension)); + + return p; +} + +/*****************************************************************************/ + +/** + * nm_keyfile_handler_data_fail_with_error: + * @handler_data: the #NMKeyfileHandlerData + * @src: (transfer full): error to move into the return location + * + * Set the error for the handler. This lets the operation fail + * with the provided error. You may only set the error once. + * + * @src must be non-%NULL. + * + * Note that @src is no longer valid after this call. If you want + * to keep using the same GError*, you need to set it to %NULL + * after calling this function on it. + * + * Since: 1.30 + */ +void +nm_keyfile_handler_data_fail_with_error(NMKeyfileHandlerData *handler_data, GError *src) +{ + g_return_if_fail(handler_data); + g_return_if_fail(handler_data->p_error && !*handler_data->p_error); + g_return_if_fail(src); + + *handler_data->p_error = src; +} + +/** + * nm_keyfile_handler_data_get_context: + * @handler_data: the #NMKeyfileHandlerData for any event. + * @out_kf_group_name: (out) (allow-none) (transfer none): if the event is in the + * context of a keyfile group, the group name. + * @out_kf_key_name: (out) (allow-none) (transfer none): if the event is in the + * context of a keyfile value, the key name. + * @out_cur_setting: (out) (allow-none) (transfer none): if the event happens while + * handling a particular #NMSetting instance. + * @out_cur_property_name: (out) (allow-none) (transfer none): the property name if applicable. + * + * Get context information of the current event. This function can be called + * on all events, but the context information may be unset. + * + * Since: 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) +{ + g_return_if_fail(handler_data); + + NM_SET_OUT(out_kf_group_name, handler_data->kf_group_name); + NM_SET_OUT(out_kf_key_name, handler_data->kf_key); + NM_SET_OUT(out_cur_setting, handler_data->cur_setting); + NM_SET_OUT(out_cur_property_name, handler_data->cur_property); +} + +const char * +_nm_keyfile_handler_data_warn_get_message(const NMKeyfileHandlerData *handler_data) +{ + nm_assert(handler_data); + nm_assert(handler_data->type == NM_KEYFILE_HANDLER_TYPE_WARN); + + if (!handler_data->warn.message) { + /* we cast the const away. @handler_data is const w.r.t. visible mutations + * from POV of the user. Internally, we construct the message in + * a lazy manner. It's like a mutable field in C++. */ + NM_PRAGMA_WARNING_DISABLE("-Wformat-nonliteral") + ((NMKeyfileHandlerData *) handler_data)->warn.message = + g_strdup_vprintf(handler_data->warn.fmt, + ((NMKeyfileHandlerData *) handler_data)->warn.ap); + NM_PRAGMA_WARNING_REENABLE + } + return handler_data->warn.message; +} + +/** + * nm_keyfile_handler_data_warn_get: + * @handler_data: the #NMKeyfileHandlerData for a %NM_KEYFILE_HANDLER_TYPE_WARN + * event. + * @out_message: (out) (allow-none) (transfer none): the warning message. + * @out_severity: (out) (allow-none): the #NMKeyfileWarnSeverity warning severity. + * + * Since: 1.30 + */ +void +nm_keyfile_handler_data_warn_get(const NMKeyfileHandlerData *handler_data, + const char ** out_message, + NMKeyfileWarnSeverity * out_severity) +{ + g_return_if_fail(handler_data); + g_return_if_fail(handler_data->type == NM_KEYFILE_HANDLER_TYPE_WARN); + + NM_SET_OUT(out_message, _nm_keyfile_handler_data_warn_get_message(handler_data)); + NM_SET_OUT(out_severity, handler_data->warn.severity); +} diff --git a/libnm-core/nm-libnm-core-aux/nm-libnm-core-aux.c b/libnm-core/nm-libnm-core-aux/nm-libnm-core-aux.c index 651ab50..888dbac 100644 --- a/libnm-core/nm-libnm-core-aux/nm-libnm-core-aux.c +++ b/libnm-core/nm-libnm-core-aux/nm-libnm-core-aux.c @@ -3,7 +3,7 @@ * Copyright (C) 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-libnm-core-aux.h" diff --git a/libnm-core/nm-libnm-core-intern/nm-auth-subject.c b/libnm-core/nm-libnm-core-intern/nm-auth-subject.c index 0bee663..1866662 100644 --- a/libnm-core/nm-libnm-core-intern/nm-auth-subject.c +++ b/libnm-core/nm-libnm-core-intern/nm-auth-subject.c @@ -11,7 +11,7 @@ * makes requests, like process identifier and user UID. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-auth-subject.h" @@ -179,10 +179,10 @@ nm_auth_subject_get_unix_session_id(NMAuthSubject *subject) NMAuthSubject * nm_auth_subject_new_internal(void) { - return NM_AUTH_SUBJECT(g_object_new(NM_TYPE_AUTH_SUBJECT, - NM_AUTH_SUBJECT_SUBJECT_TYPE, - (int) NM_AUTH_SUBJECT_TYPE_INTERNAL, - NULL)); + return g_object_new(NM_TYPE_AUTH_SUBJECT, + NM_AUTH_SUBJECT_SUBJECT_TYPE, + (int) NM_AUTH_SUBJECT_TYPE_INTERNAL, + NULL); } /** @@ -195,12 +195,12 @@ nm_auth_subject_new_internal(void) NMAuthSubject * nm_auth_subject_new_unix_session(const char *session_id) { - return NM_AUTH_SUBJECT(g_object_new(NM_TYPE_AUTH_SUBJECT, - NM_AUTH_SUBJECT_SUBJECT_TYPE, - (int) NM_AUTH_SUBJECT_TYPE_UNIX_SESSION, - NM_AUTH_SUBJECT_UNIX_SESSION_ID, - session_id, - NULL)); + return g_object_new(NM_TYPE_AUTH_SUBJECT, + NM_AUTH_SUBJECT_SUBJECT_TYPE, + (int) NM_AUTH_SUBJECT_TYPE_UNIX_SESSION, + NM_AUTH_SUBJECT_UNIX_SESSION_ID, + session_id, + NULL); } /** @@ -213,16 +213,16 @@ nm_auth_subject_new_unix_session(const char *session_id) NMAuthSubject * nm_auth_subject_new_unix_process(const char *dbus_sender, gulong pid, gulong uid) { - return NM_AUTH_SUBJECT(g_object_new(NM_TYPE_AUTH_SUBJECT, - NM_AUTH_SUBJECT_SUBJECT_TYPE, - (int) NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS, - NM_AUTH_SUBJECT_UNIX_PROCESS_DBUS_SENDER, - dbus_sender, - NM_AUTH_SUBJECT_UNIX_PROCESS_PID, - pid, - NM_AUTH_SUBJECT_UNIX_PROCESS_UID, - uid, - NULL)); + return g_object_new(NM_TYPE_AUTH_SUBJECT, + NM_AUTH_SUBJECT_SUBJECT_TYPE, + (int) NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS, + NM_AUTH_SUBJECT_UNIX_PROCESS_DBUS_SENDER, + dbus_sender, + NM_AUTH_SUBJECT_UNIX_PROCESS_PID, + pid, + NM_AUTH_SUBJECT_UNIX_PROCESS_UID, + uid, + NULL); } /** diff --git a/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c b/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c index 92426d3..1ab0fcf 100644 --- a/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c +++ b/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-libnm-core-utils.h" diff --git a/libnm-core/nm-meta-setting-base-impl.c b/libnm-core/nm-meta-setting-base-impl.c new file mode 100644 index 0000000..523c0d5 --- /dev/null +++ b/libnm-core/nm-meta-setting-base-impl.c @@ -0,0 +1,641 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2017 - 2018 Red Hat, Inc. + */ + +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" + +#include "nm-meta-setting-base.h" + +#include "nm-setting-6lowpan.h" +#include "nm-setting-8021x.h" +#include "nm-setting-adsl.h" +#include "nm-setting-bluetooth.h" +#include "nm-setting-bond.h" +#include "nm-setting-bridge-port.h" +#include "nm-setting-bridge.h" +#include "nm-setting-cdma.h" +#include "nm-setting-connection.h" +#include "nm-setting-dcb.h" +#include "nm-setting-dummy.h" +#include "nm-setting-ethtool.h" +#include "nm-setting-generic.h" +#include "nm-setting-gsm.h" +#include "nm-setting-hostname.h" +#include "nm-setting-infiniband.h" +#include "nm-setting-ip-config.h" +#include "nm-setting-ip-tunnel.h" +#include "nm-setting-ip4-config.h" +#include "nm-setting-ip6-config.h" +#include "nm-setting-macsec.h" +#include "nm-setting-macvlan.h" +#include "nm-setting-match.h" +#include "nm-setting-olpc-mesh.h" +#include "nm-setting-ovs-bridge.h" +#include "nm-setting-ovs-interface.h" +#include "nm-setting-ovs-dpdk.h" +#include "nm-setting-ovs-external-ids.h" +#include "nm-setting-ovs-patch.h" +#include "nm-setting-ovs-port.h" +#include "nm-setting-ppp.h" +#include "nm-setting-pppoe.h" +#include "nm-setting-proxy.h" +#include "nm-setting-serial.h" +#include "nm-setting-tc-config.h" +#include "nm-setting-team-port.h" +#include "nm-setting-team.h" +#include "nm-setting-tun.h" +#include "nm-setting-user.h" +#include "nm-setting-veth.h" +#include "nm-setting-vlan.h" +#include "nm-setting-vpn.h" +#include "nm-setting-vrf.h" +#include "nm-setting-vxlan.h" +#include "nm-setting-wifi-p2p.h" +#include "nm-setting-wimax.h" +#include "nm-setting-wired.h" +#include "nm-setting-wireguard.h" +#include "nm-setting-wireless-security.h" +#include "nm-setting-wireless.h" +#include "nm-setting-wpan.h" + +/*****************************************************************************/ + +const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = { + +#define _D(_scheme_type, ...) [(_scheme_type)] = {.scheme_type = (_scheme_type), __VA_ARGS__} + + _D(NM_SETTING_802_1X_SCHEME_TYPE_UNKNOWN), + + _D(NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT, + .setting_key = NM_SETTING_802_1X_CA_CERT, + .scheme_func = nm_setting_802_1x_get_ca_cert_scheme, + .format_func = NULL, + .path_func = nm_setting_802_1x_get_ca_cert_path, + .blob_func = nm_setting_802_1x_get_ca_cert_blob, + .uri_func = nm_setting_802_1x_get_ca_cert_uri, + .passwd_func = nm_setting_802_1x_get_ca_cert_password, + .pwflag_func = nm_setting_802_1x_get_ca_cert_password_flags, + .set_cert_func = nm_setting_802_1x_set_ca_cert, + .file_suffix = "ca-cert", ), + + _D(NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CA_CERT, + .setting_key = NM_SETTING_802_1X_PHASE2_CA_CERT, + .scheme_func = nm_setting_802_1x_get_phase2_ca_cert_scheme, + .format_func = NULL, + .path_func = nm_setting_802_1x_get_phase2_ca_cert_path, + .blob_func = nm_setting_802_1x_get_phase2_ca_cert_blob, + .uri_func = nm_setting_802_1x_get_phase2_ca_cert_uri, + .passwd_func = nm_setting_802_1x_get_phase2_ca_cert_password, + .pwflag_func = nm_setting_802_1x_get_phase2_ca_cert_password_flags, + .set_cert_func = nm_setting_802_1x_set_phase2_ca_cert, + .file_suffix = "inner-ca-cert", ), + + _D(NM_SETTING_802_1X_SCHEME_TYPE_CLIENT_CERT, + .setting_key = NM_SETTING_802_1X_CLIENT_CERT, + .scheme_func = nm_setting_802_1x_get_client_cert_scheme, + .format_func = NULL, + .path_func = nm_setting_802_1x_get_client_cert_path, + .blob_func = nm_setting_802_1x_get_client_cert_blob, + .uri_func = nm_setting_802_1x_get_client_cert_uri, + .passwd_func = nm_setting_802_1x_get_client_cert_password, + .pwflag_func = nm_setting_802_1x_get_client_cert_password_flags, + .set_cert_func = nm_setting_802_1x_set_client_cert, + .file_suffix = "client-cert", ), + + _D(NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CLIENT_CERT, + .setting_key = NM_SETTING_802_1X_PHASE2_CLIENT_CERT, + .scheme_func = nm_setting_802_1x_get_phase2_client_cert_scheme, + .format_func = NULL, + .path_func = nm_setting_802_1x_get_phase2_client_cert_path, + .blob_func = nm_setting_802_1x_get_phase2_client_cert_blob, + .uri_func = nm_setting_802_1x_get_phase2_client_cert_uri, + .passwd_func = nm_setting_802_1x_get_phase2_client_cert_password, + .pwflag_func = nm_setting_802_1x_get_phase2_client_cert_password_flags, + .set_cert_func = nm_setting_802_1x_set_phase2_client_cert, + .file_suffix = "inner-client-cert", ), + + _D(NM_SETTING_802_1X_SCHEME_TYPE_PRIVATE_KEY, + .setting_key = NM_SETTING_802_1X_PRIVATE_KEY, + .scheme_func = nm_setting_802_1x_get_private_key_scheme, + .format_func = nm_setting_802_1x_get_private_key_format, + .path_func = nm_setting_802_1x_get_private_key_path, + .blob_func = nm_setting_802_1x_get_private_key_blob, + .uri_func = nm_setting_802_1x_get_private_key_uri, + .passwd_func = nm_setting_802_1x_get_private_key_password, + .pwflag_func = nm_setting_802_1x_get_private_key_password_flags, + .set_private_key_func = nm_setting_802_1x_set_private_key, + .file_suffix = "private-key", + .is_secret = TRUE, ), + + _D(NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_PRIVATE_KEY, + .setting_key = NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, + .scheme_func = nm_setting_802_1x_get_phase2_private_key_scheme, + .format_func = nm_setting_802_1x_get_phase2_private_key_format, + .path_func = nm_setting_802_1x_get_phase2_private_key_path, + .blob_func = nm_setting_802_1x_get_phase2_private_key_blob, + .uri_func = nm_setting_802_1x_get_phase2_private_key_uri, + .passwd_func = nm_setting_802_1x_get_phase2_private_key_password, + .pwflag_func = nm_setting_802_1x_get_phase2_private_key_password_flags, + .set_private_key_func = nm_setting_802_1x_set_phase2_private_key, + .file_suffix = "inner-private-key", + .is_secret = TRUE, ), + +#undef _D +}; + +/*****************************************************************************/ + +const NMMetaSettingInfo nm_meta_setting_infos[] = { + [NM_META_SETTING_TYPE_6LOWPAN] = + { + .meta_type = NM_META_SETTING_TYPE_6LOWPAN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_6LOWPAN_SETTING_NAME, + .get_setting_gtype = nm_setting_6lowpan_get_type, + }, + [NM_META_SETTING_TYPE_802_1X] = + { + .meta_type = NM_META_SETTING_TYPE_802_1X, + .setting_priority = NM_SETTING_PRIORITY_HW_AUX, + .setting_name = NM_SETTING_802_1X_SETTING_NAME, + .get_setting_gtype = nm_setting_802_1x_get_type, + }, + [NM_META_SETTING_TYPE_ADSL] = + { + .meta_type = NM_META_SETTING_TYPE_ADSL, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_ADSL_SETTING_NAME, + .get_setting_gtype = nm_setting_adsl_get_type, + }, + [NM_META_SETTING_TYPE_BLUETOOTH] = + { + .meta_type = NM_META_SETTING_TYPE_BLUETOOTH, + .setting_priority = NM_SETTING_PRIORITY_HW_NON_BASE, + .setting_name = NM_SETTING_BLUETOOTH_SETTING_NAME, + .get_setting_gtype = nm_setting_bluetooth_get_type, + }, + [NM_META_SETTING_TYPE_BOND] = + { + .meta_type = NM_META_SETTING_TYPE_BOND, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_BOND_SETTING_NAME, + .get_setting_gtype = nm_setting_bond_get_type, + }, + [NM_META_SETTING_TYPE_BRIDGE] = + { + .meta_type = NM_META_SETTING_TYPE_BRIDGE, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_BRIDGE_SETTING_NAME, + .get_setting_gtype = nm_setting_bridge_get_type, + }, + [NM_META_SETTING_TYPE_BRIDGE_PORT] = + { + .meta_type = NM_META_SETTING_TYPE_BRIDGE_PORT, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_BRIDGE_PORT_SETTING_NAME, + .get_setting_gtype = nm_setting_bridge_port_get_type, + }, + [NM_META_SETTING_TYPE_CDMA] = + { + .meta_type = NM_META_SETTING_TYPE_CDMA, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_CDMA_SETTING_NAME, + .get_setting_gtype = nm_setting_cdma_get_type, + }, + [NM_META_SETTING_TYPE_CONNECTION] = + { + .meta_type = NM_META_SETTING_TYPE_CONNECTION, + .setting_priority = NM_SETTING_PRIORITY_CONNECTION, + .setting_name = NM_SETTING_CONNECTION_SETTING_NAME, + .get_setting_gtype = nm_setting_connection_get_type, + }, + [NM_META_SETTING_TYPE_DCB] = + { + .meta_type = NM_META_SETTING_TYPE_DCB, + .setting_priority = NM_SETTING_PRIORITY_HW_AUX, + .setting_name = NM_SETTING_DCB_SETTING_NAME, + .get_setting_gtype = nm_setting_dcb_get_type, + }, + [NM_META_SETTING_TYPE_DUMMY] = + { + .meta_type = NM_META_SETTING_TYPE_DUMMY, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_DUMMY_SETTING_NAME, + .get_setting_gtype = nm_setting_dummy_get_type, + }, + [NM_META_SETTING_TYPE_ETHTOOL] = + { + .meta_type = NM_META_SETTING_TYPE_ETHTOOL, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_ETHTOOL_SETTING_NAME, + .get_setting_gtype = nm_setting_ethtool_get_type, + }, + [NM_META_SETTING_TYPE_GENERIC] = + { + .meta_type = NM_META_SETTING_TYPE_GENERIC, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_GENERIC_SETTING_NAME, + .get_setting_gtype = nm_setting_generic_get_type, + }, + [NM_META_SETTING_TYPE_GSM] = + { + .meta_type = NM_META_SETTING_TYPE_GSM, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_GSM_SETTING_NAME, + .get_setting_gtype = nm_setting_gsm_get_type, + }, + [NM_META_SETTING_TYPE_HOSTNAME] = + { + .meta_type = NM_META_SETTING_TYPE_HOSTNAME, + .setting_priority = NM_SETTING_PRIORITY_IP, + .setting_name = NM_SETTING_HOSTNAME_SETTING_NAME, + .get_setting_gtype = nm_setting_hostname_get_type, + }, + [NM_META_SETTING_TYPE_INFINIBAND] = + { + .meta_type = NM_META_SETTING_TYPE_INFINIBAND, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_INFINIBAND_SETTING_NAME, + .get_setting_gtype = nm_setting_infiniband_get_type, + }, + [NM_META_SETTING_TYPE_IP4_CONFIG] = + { + .meta_type = NM_META_SETTING_TYPE_IP4_CONFIG, + .setting_priority = NM_SETTING_PRIORITY_IP, + .setting_name = NM_SETTING_IP4_CONFIG_SETTING_NAME, + .get_setting_gtype = nm_setting_ip4_config_get_type, + }, + [NM_META_SETTING_TYPE_IP6_CONFIG] = + { + .meta_type = NM_META_SETTING_TYPE_IP6_CONFIG, + .setting_priority = NM_SETTING_PRIORITY_IP, + .setting_name = NM_SETTING_IP6_CONFIG_SETTING_NAME, + .get_setting_gtype = nm_setting_ip6_config_get_type, + }, + [NM_META_SETTING_TYPE_IP_TUNNEL] = + { + .meta_type = NM_META_SETTING_TYPE_IP_TUNNEL, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_IP_TUNNEL_SETTING_NAME, + .get_setting_gtype = nm_setting_ip_tunnel_get_type, + }, + [NM_META_SETTING_TYPE_MACSEC] = + { + .meta_type = NM_META_SETTING_TYPE_MACSEC, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_MACSEC_SETTING_NAME, + .get_setting_gtype = nm_setting_macsec_get_type, + }, + [NM_META_SETTING_TYPE_MACVLAN] = + { + .meta_type = NM_META_SETTING_TYPE_MACVLAN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_MACVLAN_SETTING_NAME, + .get_setting_gtype = nm_setting_macvlan_get_type, + }, + [NM_META_SETTING_TYPE_MATCH] = + { + .meta_type = NM_META_SETTING_TYPE_MATCH, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_MATCH_SETTING_NAME, + .get_setting_gtype = nm_setting_match_get_type, + }, + [NM_META_SETTING_TYPE_OLPC_MESH] = + { + .meta_type = NM_META_SETTING_TYPE_OLPC_MESH, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_OLPC_MESH_SETTING_NAME, + .get_setting_gtype = nm_setting_olpc_mesh_get_type, + }, + [NM_META_SETTING_TYPE_OVS_BRIDGE] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_BRIDGE, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_OVS_BRIDGE_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_bridge_get_type, + }, + [NM_META_SETTING_TYPE_OVS_DPDK] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_DPDK, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_OVS_DPDK_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_dpdk_get_type, + }, + [NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_OVS_EXTERNAL_IDS_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_external_ids_get_type, + }, + [NM_META_SETTING_TYPE_OVS_INTERFACE] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_INTERFACE, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_OVS_INTERFACE_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_interface_get_type, + }, + [NM_META_SETTING_TYPE_OVS_PATCH] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_PATCH, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_OVS_PATCH_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_patch_get_type, + }, + [NM_META_SETTING_TYPE_OVS_PORT] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_PORT, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_OVS_PORT_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_port_get_type, + }, + [NM_META_SETTING_TYPE_PPPOE] = + { + .meta_type = NM_META_SETTING_TYPE_PPPOE, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_PPPOE_SETTING_NAME, + .get_setting_gtype = nm_setting_pppoe_get_type, + }, + [NM_META_SETTING_TYPE_PPP] = + { + .meta_type = NM_META_SETTING_TYPE_PPP, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_PPP_SETTING_NAME, + .get_setting_gtype = nm_setting_ppp_get_type, + }, + [NM_META_SETTING_TYPE_PROXY] = + { + .meta_type = NM_META_SETTING_TYPE_PROXY, + .setting_priority = NM_SETTING_PRIORITY_IP, + .setting_name = NM_SETTING_PROXY_SETTING_NAME, + .get_setting_gtype = nm_setting_proxy_get_type, + }, + [NM_META_SETTING_TYPE_SERIAL] = + { + .meta_type = NM_META_SETTING_TYPE_SERIAL, + .setting_priority = NM_SETTING_PRIORITY_HW_AUX, + .setting_name = NM_SETTING_SERIAL_SETTING_NAME, + .get_setting_gtype = nm_setting_serial_get_type, + }, + [NM_META_SETTING_TYPE_SRIOV] = + { + .meta_type = NM_META_SETTING_TYPE_SRIOV, + .setting_priority = NM_SETTING_PRIORITY_HW_AUX, + .setting_name = NM_SETTING_SRIOV_SETTING_NAME, + .get_setting_gtype = nm_setting_sriov_get_type, + }, + [NM_META_SETTING_TYPE_TC_CONFIG] = + { + .meta_type = NM_META_SETTING_TYPE_TC_CONFIG, + .setting_priority = NM_SETTING_PRIORITY_IP, + .setting_name = NM_SETTING_TC_CONFIG_SETTING_NAME, + .get_setting_gtype = nm_setting_tc_config_get_type, + }, + [NM_META_SETTING_TYPE_TEAM] = + { + .meta_type = NM_META_SETTING_TYPE_TEAM, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_TEAM_SETTING_NAME, + .get_setting_gtype = nm_setting_team_get_type, + }, + [NM_META_SETTING_TYPE_TEAM_PORT] = + { + .meta_type = NM_META_SETTING_TYPE_TEAM_PORT, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_TEAM_PORT_SETTING_NAME, + .get_setting_gtype = nm_setting_team_port_get_type, + }, + [NM_META_SETTING_TYPE_TUN] = + { + .meta_type = NM_META_SETTING_TYPE_TUN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_TUN_SETTING_NAME, + .get_setting_gtype = nm_setting_tun_get_type, + }, + [NM_META_SETTING_TYPE_USER] = + { + .meta_type = NM_META_SETTING_TYPE_USER, + .setting_priority = NM_SETTING_PRIORITY_USER, + .setting_name = NM_SETTING_USER_SETTING_NAME, + .get_setting_gtype = nm_setting_user_get_type, + }, + [NM_META_SETTING_TYPE_VETH] = + { + .meta_type = NM_META_SETTING_TYPE_VETH, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_VETH_SETTING_NAME, + .get_setting_gtype = nm_setting_veth_get_type, + }, + [NM_META_SETTING_TYPE_VLAN] = + { + .meta_type = NM_META_SETTING_TYPE_VLAN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_VLAN_SETTING_NAME, + .get_setting_gtype = nm_setting_vlan_get_type, + }, + [NM_META_SETTING_TYPE_VPN] = + { + .meta_type = NM_META_SETTING_TYPE_VPN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_VPN_SETTING_NAME, + .get_setting_gtype = nm_setting_vpn_get_type, + }, + [NM_META_SETTING_TYPE_VRF] = + { + .meta_type = NM_META_SETTING_TYPE_VRF, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_VRF_SETTING_NAME, + .get_setting_gtype = nm_setting_vrf_get_type, + }, + [NM_META_SETTING_TYPE_VXLAN] = + { + .meta_type = NM_META_SETTING_TYPE_VXLAN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_VXLAN_SETTING_NAME, + .get_setting_gtype = nm_setting_vxlan_get_type, + }, + [NM_META_SETTING_TYPE_WIFI_P2P] = + { + .meta_type = NM_META_SETTING_TYPE_WIFI_P2P, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_WIFI_P2P_SETTING_NAME, + .get_setting_gtype = nm_setting_wifi_p2p_get_type, + }, + [NM_META_SETTING_TYPE_WIMAX] = + { + .meta_type = NM_META_SETTING_TYPE_WIMAX, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_WIMAX_SETTING_NAME, + .get_setting_gtype = nm_setting_wimax_get_type, + }, + [NM_META_SETTING_TYPE_WIRED] = + { + .meta_type = NM_META_SETTING_TYPE_WIRED, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_WIRED_SETTING_NAME, + .get_setting_gtype = nm_setting_wired_get_type, + }, + [NM_META_SETTING_TYPE_WIREGUARD] = + { + .meta_type = NM_META_SETTING_TYPE_WIREGUARD, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_WIREGUARD_SETTING_NAME, + .get_setting_gtype = nm_setting_wireguard_get_type, + }, + [NM_META_SETTING_TYPE_WIRELESS] = + { + .meta_type = NM_META_SETTING_TYPE_WIRELESS, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_WIRELESS_SETTING_NAME, + .get_setting_gtype = nm_setting_wireless_get_type, + }, + [NM_META_SETTING_TYPE_WIRELESS_SECURITY] = + { + .meta_type = NM_META_SETTING_TYPE_WIRELESS_SECURITY, + .setting_priority = NM_SETTING_PRIORITY_HW_AUX, + .setting_name = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, + .get_setting_gtype = nm_setting_wireless_security_get_type, + }, + [NM_META_SETTING_TYPE_WPAN] = + { + .meta_type = NM_META_SETTING_TYPE_WPAN, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_WPAN_SETTING_NAME, + .get_setting_gtype = nm_setting_wpan_get_type, + }, + + [NM_META_SETTING_TYPE_UNKNOWN] = + { + .meta_type = NM_META_SETTING_TYPE_UNKNOWN, + }, +}; + +const NMMetaSettingInfo * +nm_meta_setting_infos_by_name(const char *name) +{ + gssize idx; + + if (NM_MORE_ASSERTS > 10) { + guint i, j; + + for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++) { + const NMMetaSettingInfo *setting_info = &nm_meta_setting_infos[i]; + + nm_assert(setting_info->meta_type == (NMMetaSettingType) i); + nm_assert(setting_info->setting_name); + nm_assert(setting_info->setting_name[0]); + nm_assert(setting_info->get_setting_gtype); + nm_assert(setting_info->setting_priority != NM_SETTING_PRIORITY_INVALID); + if (i > 0 + && strcmp(nm_meta_setting_infos[i - 1].setting_name, setting_info->setting_name) + >= 0) { + g_error("nm_meta_setting_infos[%u, \"%s\"] is wrongly sorted before " + "nm_meta_setting_infos[%u, \"%s\"]. Rearange NMMetaSettingType enum", + i - 1, + nm_meta_setting_infos[i - 1].setting_name, + i, + setting_info->setting_name); + } + for (j = 0; j < i; j++) { + const NMMetaSettingInfo *s = &nm_meta_setting_infos[j]; + + nm_assert(setting_info->get_setting_gtype != s->get_setting_gtype); + } + } + } + + G_STATIC_ASSERT_EXPR(G_STRUCT_OFFSET(NMMetaSettingInfo, setting_name) == 0); + idx = nm_utils_array_find_binary_search(nm_meta_setting_infos, + sizeof(NMMetaSettingInfo), + _NM_META_SETTING_TYPE_NUM, + &name, + nm_strcmp_p_with_data, + NULL); + + return idx >= 0 ? &nm_meta_setting_infos[idx] : NULL; +} + +const NMMetaSettingInfo * +nm_meta_setting_infos_by_gtype(GType gtype) +{ +#if _NM_META_SETTING_BASE_IMPL_LIBNM + nm_auto_unref_gtypeclass GTypeClass *gtypeclass_unref = NULL; + GTypeClass * gtypeclass; + NMSettingClass * klass; + + if (!g_type_is_a(gtype, NM_TYPE_SETTING)) + goto out_none; + + gtypeclass = g_type_class_peek(gtype); + if (!gtypeclass) + gtypeclass = gtypeclass_unref = g_type_class_ref(gtype); + + nm_assert(NM_IS_SETTING_CLASS(gtypeclass)); + + klass = (NMSettingClass *) gtypeclass; + + if (!klass->setting_info) + goto out_none; + + nm_assert(klass->setting_info->get_setting_gtype); + nm_assert(klass->setting_info->get_setting_gtype() == gtype); + + return klass->setting_info; + +out_none: + + if (NM_MORE_ASSERTS > 10) { + int i; + + /* this might hint to a bug, but it would be expected for NM_TYPE_SETTING + * and NM_TYPE_SETTING_IP_CONFIG. + * + * Assert that we didn't lookup for a gtype, which we would expect to find. + * An assertion failure here, hints to a bug in nm_setting_*_class_init(). + */ + for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++) + nm_assert(nm_meta_setting_infos[i].get_setting_gtype() != gtype); + } + + return NULL; +#else + guint i; + + for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++) { + if (nm_meta_setting_infos[i].get_setting_gtype() == gtype) + return &nm_meta_setting_infos[i]; + } + return NULL; +#endif +} + +/*****************************************************************************/ + +NMSettingPriority +nm_meta_setting_info_get_base_type_priority(const NMMetaSettingInfo *setting_info, GType gtype) +{ + /* Historical oddity: PPPoE is a base-type even though it's not + * priority 1. It needs to be sorted *after* lower-level stuff like + * Wi-Fi security or 802.1x for secrets, but it's still allowed as a + * base type. + */ + + if (setting_info) { + if (NM_IN_SET(setting_info->setting_priority, + NM_SETTING_PRIORITY_HW_BASE, + NM_SETTING_PRIORITY_HW_NON_BASE) + || gtype == NM_TYPE_SETTING_PPPOE) + return setting_info->setting_priority; + } + + return NM_SETTING_PRIORITY_INVALID; +} + +NMSettingPriority +_nm_setting_type_get_base_type_priority(GType type) +{ + return nm_meta_setting_info_get_base_type_priority(nm_meta_setting_infos_by_gtype(type), type); +} + +/*****************************************************************************/ diff --git a/libnm-core/nm-meta-setting-base-impl.h b/libnm-core/nm-meta-setting-base-impl.h new file mode 100644 index 0000000..94b14e8 --- /dev/null +++ b/libnm-core/nm-meta-setting-base-impl.h @@ -0,0 +1,187 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2017 - 2018 Red Hat, Inc. + */ + +#ifndef __NM_META_SETTING_BASE_IMPL_H__ +#define __NM_META_SETTING_BASE_IMPL_H__ + +#include "nm-setting-8021x.h" + +/*****************************************************************************/ + +/* + * A setting's priority should roughly follow the OSI layer model, but it also + * controls which settings get asked for secrets first. Thus settings which + * relate to things that must be working first, like hardware, should get a + * higher priority than things which layer on top of the hardware. For example, + * the GSM/CDMA settings should provide secrets before the PPP setting does, + * because a PIN is required to unlock the device before PPP can even start. + * Even settings without secrets should be assigned the right priority. + * + * 0: reserved for invalid + * + * 1: reserved for the Connection setting + * + * 2,3: hardware-related settings like Ethernet, Wi-Fi, InfiniBand, Bridge, etc. + * These priority 1 settings are also "base types", which means that at least + * one of them is required for the connection to be valid, and their name is + * valid in the 'type' property of the Connection setting. + * + * 4: hardware-related auxiliary settings that require a base setting to be + * successful first, like Wi-Fi security, 802.1x, etc. + * + * 5: hardware-independent settings that are required before IP connectivity + * can be established, like PPP, PPPoE, etc. + * + * 6: IP-level stuff + * + * 10: NMSettingUser + */ +typedef enum { /*< skip >*/ + NM_SETTING_PRIORITY_INVALID = 0, + NM_SETTING_PRIORITY_CONNECTION = 1, + NM_SETTING_PRIORITY_HW_BASE = 2, + NM_SETTING_PRIORITY_HW_NON_BASE = 3, + NM_SETTING_PRIORITY_HW_AUX = 4, + NM_SETTING_PRIORITY_AUX = 5, + NM_SETTING_PRIORITY_IP = 6, + NM_SETTING_PRIORITY_USER = 10, +} NMSettingPriority; + +/*****************************************************************************/ + +typedef enum { + NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CA_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_CLIENT_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CLIENT_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PRIVATE_KEY, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_PRIVATE_KEY, + + NM_SETTING_802_1X_SCHEME_TYPE_UNKNOWN, + + _NM_SETTING_802_1X_SCHEME_TYPE_NUM = NM_SETTING_802_1X_SCHEME_TYPE_UNKNOWN, +} NMSetting8021xSchemeType; + +typedef struct { + const char *setting_key; + NMSetting8021xCKScheme (*scheme_func)(NMSetting8021x *setting); + NMSetting8021xCKFormat (*format_func)(NMSetting8021x *setting); + const char *(*path_func)(NMSetting8021x *setting); + GBytes *(*blob_func)(NMSetting8021x *setting); + const char *(*uri_func)(NMSetting8021x *setting); + const char *(*passwd_func)(NMSetting8021x *setting); + NMSettingSecretFlags (*pwflag_func)(NMSetting8021x *setting); + gboolean (*set_cert_func)(NMSetting8021x * setting, + const char * value, + NMSetting8021xCKScheme scheme, + NMSetting8021xCKFormat *out_format, + GError ** error); + gboolean (*set_private_key_func)(NMSetting8021x * setting, + const char * value, + const char * password, + NMSetting8021xCKScheme scheme, + NMSetting8021xCKFormat *out_format, + GError ** error); + const char * file_suffix; + NMSetting8021xSchemeType scheme_type; + bool is_secret : 1; +} NMSetting8021xSchemeVtable; + +extern const NMSetting8021xSchemeVtable + nm_setting_8021x_scheme_vtable[_NM_SETTING_802_1X_SCHEME_TYPE_NUM + 1]; + +/*****************************************************************************/ + +typedef enum { + /* the enum (and their numeric values) are internal API. Do not assign + * any meaning the numeric values, because they already have one: + * + * they are sorted in a way, that corresponds to the asciibetical sort + * order of the corresponding setting-name. */ + + NM_META_SETTING_TYPE_6LOWPAN, + NM_META_SETTING_TYPE_OLPC_MESH, + NM_META_SETTING_TYPE_WIRELESS, + NM_META_SETTING_TYPE_WIRELESS_SECURITY, + NM_META_SETTING_TYPE_802_1X, + NM_META_SETTING_TYPE_WIRED, + NM_META_SETTING_TYPE_ADSL, + NM_META_SETTING_TYPE_BLUETOOTH, + NM_META_SETTING_TYPE_BOND, + NM_META_SETTING_TYPE_BRIDGE, + NM_META_SETTING_TYPE_BRIDGE_PORT, + NM_META_SETTING_TYPE_CDMA, + NM_META_SETTING_TYPE_CONNECTION, + NM_META_SETTING_TYPE_DCB, + NM_META_SETTING_TYPE_DUMMY, + NM_META_SETTING_TYPE_ETHTOOL, + NM_META_SETTING_TYPE_GENERIC, + NM_META_SETTING_TYPE_GSM, + NM_META_SETTING_TYPE_HOSTNAME, + NM_META_SETTING_TYPE_INFINIBAND, + NM_META_SETTING_TYPE_IP_TUNNEL, + NM_META_SETTING_TYPE_IP4_CONFIG, + NM_META_SETTING_TYPE_IP6_CONFIG, + NM_META_SETTING_TYPE_MACSEC, + NM_META_SETTING_TYPE_MACVLAN, + NM_META_SETTING_TYPE_MATCH, + NM_META_SETTING_TYPE_OVS_BRIDGE, + NM_META_SETTING_TYPE_OVS_DPDK, + NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS, + NM_META_SETTING_TYPE_OVS_INTERFACE, + NM_META_SETTING_TYPE_OVS_PATCH, + NM_META_SETTING_TYPE_OVS_PORT, + NM_META_SETTING_TYPE_PPP, + NM_META_SETTING_TYPE_PPPOE, + NM_META_SETTING_TYPE_PROXY, + NM_META_SETTING_TYPE_SERIAL, + NM_META_SETTING_TYPE_SRIOV, + NM_META_SETTING_TYPE_TC_CONFIG, + NM_META_SETTING_TYPE_TEAM, + NM_META_SETTING_TYPE_TEAM_PORT, + NM_META_SETTING_TYPE_TUN, + NM_META_SETTING_TYPE_USER, + NM_META_SETTING_TYPE_VETH, + NM_META_SETTING_TYPE_VLAN, + NM_META_SETTING_TYPE_VPN, + NM_META_SETTING_TYPE_VRF, + NM_META_SETTING_TYPE_VXLAN, + NM_META_SETTING_TYPE_WIFI_P2P, + NM_META_SETTING_TYPE_WIMAX, + NM_META_SETTING_TYPE_WIREGUARD, + NM_META_SETTING_TYPE_WPAN, + + NM_META_SETTING_TYPE_UNKNOWN, + + _NM_META_SETTING_TYPE_NUM = NM_META_SETTING_TYPE_UNKNOWN, +} NMMetaSettingType; + +#if _NM_META_SETTING_BASE_IMPL_LIBNM + #define _NMMetaSettingInfo_Alias _NMMetaSettingInfo +#else + #define _NMMetaSettingInfo_Alias _NMMetaSettingInfoCli +#endif + +struct _NMMetaSettingInfo_Alias { + const char *setting_name; + GType (*get_setting_gtype)(void); + NMMetaSettingType meta_type; + NMSettingPriority setting_priority; +}; + +typedef struct _NMMetaSettingInfo_Alias NMMetaSettingInfo; + +extern const NMMetaSettingInfo nm_meta_setting_infos[_NM_META_SETTING_TYPE_NUM + 1]; + +const NMMetaSettingInfo *nm_meta_setting_infos_by_name(const char *name); +const NMMetaSettingInfo *nm_meta_setting_infos_by_gtype(GType gtype); + +/*****************************************************************************/ + +NMSettingPriority nm_meta_setting_info_get_base_type_priority(const NMMetaSettingInfo *setting_info, + GType gtype); +NMSettingPriority _nm_setting_type_get_base_type_priority(GType type); + +#endif /* __NM_META_SETTING_BASE_IMPL_H__ */ diff --git a/libnm-core/nm-meta-setting-base.h b/libnm-core/nm-meta-setting-base.h new file mode 100644 index 0000000..72fa8e6 --- /dev/null +++ b/libnm-core/nm-meta-setting-base.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#ifndef __NM_META_SETTING_BASE_H__ +#define __NM_META_SETTING_BASE_H__ + +#define _NM_META_SETTING_BASE_IMPL_LIBNM 1 + +#include "nm-meta-setting-base-impl.h" + +#endif /* __NM_META_SETTING_BASE_H__ */ diff --git a/libnm-core/nm-property-compare.c b/libnm-core/nm-property-compare.c index 053dfbf..c7cf10a 100644 --- a/libnm-core/nm-property-compare.c +++ b/libnm-core/nm-property-compare.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-property-compare.h" diff --git a/libnm-core/nm-setting-6lowpan.c b/libnm-core/nm-setting-6lowpan.c index e90887f..f71daf3 100644 --- a/libnm-core/nm-setting-6lowpan.c +++ b/libnm-core/nm-setting-6lowpan.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-6lowpan.h" diff --git a/libnm-core/nm-setting-8021x.c b/libnm-core/nm-setting-8021x.c index 24daf3f..1b38aa1 100644 --- a/libnm-core/nm-setting-8021x.c +++ b/libnm-core/nm-setting-8021x.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-8021x.h" @@ -3998,19 +3998,24 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) /** * NMSetting8021x:phase2-auth: * - * Specifies the allowed "phase 2" inner non-EAP authentication method when - * an EAP method that uses an inner TLS tunnel is specified in the - * #NMSetting8021x:eap property. Recognized non-EAP "phase 2" methods are - * "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls". + * Specifies the allowed "phase 2" inner authentication method when an EAP + * method that uses an inner TLS tunnel is specified in the #NMSetting8021x:eap + * property. For TTLS this property selects one of the supported non-EAP + * inner methods: "pap", "chap", "mschap", "mschapv2" while + * #NMSetting8021x:phase2-autheap selects an EAP inner method. For PEAP + * this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". * Each "phase 2" inner method requires specific parameters for successful * authentication; see the wpa_supplicant documentation for more details. + * Both #NMSetting8021x:phase2-auth and #NMSetting8021x:phase2-autheap cannot + * be specified. **/ /* ---ifcfg-rh--- * property: phase2-auth * variable: IEEE_8021X_INNER_AUTH_METHODS(+) * values: "PAP", "CHAP", "MSCHAP", "MSCHAPV2", "GTC", "OTP", "MD5" and "TLS" - * description: Inner non-EAP authentication methods. IEEE_8021X_INNER_AUTH_METHODS - * can contain values both for 'phase2-auth' and 'phase2-autheap' properties. + * description: Inner non-EAP authentication methods for TTLS or the inner EAP + * authentication method for PEAP. IEEE_8021X_INNER_AUTH_METHODS can contain + * values both for 'phase2-auth' and 'phase2-autheap' properties. * example: IEEE_8021X_INNER_AUTH_METHODS=PAP * ---end--- */ @@ -4025,11 +4030,11 @@ nm_setting_802_1x_class_init(NMSetting8021xClass *klass) * NMSetting8021x:phase2-autheap: * * Specifies the allowed "phase 2" inner EAP-based authentication method - * when an EAP method that uses an inner TLS tunnel is specified in the - * #NMSetting8021x:eap property. Recognized EAP-based "phase 2" methods are - * "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method - * requires specific parameters for successful authentication; see the - * wpa_supplicant documentation for more details. + * when TTLS is specified in the #NMSetting8021x:eap property. Recognized + * EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and + * "tls". Each "phase 2" inner method requires specific parameters for + * successful authentication; see the wpa_supplicant documentation for + * more details. **/ /* ---ifcfg-rh--- * property: phase2-autheap diff --git a/libnm-core/nm-setting-adsl.c b/libnm-core/nm-setting-adsl.c index 54ec5b6..f26698b 100644 --- a/libnm-core/nm-setting-adsl.c +++ b/libnm-core/nm-setting-adsl.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 - 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-adsl.h" diff --git a/libnm-core/nm-setting-bluetooth.c b/libnm-core/nm-setting-bluetooth.c index 643b386..eb0e593 100644 --- a/libnm-core/nm-setting-bluetooth.c +++ b/libnm-core/nm-setting-bluetooth.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-bluetooth.h" diff --git a/libnm-core/nm-setting-bond.c b/libnm-core/nm-setting-bond.c index a5ed07b..2d64ef0 100644 --- a/libnm-core/nm-setting-bond.c +++ b/libnm-core/nm-setting-bond.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 - 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-bond.h" diff --git a/libnm-core/nm-setting-bridge-port.c b/libnm-core/nm-setting-bridge-port.c index 7d56527..74c6384 100644 --- a/libnm-core/nm-setting-bridge-port.c +++ b/libnm-core/nm-setting-bridge-port.c @@ -3,7 +3,7 @@ * Copyright (C) 2012 - 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-bridge-port.h" diff --git a/libnm-core/nm-setting-bridge.c b/libnm-core/nm-setting-bridge.c index 44e4b62..15d663d 100644 --- a/libnm-core/nm-setting-bridge.c +++ b/libnm-core/nm-setting-bridge.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-bridge.h" diff --git a/libnm-core/nm-setting-cdma.c b/libnm-core/nm-setting-cdma.c index 2b6635a..42e77c6 100644 --- a/libnm-core/nm-setting-cdma.c +++ b/libnm-core/nm-setting-cdma.c @@ -3,7 +3,7 @@ * Copyright (C) 2007 - 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-cdma.h" diff --git a/libnm-core/nm-setting-connection.c b/libnm-core/nm-setting-connection.c index 16277ff..d6626a4 100644 --- a/libnm-core/nm-setting-connection.c +++ b/libnm-core/nm-setting-connection.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-connection.h" diff --git a/libnm-core/nm-setting-dcb.c b/libnm-core/nm-setting-dcb.c index 1d5a324..839d914 100644 --- a/libnm-core/nm-setting-dcb.c +++ b/libnm-core/nm-setting-dcb.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-dcb.h" diff --git a/libnm-core/nm-setting-dummy.c b/libnm-core/nm-setting-dummy.c index 0a5f577..9ba626d 100644 --- a/libnm-core/nm-setting-dummy.c +++ b/libnm-core/nm-setting-dummy.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-dummy.h" diff --git a/libnm-core/nm-setting-ethtool.c b/libnm-core/nm-setting-ethtool.c index 7d3f4d9..f2c6d15 100644 --- a/libnm-core/nm-setting-ethtool.c +++ b/libnm-core/nm-setting-ethtool.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-ethtool.h" diff --git a/libnm-core/nm-setting-generic.c b/libnm-core/nm-setting-generic.c index 564b1e5..07dbd9b 100644 --- a/libnm-core/nm-setting-generic.c +++ b/libnm-core/nm-setting-generic.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-generic.h" diff --git a/libnm-core/nm-setting-gsm.c b/libnm-core/nm-setting-gsm.c index 143e6dd..c4eda96 100644 --- a/libnm-core/nm-setting-gsm.c +++ b/libnm-core/nm-setting-gsm.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-gsm.h" diff --git a/libnm-core/nm-setting-hostname.c b/libnm-core/nm-setting-hostname.c index fa781b1..2396b7b 100644 --- a/libnm-core/nm-setting-hostname.c +++ b/libnm-core/nm-setting-hostname.c @@ -3,7 +3,7 @@ * Copyright (C) 2020 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-hostname.h" diff --git a/libnm-core/nm-setting-infiniband.c b/libnm-core/nm-setting-infiniband.c index 451e2fe..c315843 100644 --- a/libnm-core/nm-setting-infiniband.c +++ b/libnm-core/nm-setting-infiniband.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 - 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-infiniband.h" diff --git a/libnm-core/nm-setting-ip-config.c b/libnm-core/nm-setting-ip-config.c index 5b70819..45ecbd8 100644 --- a/libnm-core/nm-setting-ip-config.c +++ b/libnm-core/nm-setting-ip-config.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-ip-config.h" diff --git a/libnm-core/nm-setting-ip-tunnel.c b/libnm-core/nm-setting-ip-tunnel.c index efd7cf0..998b816 100644 --- a/libnm-core/nm-setting-ip-tunnel.c +++ b/libnm-core/nm-setting-ip-tunnel.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-ip-tunnel.h" diff --git a/libnm-core/nm-setting-ip4-config.c b/libnm-core/nm-setting-ip4-config.c index 8d9c12d..20fbc01 100644 --- a/libnm-core/nm-setting-ip4-config.c +++ b/libnm-core/nm-setting-ip4-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-ip4-config.h" diff --git a/libnm-core/nm-setting-ip6-config.c b/libnm-core/nm-setting-ip6-config.c index 2b55b0a..06463f8 100644 --- a/libnm-core/nm-setting-ip6-config.c +++ b/libnm-core/nm-setting-ip6-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2007 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-ip6-config.h" diff --git a/libnm-core/nm-setting-macsec.c b/libnm-core/nm-setting-macsec.c index 2e9aad1..d70696d 100644 --- a/libnm-core/nm-setting-macsec.c +++ b/libnm-core/nm-setting-macsec.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-macsec.h" diff --git a/libnm-core/nm-setting-macvlan.c b/libnm-core/nm-setting-macvlan.c index e183ca6..8c8c627 100644 --- a/libnm-core/nm-setting-macvlan.c +++ b/libnm-core/nm-setting-macvlan.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-macvlan.h" diff --git a/libnm-core/nm-setting-match.c b/libnm-core/nm-setting-match.c index 1a6f86e..108aba9 100644 --- a/libnm-core/nm-setting-match.c +++ b/libnm-core/nm-setting-match.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-match.h" diff --git a/libnm-core/nm-setting-olpc-mesh.c b/libnm-core/nm-setting-olpc-mesh.c index 6397759..ef0b5d6 100644 --- a/libnm-core/nm-setting-olpc-mesh.c +++ b/libnm-core/nm-setting-olpc-mesh.c @@ -5,7 +5,7 @@ * Copyright (C) 2009 One Laptop per Child */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-olpc-mesh.h" diff --git a/libnm-core/nm-setting-ovs-bridge.c b/libnm-core/nm-setting-ovs-bridge.c index 1a7c7b7..07d24d7 100644 --- a/libnm-core/nm-setting-ovs-bridge.c +++ b/libnm-core/nm-setting-ovs-bridge.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-ovs-bridge.h" diff --git a/libnm-core/nm-setting-ovs-dpdk.c b/libnm-core/nm-setting-ovs-dpdk.c index 97d507f..6d27d78 100644 --- a/libnm-core/nm-setting-ovs-dpdk.c +++ b/libnm-core/nm-setting-ovs-dpdk.c @@ -3,7 +3,7 @@ * Copyright (C) 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-ovs-dpdk.h" diff --git a/libnm-core/nm-setting-ovs-external-ids.c b/libnm-core/nm-setting-ovs-external-ids.c index a0b1e60..16becb7 100644 --- a/libnm-core/nm-setting-ovs-external-ids.c +++ b/libnm-core/nm-setting-ovs-external-ids.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 - 2020 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-ovs-external-ids.h" diff --git a/libnm-core/nm-setting-ovs-interface.c b/libnm-core/nm-setting-ovs-interface.c index 8bdd174..0c04a66 100644 --- a/libnm-core/nm-setting-ovs-interface.c +++ b/libnm-core/nm-setting-ovs-interface.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-ovs-interface.h" diff --git a/libnm-core/nm-setting-ovs-patch.c b/libnm-core/nm-setting-ovs-patch.c index 0479f39..18a62d2 100644 --- a/libnm-core/nm-setting-ovs-patch.c +++ b/libnm-core/nm-setting-ovs-patch.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-ovs-patch.h" diff --git a/libnm-core/nm-setting-ovs-port.c b/libnm-core/nm-setting-ovs-port.c index dfe13c4..63da66f 100644 --- a/libnm-core/nm-setting-ovs-port.c +++ b/libnm-core/nm-setting-ovs-port.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-ovs-port.h" diff --git a/libnm-core/nm-setting-ppp.c b/libnm-core/nm-setting-ppp.c index de0b005..36fe84c 100644 --- a/libnm-core/nm-setting-ppp.c +++ b/libnm-core/nm-setting-ppp.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-ppp.h" diff --git a/libnm-core/nm-setting-pppoe.c b/libnm-core/nm-setting-pppoe.c index 6e48cde..ef1d9ba 100644 --- a/libnm-core/nm-setting-pppoe.c +++ b/libnm-core/nm-setting-pppoe.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-pppoe.h" diff --git a/libnm-core/nm-setting-proxy.c b/libnm-core/nm-setting-proxy.c index 07eefad..10cebc7 100644 --- a/libnm-core/nm-setting-proxy.c +++ b/libnm-core/nm-setting-proxy.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 Atul Anand . */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-proxy.h" diff --git a/libnm-core/nm-setting-serial.c b/libnm-core/nm-setting-serial.c index 1758e2a..1e5418a 100644 --- a/libnm-core/nm-setting-serial.c +++ b/libnm-core/nm-setting-serial.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-serial.h" diff --git a/libnm-core/nm-setting-sriov.c b/libnm-core/nm-setting-sriov.c index f2a4697..47625a4 100644 --- a/libnm-core/nm-setting-sriov.c +++ b/libnm-core/nm-setting-sriov.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-sriov.h" diff --git a/libnm-core/nm-setting-tc-config.c b/libnm-core/nm-setting-tc-config.c index d85fb26..33df6d3 100644 --- a/libnm-core/nm-setting-tc-config.c +++ b/libnm-core/nm-setting-tc-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-tc-config.h" diff --git a/libnm-core/nm-setting-team-port.c b/libnm-core/nm-setting-team-port.c index 0912d37..ea8115a 100644 --- a/libnm-core/nm-setting-team-port.c +++ b/libnm-core/nm-setting-team-port.c @@ -4,7 +4,7 @@ * Copyright (C) 2013 Jiri Pirko */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-team-port.h" diff --git a/libnm-core/nm-setting-team.c b/libnm-core/nm-setting-team.c index 14a116e..f89a303 100644 --- a/libnm-core/nm-setting-team.c +++ b/libnm-core/nm-setting-team.c @@ -4,7 +4,7 @@ * Copyright (C) 2013 Jiri Pirko */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-team.h" diff --git a/libnm-core/nm-setting-tun.c b/libnm-core/nm-setting-tun.c index 767a5df..1208a62 100644 --- a/libnm-core/nm-setting-tun.c +++ b/libnm-core/nm-setting-tun.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-tun.h" diff --git a/libnm-core/nm-setting-user.c b/libnm-core/nm-setting-user.c index 3164cf4..f62b8ba 100644 --- a/libnm-core/nm-setting-user.c +++ b/libnm-core/nm-setting-user.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-user.h" diff --git a/libnm-core/nm-setting-veth.c b/libnm-core/nm-setting-veth.c index 7c2e541..6270afb 100644 --- a/libnm-core/nm-setting-veth.c +++ b/libnm-core/nm-setting-veth.c @@ -3,7 +3,7 @@ * Copyright (C) 2020 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-veth.h" diff --git a/libnm-core/nm-setting-vlan.c b/libnm-core/nm-setting-vlan.c index 5543485..123c119 100644 --- a/libnm-core/nm-setting-vlan.c +++ b/libnm-core/nm-setting-vlan.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-vlan.h" diff --git a/libnm-core/nm-setting-vpn.c b/libnm-core/nm-setting-vpn.c index 6cd5203..8ee5c2b 100644 --- a/libnm-core/nm-setting-vpn.c +++ b/libnm-core/nm-setting-vpn.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-vpn.h" diff --git a/libnm-core/nm-setting-vrf.c b/libnm-core/nm-setting-vrf.c index a3ed8db..d4198a7 100644 --- a/libnm-core/nm-setting-vrf.c +++ b/libnm-core/nm-setting-vrf.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-vrf.h" diff --git a/libnm-core/nm-setting-vxlan.c b/libnm-core/nm-setting-vxlan.c index d6b22b0..ea8d454 100644 --- a/libnm-core/nm-setting-vxlan.c +++ b/libnm-core/nm-setting-vxlan.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-vxlan.h" diff --git a/libnm-core/nm-setting-wifi-p2p.c b/libnm-core/nm-setting-wifi-p2p.c index 98fadb5..e026cb8 100644 --- a/libnm-core/nm-setting-wifi-p2p.c +++ b/libnm-core/nm-setting-wifi-p2p.c @@ -3,7 +3,7 @@ * Copyright (C) 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-wifi-p2p.h" diff --git a/libnm-core/nm-setting-wimax.c b/libnm-core/nm-setting-wimax.c index 04ea4dd..dcb5941 100644 --- a/libnm-core/nm-setting-wimax.c +++ b/libnm-core/nm-setting-wimax.c @@ -4,7 +4,7 @@ * Copyright (C) 2009 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-wimax.h" diff --git a/libnm-core/nm-setting-wired.c b/libnm-core/nm-setting-wired.c index 748fd75..857f11b 100644 --- a/libnm-core/nm-setting-wired.c +++ b/libnm-core/nm-setting-wired.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-wired.h" diff --git a/libnm-core/nm-setting-wireguard.c b/libnm-core/nm-setting-wireguard.c index 37d3fa1..3a36dab 100644 --- a/libnm-core/nm-setting-wireguard.c +++ b/libnm-core/nm-setting-wireguard.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 - 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-wireguard.h" diff --git a/libnm-core/nm-setting-wireless-security.c b/libnm-core/nm-setting-wireless-security.c index a966718..162f922 100644 --- a/libnm-core/nm-setting-wireless-security.c +++ b/libnm-core/nm-setting-wireless-security.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-wireless-security.h" diff --git a/libnm-core/nm-setting-wireless.c b/libnm-core/nm-setting-wireless.c index 20e69d6..232bc7a 100644 --- a/libnm-core/nm-setting-wireless.c +++ b/libnm-core/nm-setting-wireless.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-wireless.h" diff --git a/libnm-core/nm-setting-wpan.c b/libnm-core/nm-setting-wpan.c index 29dbdc2..13bd368 100644 --- a/libnm-core/nm-setting-wpan.c +++ b/libnm-core/nm-setting-wpan.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Lubomir Rintel */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-wpan.h" diff --git a/libnm-core/nm-setting.c b/libnm-core/nm-setting.c index 13aa4b1..45644ac 100644 --- a/libnm-core/nm-setting.c +++ b/libnm-core/nm-setting.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting.h" diff --git a/libnm-core/nm-simple-connection.c b/libnm-core/nm-simple-connection.c index b4c0b65..6f1e3a9 100644 --- a/libnm-core/nm-simple-connection.c +++ b/libnm-core/nm-simple-connection.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-simple-connection.h" diff --git a/libnm-core/nm-team-utils.c b/libnm-core/nm-team-utils.c index 8981e86..b7da35a 100644 --- a/libnm-core/nm-team-utils.c +++ b/libnm-core/nm-team-utils.c @@ -5,7 +5,7 @@ #define NM_VALUE_TYPE_DEFINE_FUNCTIONS -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-team-utils.h" diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index ab5de92..6ceef1e 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2005 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-utils.h" @@ -3623,7 +3623,8 @@ nm_utils_file_search_in_paths(const char * progname, if (!path[0]) continue; - nm_str_buf_reset(&strbuf, path); + nm_str_buf_reset(&strbuf); + nm_str_buf_append(&strbuf, path); nm_str_buf_ensure_trailing_c(&strbuf, '/'); s = nm_str_buf_append0(&strbuf, progname); diff --git a/libnm-core/nm-version-macros.h b/libnm-core/nm-version-macros.h new file mode 100644 index 0000000..8ed5bb7 --- /dev/null +++ b/libnm-core/nm-version-macros.h @@ -0,0 +1,91 @@ +/* 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 (29) + +/** + * NM_MICRO_VERSION: + * + * Evaluates to the micro version number of NetworkManager which this source + * compiled against. + */ +#define NM_MICRO_VERSION (90) + +/** + * 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)) + +/* 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/libnm-core/nm-version-macros.h.in b/libnm-core/nm-version-macros.h.in new file mode 100644 index 0000000..4a6f46e --- /dev/null +++ b/libnm-core/nm-version-macros.h.in @@ -0,0 +1,91 @@ +/* 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)) + +/* 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/libnm-core/nm-vpn-editor-plugin.c b/libnm-core/nm-vpn-editor-plugin.c index b5407a7..e68bdc2 100644 --- a/libnm-core/nm-vpn-editor-plugin.c +++ b/libnm-core/nm-vpn-editor-plugin.c @@ -5,7 +5,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-vpn-editor-plugin.h" diff --git a/libnm-core/nm-vpn-plugin-info.c b/libnm-core/nm-vpn-plugin-info.c index fd48dee..cb73951 100644 --- a/libnm-core/nm-vpn-plugin-info.c +++ b/libnm-core/nm-vpn-plugin-info.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-vpn-plugin-info.h" diff --git a/libnm-core/tests/meson.build b/libnm-core/tests/meson.build index 83ba89c..df5209b 100644 --- a/libnm-core/tests/meson.build +++ b/libnm-core/tests/meson.build @@ -4,7 +4,7 @@ enum_sources = gnome.mkenums_simple( 'nm-core-tests-enum-types', sources: 'test-general-enums.h', identifier_prefix: nm_id_prefix, - body_prefix: '#include "nm-default.h"', + body_prefix: '#include "libnm-core/nm-default-libnm-core.h"', ) test_units = [ @@ -22,14 +22,12 @@ foreach test_unit: test_units 'libnm-core-' + test_unit, [test_unit + '.c'] + enum_sources, dependencies: [ - libnm_keyfile_dep, libnm_core_dep, libnm_core_nm_default_dep, libnm_base_dep, ], c_args: [ - '-DNETWORKMANAGER_COMPILATION_TEST', - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE', + '-DG_LOG_DOMAIN="test"', ], link_with: libnm_systemd_logging_stub, ) diff --git a/libnm-core/tests/test-compare.c b/libnm-core/tests/test-compare.c index 73cf4a7..27049e8 100644 --- a/libnm-core/tests/test-compare.c +++ b/libnm-core/tests/test-compare.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include #include diff --git a/libnm-core/tests/test-crypto.c b/libnm-core/tests/test-crypto.c index d62cde0..4e288b7 100644 --- a/libnm-core/tests/test-crypto.c +++ b/libnm-core/tests/test-crypto.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include #include diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c index 9894064..885319f 100644 --- a/libnm-core/tests/test-general.c +++ b/libnm-core/tests/test-general.c @@ -5,7 +5,7 @@ #define NM_GLIB_COMPAT_H_TEST -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include #include @@ -57,7 +57,7 @@ #include "nm-setting-wireless-security.h" #include "nm-setting-wpan.h" #include "nm-simple-connection.h" -#include "nm-keyfile/nm-keyfile-internal.h" +#include "nm-keyfile-internal.h" #include "nm-glib-aux/nm-dedup-multi.h" #include "nm-base/nm-ethtool-base.h" #include "nm-base/nm-ethtool-utils-base.h" @@ -5486,7 +5486,7 @@ _test_connection_normalize_type_normalizable_type(const char *type, if (add_setting_fcn) s_base = add_setting_fcn(con); else { - s_base = NM_SETTING(g_object_new(base_type, NULL)); + s_base = g_object_new(base_type, NULL); nm_connection_add_setting(con, s_base); } @@ -9613,6 +9613,11 @@ test_ethtool_offload(void) g_assert(d); g_assert_cmpint(d->id, ==, NM_ETHTOOL_ID_FEATURE_RXHASH); g_assert_cmpstr(d->optname, ==, NM_ETHTOOL_OPTNAME_FEATURE_RXHASH); + + /* these features are NETIF_F_NEVER_CHANGE: */ + g_assert(!nm_ethtool_data_get_by_optname("feature-netns-local")); + g_assert(!nm_ethtool_data_get_by_optname("feature-tx-lockless")); + g_assert(!nm_ethtool_data_get_by_optname("feature-vlan-challenged")); } /*****************************************************************************/ diff --git a/libnm-core/tests/test-keyfile.c b/libnm-core/tests/test-keyfile.c index eb41a79..b3af6c4 100644 --- a/libnm-core/tests/test-keyfile.c +++ b/libnm-core/tests/test-keyfile.c @@ -3,11 +3,11 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-glib-aux/nm-json-aux.h" -#include "nm-keyfile/nm-keyfile-utils.h" -#include "nm-keyfile/nm-keyfile-internal.h" +#include "nm-keyfile-utils.h" +#include "nm-keyfile-internal.h" #include "nm-simple-connection.h" #include "nm-setting-connection.h" #include "nm-setting-wired.h" diff --git a/libnm-core/tests/test-secrets.c b/libnm-core/tests/test-secrets.c index 901d2da..42f1fd0 100644 --- a/libnm-core/tests/test-secrets.c +++ b/libnm-core/tests/test-secrets.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-8021x.h" #include "nm-setting-cdma.h" diff --git a/libnm-core/tests/test-setting.c b/libnm-core/tests/test-setting.c index b17ba15..01cdb41 100644 --- a/libnm-core/tests/test-setting.c +++ b/libnm-core/tests/test-setting.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include #include @@ -26,7 +26,7 @@ #include "nm-simple-connection.h" #include "nm-setting-connection.h" #include "nm-errors.h" -#include "nm-keyfile/nm-keyfile-internal.h" +#include "nm-keyfile-internal.h" #include "nm-utils/nm-test-utils.h" diff --git a/libnm-core/tests/test-settings-defaults.c b/libnm-core/tests/test-settings-defaults.c index d0ec11f..1e6acd3 100644 --- a/libnm-core/tests/test-settings-defaults.c +++ b/libnm-core/tests/test-settings-defaults.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm-core/nm-default-libnm-core.h" #include "nm-utils.h" #include "nm-setting-8021x.h" diff --git a/libnm/meson.build b/libnm/meson.build index a9d38f8..d084641 100644 --- a/libnm/meson.build +++ b/libnm/meson.build @@ -137,13 +137,11 @@ libnm_static = static_library( libnmdbus_dep, libnm_libnm_core_intern_dep, libnm_nm_default_dep, - libnm_keyfile_dep, libnm_udev_aux_dep, libudev_dep, ], c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM', + '-DG_LOG_DOMAIN="libnm"', ], link_with: libnm_systemd_logging_stub, ) @@ -157,7 +155,6 @@ libnm = shared_library( link_whole: [ libnm_static, libnm_core, - libnm_keyfile, libnmdbus, libnm_systemd_logging_stub, libnm_glib_aux, @@ -197,7 +194,7 @@ if enable_introspection libnm_gir = gnome.generate_gir( libnm, - sources: libnm_core_sources + nm_keyfile_source + libnm_core_headers + libnm_core_enum_sources + libnm_sources + libnm_headers + libnm_enum_sources + [nm_version_macro_header], + sources: libnm_core_sources + libnm_core_headers + libnm_core_enum_sources + libnm_sources + libnm_headers + libnm_enum_sources + [nm_version_macro_header], includes: 'Gio-2.0', nsversion: nm_gir_version, namespace: 'NM', @@ -206,8 +203,8 @@ if enable_introspection header: 'NetworkManager.h', export_packages: libnm_name, extra_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM', + '-DG_LOG_DOMAIN="libnm"', + '-DNETWORKMANAGER_COMPILATION', ], install: true, ) @@ -300,8 +297,7 @@ libnm_libnm_aux = static_library( 'nm-libnm-aux/nm-libnm-aux.c', ), c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format('libnmc'), - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_CLIENT', + '-DG_LOG_DOMAIN="libnmc"', ], dependencies: [ libnm_core_nm_default_dep, diff --git a/libnm/nm-access-point.c b/libnm/nm-access-point.c index 608ec28..abe1a55 100644 --- a/libnm/nm-access-point.c +++ b/libnm/nm-access-point.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-access-point.h" diff --git a/libnm/nm-active-connection.c b/libnm/nm-active-connection.c index 1dfe9c9..80fb251 100644 --- a/libnm/nm-active-connection.c +++ b/libnm/nm-active-connection.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-active-connection.h" diff --git a/libnm/nm-checkpoint.c b/libnm/nm-checkpoint.c index 5cdd587..5fd55bc 100644 --- a/libnm/nm-checkpoint.c +++ b/libnm/nm-checkpoint.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-checkpoint.h" diff --git a/libnm/nm-client.c b/libnm/nm-client.c index 9f63630..2c77519 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-client.h" diff --git a/libnm/nm-dbus-helpers.c b/libnm/nm-dbus-helpers.c index a3794b5..b146185 100644 --- a/libnm/nm-dbus-helpers.c +++ b/libnm/nm-dbus-helpers.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-dbus-helpers.h" diff --git a/libnm/nm-default-client.h b/libnm/nm-default-client.h new file mode 100644 index 0000000..b5d1a6d --- /dev/null +++ b/libnm/nm-default-client.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_DEFAULT_CLIENT_H__ +#define __NM_DEFAULT_CLIENT_H__ + +/*****************************************************************************/ + +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" + +#undef NETWORKMANAGER_COMPILATION +#define NETWORKMANAGER_COMPILATION NM_NETWORKMANAGER_COMPILATION_CLIENT + +/*****************************************************************************/ + +#include "nm-version.h" +#include "NetworkManager.h" + +/*****************************************************************************/ + +#endif /* __NM_DEFAULT_CLIENT_H__ */ diff --git a/libnm/nm-default-libnm.h b/libnm/nm-default-libnm.h new file mode 100644 index 0000000..799547b --- /dev/null +++ b/libnm/nm-default-libnm.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_DEFAULT_LIBNM_H__ +#define __NM_DEFAULT_LIBNM_H__ + +/*****************************************************************************/ + +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" + +#undef NETWORKMANAGER_COMPILATION +#define NETWORKMANAGER_COMPILATION NM_NETWORKMANAGER_COMPILATION_LIBNM + +/*****************************************************************************/ + +#include "nm-version.h" +#include "nm-libnm-utils.h" + +/*****************************************************************************/ + +#endif /* __NM_DEFAULT_LIBNM_H__ */ diff --git a/libnm/nm-device-6lowpan.c b/libnm/nm-device-6lowpan.c index b08146b..ccb8ae0 100644 --- a/libnm/nm-device-6lowpan.c +++ b/libnm/nm-device-6lowpan.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-6lowpan.h" diff --git a/libnm/nm-device-adsl.c b/libnm/nm-device-adsl.c index f9600b3..ff64cd3 100644 --- a/libnm/nm-device-adsl.c +++ b/libnm/nm-device-adsl.c @@ -4,7 +4,7 @@ * Copyright (C) 2009 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-adsl.h" diff --git a/libnm/nm-device-bond.c b/libnm/nm-device-bond.c index 2ff91f1..1214964 100644 --- a/libnm/nm-device-bond.c +++ b/libnm/nm-device-bond.c @@ -3,7 +3,7 @@ * Copyright (C) 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-setting-bond.h" diff --git a/libnm/nm-device-bridge.c b/libnm/nm-device-bridge.c index 2cc848b..732c5a2 100644 --- a/libnm/nm-device-bridge.c +++ b/libnm/nm-device-bridge.c @@ -3,7 +3,7 @@ * Copyright (C) 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-setting-bridge.h" diff --git a/libnm/nm-device-bt.c b/libnm/nm-device-bt.c index 605e1e8..55f0a94 100644 --- a/libnm/nm-device-bt.c +++ b/libnm/nm-device-bt.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-bt.h" diff --git a/libnm/nm-device-dummy.c b/libnm/nm-device-dummy.c index dd32653..6b92810 100644 --- a/libnm/nm-device-dummy.c +++ b/libnm/nm-device-dummy.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-dummy.h" diff --git a/libnm/nm-device-ethernet.c b/libnm/nm-device-ethernet.c index cf5efca..b7173c8 100644 --- a/libnm/nm-device-ethernet.c +++ b/libnm/nm-device-ethernet.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-ethernet.h" diff --git a/libnm/nm-device-generic.c b/libnm/nm-device-generic.c index 7a72424..ebc73a7 100644 --- a/libnm/nm-device-generic.c +++ b/libnm/nm-device-generic.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-generic.h" diff --git a/libnm/nm-device-infiniband.c b/libnm/nm-device-infiniband.c index 9500ff3..820a4ab 100644 --- a/libnm/nm-device-infiniband.c +++ b/libnm/nm-device-infiniband.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 - 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-infiniband.h" diff --git a/libnm/nm-device-ip-tunnel.c b/libnm/nm-device-ip-tunnel.c index 005307e..a6d2ef4 100644 --- a/libnm/nm-device-ip-tunnel.c +++ b/libnm/nm-device-ip-tunnel.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-ip-tunnel.h" diff --git a/libnm/nm-device-macsec.c b/libnm/nm-device-macsec.c index 10d902c..3d6e1d3 100644 --- a/libnm/nm-device-macsec.c +++ b/libnm/nm-device-macsec.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-macsec.h" diff --git a/libnm/nm-device-macvlan.c b/libnm/nm-device-macvlan.c index d29fc79..773de99 100644 --- a/libnm/nm-device-macvlan.c +++ b/libnm/nm-device-macvlan.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-setting-macvlan.h" diff --git a/libnm/nm-device-modem.c b/libnm/nm-device-modem.c index 06db196..51b49fe 100644 --- a/libnm/nm-device-modem.c +++ b/libnm/nm-device-modem.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-modem.h" diff --git a/libnm/nm-device-olpc-mesh.c b/libnm/nm-device-olpc-mesh.c index 573556b..697b338 100644 --- a/libnm/nm-device-olpc-mesh.c +++ b/libnm/nm-device-olpc-mesh.c @@ -3,7 +3,7 @@ * Copyright (C) 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-olpc-mesh.h" diff --git a/libnm/nm-device-ovs-bridge.c b/libnm/nm-device-ovs-bridge.c index f2f9553..9c17554 100644 --- a/libnm/nm-device-ovs-bridge.c +++ b/libnm/nm-device-ovs-bridge.c @@ -3,7 +3,7 @@ * Copyright (C) 2017, 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-ovs-bridge.h" diff --git a/libnm/nm-device-ovs-interface.c b/libnm/nm-device-ovs-interface.c index 8148b6c..1c757a5 100644 --- a/libnm/nm-device-ovs-interface.c +++ b/libnm/nm-device-ovs-interface.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-ovs-interface.h" diff --git a/libnm/nm-device-ovs-port.c b/libnm/nm-device-ovs-port.c index dfad8bc..1b3faa5 100644 --- a/libnm/nm-device-ovs-port.c +++ b/libnm/nm-device-ovs-port.c @@ -3,7 +3,7 @@ * Copyright (C) 2017, 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-ovs-port.h" diff --git a/libnm/nm-device-ppp.c b/libnm/nm-device-ppp.c index c693a4f..a1c1f74 100644 --- a/libnm/nm-device-ppp.c +++ b/libnm/nm-device-ppp.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-ppp.h" diff --git a/libnm/nm-device-team.c b/libnm/nm-device-team.c index d75acce..d76dd5c 100644 --- a/libnm/nm-device-team.c +++ b/libnm/nm-device-team.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Jiri Pirko */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-team.h" diff --git a/libnm/nm-device-tun.c b/libnm/nm-device-tun.c index aed3548..0445da9 100644 --- a/libnm/nm-device-tun.c +++ b/libnm/nm-device-tun.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-tun.h" diff --git a/libnm/nm-device-veth.c b/libnm/nm-device-veth.c index 34f1cda..9a9f768 100644 --- a/libnm/nm-device-veth.c +++ b/libnm/nm-device-veth.c @@ -3,7 +3,7 @@ * Copyright (C) 2020 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-veth.h" diff --git a/libnm/nm-device-vlan.c b/libnm/nm-device-vlan.c index 4b39993..e7419b2 100644 --- a/libnm/nm-device-vlan.c +++ b/libnm/nm-device-vlan.c @@ -3,7 +3,7 @@ * Copyright (C) 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-vlan.h" diff --git a/libnm/nm-device-vrf.c b/libnm/nm-device-vrf.c index 3d2dcb6..73f2770 100644 --- a/libnm/nm-device-vrf.c +++ b/libnm/nm-device-vrf.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-vrf.h" diff --git a/libnm/nm-device-vxlan.c b/libnm/nm-device-vxlan.c index b315801..36d95f9 100644 --- a/libnm/nm-device-vxlan.c +++ b/libnm/nm-device-vxlan.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-vxlan.h" diff --git a/libnm/nm-device-wifi-p2p.c b/libnm/nm-device-wifi-p2p.c index 6042580..019bf1c 100644 --- a/libnm/nm-device-wifi-p2p.c +++ b/libnm/nm-device-wifi-p2p.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 - 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-wifi-p2p.h" diff --git a/libnm/nm-device-wifi.c b/libnm/nm-device-wifi.c index 9c60220..90e4a30 100644 --- a/libnm/nm-device-wifi.c +++ b/libnm/nm-device-wifi.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-wifi.h" diff --git a/libnm/nm-device-wimax.c b/libnm/nm-device-wimax.c index 37c5534..9b42354 100644 --- a/libnm/nm-device-wimax.c +++ b/libnm/nm-device-wimax.c @@ -4,7 +4,7 @@ * Copyright (C) 2009 Novell, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-wimax.h" diff --git a/libnm/nm-device-wireguard.c b/libnm/nm-device-wireguard.c index 1a97884..a4baec4 100644 --- a/libnm/nm-device-wireguard.c +++ b/libnm/nm-device-wireguard.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Javier Arteaga */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-wireguard.h" diff --git a/libnm/nm-device-wpan.c b/libnm/nm-device-wpan.c index 5d94c8e..7218a8c 100644 --- a/libnm/nm-device-wpan.c +++ b/libnm/nm-device-wpan.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Lubomir Rintel */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device-wpan.h" diff --git a/libnm/nm-device.c b/libnm/nm-device.c index 031ce43..9cb88da 100644 --- a/libnm/nm-device.c +++ b/libnm/nm-device.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-device.h" diff --git a/libnm/nm-dhcp-config.c b/libnm/nm-dhcp-config.c index b76cbe9..ec7da6d 100644 --- a/libnm/nm-dhcp-config.c +++ b/libnm/nm-dhcp-config.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-dhcp-config.h" diff --git a/libnm/nm-dhcp4-config.c b/libnm/nm-dhcp4-config.c index be28069..25219d4 100644 --- a/libnm/nm-dhcp4-config.c +++ b/libnm/nm-dhcp4-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-dhcp4-config.h" diff --git a/libnm/nm-dhcp6-config.c b/libnm/nm-dhcp6-config.c index 3659f60..2574b36 100644 --- a/libnm/nm-dhcp6-config.c +++ b/libnm/nm-dhcp6-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-dhcp6-config.h" diff --git a/libnm/nm-dns-manager.c b/libnm/nm-dns-manager.c index ada9787..6261c71 100644 --- a/libnm/nm-dns-manager.c +++ b/libnm/nm-dns-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-dns-manager.h" diff --git a/libnm/nm-ethtool-utils.h b/libnm/nm-ethtool-utils.h index e8df3da..d422724 100644 --- a/libnm/nm-ethtool-utils.h +++ b/libnm/nm-ethtool-utils.h @@ -20,6 +20,7 @@ G_BEGIN_DECLS #define NM_ETHTOOL_OPTNAME_FEATURE_L2_FWD_OFFLOAD "feature-l2-fwd-offload" #define NM_ETHTOOL_OPTNAME_FEATURE_LOOPBACK "feature-loopback" #define NM_ETHTOOL_OPTNAME_FEATURE_LRO "feature-lro" +#define NM_ETHTOOL_OPTNAME_FEATURE_MACSEC_HW_OFFLOAD "feature-macsec-hw-offload" #define NM_ETHTOOL_OPTNAME_FEATURE_NTUPLE "feature-ntuple" #define NM_ETHTOOL_OPTNAME_FEATURE_RX "feature-rx" #define NM_ETHTOOL_OPTNAME_FEATURE_RXHASH "feature-rxhash" @@ -27,12 +28,15 @@ G_BEGIN_DECLS #define NM_ETHTOOL_OPTNAME_FEATURE_RX_ALL "feature-rx-all" #define NM_ETHTOOL_OPTNAME_FEATURE_RX_FCS "feature-rx-fcs" #define NM_ETHTOOL_OPTNAME_FEATURE_RX_GRO_HW "feature-rx-gro-hw" +#define NM_ETHTOOL_OPTNAME_FEATURE_RX_GRO_LIST "feature-rx-gro-list" +#define NM_ETHTOOL_OPTNAME_FEATURE_RX_UDP_GRO_FORWARDING "feature-rx-udp-gro-forwarding" #define NM_ETHTOOL_OPTNAME_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD "feature-rx-udp_tunnel-port-offload" #define NM_ETHTOOL_OPTNAME_FEATURE_RX_VLAN_FILTER "feature-rx-vlan-filter" #define NM_ETHTOOL_OPTNAME_FEATURE_RX_VLAN_STAG_FILTER "feature-rx-vlan-stag-filter" #define NM_ETHTOOL_OPTNAME_FEATURE_RX_VLAN_STAG_HW_PARSE "feature-rx-vlan-stag-hw-parse" #define NM_ETHTOOL_OPTNAME_FEATURE_SG "feature-sg" #define NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_RECORD "feature-tls-hw-record" +#define NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_RX_OFFLOAD "feature-tls-hw-rx-offload" #define NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_TX_OFFLOAD "feature-tls-hw-tx-offload" #define NM_ETHTOOL_OPTNAME_FEATURE_TSO "feature-tso" #define NM_ETHTOOL_OPTNAME_FEATURE_TX "feature-tx" @@ -46,6 +50,7 @@ G_BEGIN_DECLS #define NM_ETHTOOL_OPTNAME_FEATURE_TX_FCOE_SEGMENTATION "feature-tx-fcoe-segmentation" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_CSUM_SEGMENTATION "feature-tx-gre-csum-segmentation" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_SEGMENTATION "feature-tx-gre-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_LIST "feature-tx-gso-list" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_PARTIAL "feature-tx-gso-partial" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_ROBUST "feature-tx-gso-robust" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_IPXIP4_SEGMENTATION "feature-tx-ipxip4-segmentation" @@ -59,6 +64,8 @@ G_BEGIN_DECLS #define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_MANGLEID_SEGMENTATION \ "feature-tx-tcp-mangleid-segmentation" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_SEGMENTATION "feature-tx-tcp-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION \ + "feature-tx-tunnel-remcsum-segmentation" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_SEGMENTATION "feature-tx-udp-segmentation" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION \ "feature-tx-udp_tnl-csum-segmentation" diff --git a/libnm/nm-ip-config.c b/libnm/nm-ip-config.c index 3c2b221..1663c62 100644 --- a/libnm/nm-ip-config.c +++ b/libnm/nm-ip-config.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-ip-config.h" diff --git a/libnm/nm-ip4-config.c b/libnm/nm-ip4-config.c index a73fc9f..6c4a4ab 100644 --- a/libnm/nm-ip4-config.c +++ b/libnm/nm-ip4-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-ip4-config.h" diff --git a/libnm/nm-ip6-config.c b/libnm/nm-ip6-config.c index a58da8e..19c869c 100644 --- a/libnm/nm-ip6-config.c +++ b/libnm/nm-ip6-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-ip6-config.h" diff --git a/libnm/nm-libnm-aux/nm-libnm-aux.c b/libnm/nm-libnm-aux/nm-libnm-aux.c index 90152b5..2b8d2c2 100644 --- a/libnm/nm-libnm-aux/nm-libnm-aux.c +++ b/libnm/nm-libnm-aux/nm-libnm-aux.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-libnm-aux.h" diff --git a/libnm/nm-libnm-utils.c b/libnm/nm-libnm-utils.c index fc843bc..1fb6a47 100644 --- a/libnm/nm-libnm-utils.c +++ b/libnm/nm-libnm-utils.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-libnm-utils.h" diff --git a/libnm/nm-object.c b/libnm/nm-object.c index 8b8dfd4..00e520d 100644 --- a/libnm/nm-object.c +++ b/libnm/nm-object.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-object.h" diff --git a/libnm/nm-property-infos-ifcfg-rh.xml b/libnm/nm-property-infos-ifcfg-rh.xml index e9a39e5..1c6aced 100644 --- a/libnm/nm-property-infos-ifcfg-rh.xml +++ b/libnm/nm-property-infos-ifcfg-rh.xml @@ -17,8 +17,9 @@ - + diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c index 70e43ba..b5b12bf 100644 --- a/libnm/nm-remote-connection.c +++ b/libnm/nm-remote-connection.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-remote-connection.h" diff --git a/libnm/nm-secret-agent-old.c b/libnm/nm-secret-agent-old.c index 3b64c66..8f826ed 100644 --- a/libnm/nm-secret-agent-old.c +++ b/libnm/nm-secret-agent-old.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-secret-agent-old.h" diff --git a/libnm/nm-settings-docs-gir.xml b/libnm/nm-settings-docs-gir.xml index 9cc7a3c..f71d2ba 100644 --- a/libnm/nm-settings-docs-gir.xml +++ b/libnm/nm-settings-docs-gir.xml @@ -59,8 +59,8 @@ - - + + diff --git a/libnm/nm-vpn-connection.c b/libnm/nm-vpn-connection.c index e7ae3bf..cdbaefc 100644 --- a/libnm/nm-vpn-connection.c +++ b/libnm/nm-vpn-connection.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-vpn-connection.h" diff --git a/libnm/nm-vpn-editor.c b/libnm/nm-vpn-editor.c index c2b9f1f..e326958 100644 --- a/libnm/nm-vpn-editor.c +++ b/libnm/nm-vpn-editor.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 Novell, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-vpn-editor.h" diff --git a/libnm/nm-vpn-plugin-old.c b/libnm/nm-vpn-plugin-old.c index b082663..f45d0c0 100644 --- a/libnm/nm-vpn-plugin-old.c +++ b/libnm/nm-vpn-plugin-old.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-vpn-plugin-old.h" diff --git a/libnm/nm-vpn-service-plugin.c b/libnm/nm-vpn-service-plugin.c index 52e0657..34de21b 100644 --- a/libnm/nm-vpn-service-plugin.c +++ b/libnm/nm-vpn-service-plugin.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-vpn-service-plugin.h" diff --git a/libnm/nm-wifi-p2p-peer.c b/libnm/nm-wifi-p2p-peer.c index 75a3775..cab4648 100644 --- a/libnm/nm-wifi-p2p-peer.c +++ b/libnm/nm-wifi-p2p-peer.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 - 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-wifi-p2p-peer.h" diff --git a/libnm/nm-wimax-nsp.c b/libnm/nm-wimax-nsp.c index 0a853d8..421fe9e 100644 --- a/libnm/nm-wimax-nsp.c +++ b/libnm/nm-wimax-nsp.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-wimax-nsp.h" diff --git a/libnm/tests/meson.build b/libnm/tests/meson.build index 71dc83e..08eecfb 100644 --- a/libnm/tests/meson.build +++ b/libnm/tests/meson.build @@ -20,8 +20,7 @@ foreach test_unit: test_units libnm_nm_default_dep, ], c_args: [ - '-DNETWORKMANAGER_COMPILATION_TEST', - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM', + '-DG_LOG_DOMAIN="test"', ], link_with: libnm_static, ) @@ -41,7 +40,6 @@ libnm_vpn_plugin_utils_test = static_library( include_directories: libnm_inc, dependencies: libnm_nm_default_dep, c_args: [ - '-DNETWORKMANAGER_COMPILATION_TEST', - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM', + '-DG_LOG_DOMAIN="test"', ], ) diff --git a/libnm/tests/test-libnm.c b/libnm/tests/test-libnm.c index 48f4bc7..a90acd9 100644 --- a/libnm/tests/test-libnm.c +++ b/libnm/tests/test-libnm.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #if defined(HAVE_DECL_MEMFD_CREATE) && HAVE_DECL_MEMFD_CREATE #include diff --git a/libnm/tests/test-nm-client.c b/libnm/tests/test-nm-client.c index 42eafae..5452c62 100644 --- a/libnm/tests/test-nm-client.c +++ b/libnm/tests/test-nm-client.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include #include diff --git a/libnm/tests/test-remote-settings-client.c b/libnm/tests/test-remote-settings-client.c index 9a99cfa..0e7b744 100644 --- a/libnm/tests/test-remote-settings-client.c +++ b/libnm/tests/test-remote-settings-client.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include #include diff --git a/libnm/tests/test-secret-agent.c b/libnm/tests/test-secret-agent.c index bc1e624..08c77f8 100644 --- a/libnm/tests/test-secret-agent.c +++ b/libnm/tests/test-secret-agent.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include #include diff --git a/man/NetworkManager.8 b/man/NetworkManager.8 index 88c0857..14b3a00 100644 --- a/man/NetworkManager.8 +++ b/man/NetworkManager.8 @@ -2,12 +2,12 @@ .\" Title: NetworkManager .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: Network management daemons -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.29\&.11" "Network management daemons" +.TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.29\&.90" "Network management daemons" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/NetworkManager.conf.5 b/man/NetworkManager.conf.5 index ca3e759..f3d85d5 100644 --- a/man/NetworkManager.conf.5 +++ b/man/NetworkManager.conf.5 @@ -2,12 +2,12 @@ .\" Title: NetworkManager.conf .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: Configuration -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NETWORKMANAGER\&.CONF" "5" "" "NetworkManager 1\&.29\&.11" "Configuration" +.TH "NETWORKMANAGER\&.CONF" "5" "" "NetworkManager 1\&.29\&.90" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-cloud-setup.8 b/man/nm-cloud-setup.8 index 0cd843f..6060b14 100644 --- a/man/nm-cloud-setup.8 +++ b/man/nm-cloud-setup.8 @@ -2,12 +2,12 @@ .\" Title: nm-cloud-setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: Automatic Network Configuration in Cloud with NetworkManager -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NM\-CLOUD\-SETUP" "8" "" "NetworkManager 1\&.29\&.11" "Automatic Network Configuratio" +.TH "NM\-CLOUD\-SETUP" "8" "" "NetworkManager 1\&.29\&.90" "Automatic Network Configuratio" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-initrd-generator.8 b/man/nm-initrd-generator.8 index 6278d66..0e805ed 100644 --- a/man/nm-initrd-generator.8 +++ b/man/nm-initrd-generator.8 @@ -2,12 +2,12 @@ .\" Title: nm-initrd-generator .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: System Administration -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NM\-INITRD\-GENERATOR" "8" "" "NetworkManager 1\&.29\&.11" "System Administration" +.TH "NM\-INITRD\-GENERATOR" "8" "" "NetworkManager 1\&.29\&.90" "System Administration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-online.1 b/man/nm-online.1 index be18f7a..290e2f2 100644 --- a/man/nm-online.1 +++ b/man/nm-online.1 @@ -2,12 +2,12 @@ .\" Title: nm-online .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: General Commands Manual -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NM\-ONLINE" "1" "" "NetworkManager 1\&.29\&.11" "General Commands Manual" +.TH "NM\-ONLINE" "1" "" "NetworkManager 1\&.29\&.90" "General Commands Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-openvswitch.7 b/man/nm-openvswitch.7 index 2dabd2a..89ddbad 100644 --- a/man/nm-openvswitch.7 +++ b/man/nm-openvswitch.7 @@ -2,12 +2,12 @@ .\" Title: nm-openvswitch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: Open vSwitch support overview -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NM\-OPENVSWITCH" "7" "" "NetworkManager 1\&.29\&.11" "Open vSwitch support overview" +.TH "NM\-OPENVSWITCH" "7" "" "NetworkManager 1\&.29\&.90" "Open vSwitch support overview" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-dbus.5 b/man/nm-settings-dbus.5 index 292ff4c..e348c65 100644 --- a/man/nm-settings-dbus.5 +++ b/man/nm-settings-dbus.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-dbus .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: Configuration -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NM\-SETTINGS\-DBUS" "5" "" "NetworkManager 1\&.29\&.11" "Configuration" +.TH "NM\-SETTINGS\-DBUS" "5" "" "NetworkManager 1\&.29\&.90" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -649,7 +649,7 @@ string T}:T{ \ \& T}:T{ -Specifies the allowed "phase 2" inner non\-EAP authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property\&. Recognized non\-EAP "phase 2" methods are "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls"\&. Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details\&. +Specifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property\&. For TTLS this property selects one of the supported non\-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2\-autheap" selects an EAP inner method\&. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls"\&. Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details\&. Both "phase2\-auth" and "phase2\-autheap" cannot be specified\&. T} T{ phase2\-autheap @@ -658,7 +658,7 @@ string T}:T{ \ \& T}:T{ -Specifies the allowed "phase 2" inner EAP\-based authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property\&. Recognized EAP\-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls"\&. Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details\&. +Specifies the allowed "phase 2" inner EAP\-based authentication method when TTLS is specified in the "eap" property\&. Recognized EAP\-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls"\&. Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details\&. T} T{ phase2\-ca\-cert diff --git a/man/nm-settings-dbus.xml b/man/nm-settings-dbus.xml index c65413d..16c4db0 100644 --- a/man/nm-settings-dbus.xml +++ b/man/nm-settings-dbus.xml @@ -1,6 +1,6 @@ -nm-settings-dbusNetworkManager developersnm-settings-dbus5NetworkManagerConfiguration1.29.11nm-settings-dbusDescription of settings and properties of NetworkManager connection profiles on the D-Bus APIDescription +nm-settings-dbusNetworkManager developersnm-settings-dbus5NetworkManagerConfiguration1.29.90nm-settings-dbusDescription of settings and properties of NetworkManager connection profiles on the D-Bus APIDescription NetworkManager is based on a concept of connection profiles, sometimes referred to as connections only. These connection profiles contain a network configuration. When NetworkManager activates a connection profile on a network device the configuration will @@ -32,7 +32,7 @@ profile type. nmcli connection editor has also a built-in describe command that can display description of particular settings and properties of this page. - connection settingGeneral Connection Profile Settings.Key NameValue TypeDefault ValueValue Descriptionauth-retriesint32-1The number of retries for the authentication. Zero means to try indefinitely; -1 means to use a global default. If the global default is not set, the authentication retries for 3 times before failing the connection. Currently, this only applies to 802-1x authentication.autoconnectbooleanTRUEWhether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles.autoconnect-priorityint320The autoconnect priority. If the connection is set to autoconnect, connections with higher priority will be preferred. Defaults to 0. The higher number means higher priority.autoconnect-retriesint32-1The number of times a connection should be tried when autoactivating before giving up. Zero means forever, -1 means the global default (4 times if not overridden). Setting this to 1 means to try activation only once before blocking autoconnect. Note that after a timeout, NetworkManager will try to autoconnect again.autoconnect-slavesNMSettingConnectionAutoconnectSlaves (int32)Whether or not slaves of this connection should be automatically brought up when NetworkManager activates this connection. This only has a real effect for master connections. The properties "autoconnect", "autoconnect-priority" and "autoconnect-retries" are unrelated to this setting. The permitted values are: 0: leave slave connections untouched, 1: activate all the slave connections with this connection, -1: default. If -1 (default) is set, global connection.autoconnect-slaves is read to determine the real value. If it is default as well, this fallbacks to 0.gateway-ping-timeoutuint320If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping.idstringA human readable unique identifier for the connection, like "Work Wi-Fi" or "T-Mobile 3G".interface-namestringThe name of the network interface this connection is bound to. If not set, then the connection can be attached to any interface of the appropriate type (subject to restrictions imposed by other settings). For software devices this specifies the name of the created device. For connection types where interface names cannot easily be made persistent (e.g. mobile broadband or USB Ethernet), this property should not be used. Setting this property restricts the interfaces a connection can be used with, and if interface names change or are reordered the connection may be applied to the wrong interface.lldpint32-1Whether LLDP is enabled for the connection.llmnrint32-1Whether Link-Local Multicast Name Resolution (LLMNR) is enabled for the connection. LLMNR is a protocol based on the Domain Name System (DNS) packet format that allows both IPv4 and IPv6 hosts to perform name resolution for hosts on the same local link. The permitted values are: "yes" (2) register hostname and resolving for the connection, "no" (0) disable LLMNR for the interface, "resolve" (1) do not register hostname but allow resolving of LLMNR host names If unspecified, "default" ultimately depends on the DNS plugin (which for systemd-resolved currently means "yes"). This feature requires a plugin which supports LLMNR. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.masterstringInterface name of the master device or UUID of the master connection.mdnsint32-1Whether mDNS is enabled for the connection. The permitted values are: "yes" (2) register hostname and resolving for the connection, "no" (0) disable mDNS for the interface, "resolve" (1) do not register hostname but allow resolving of mDNS host names and "default" (-1) to allow lookup of a global default in NetworkManager.conf. If unspecified, "default" ultimately depends on the DNS plugin (which for systemd-resolved currently means "no"). This feature requires a plugin which supports mDNS. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.meteredNMMetered (int32)Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately.mud-urlstringIf configured, set to a Manufacturer Usage Description (MUD) URL that points to manufacturer-recommended network policies for IoT devices. It is transmitted as a DHCPv4 or DHCPv6 option. The value must be a valid URL starting with "https://". The special value "none" is allowed to indicate that no MUD URL is used. If the per-profile value is unspecified (the default), a global connection default gets consulted. If still unspecified, the ultimate default is "none".multi-connectint320Specifies whether the profile can be active multiple times at a particular moment. The value is of type NMConnectionMultiConnect.permissionsarray of stringAn array of strings defining what access a given user has to this connection. If this is NULL or empty, all users are allowed to access this connection; otherwise users are allowed if and only if they are in this list. When this is not empty, the connection can be active only when one of the specified users is logged into an active session. Each entry is of the form "[type]:[id]:[reserved]"; for example, "user:dcbw:blah". At this time only the "user" [type] is allowed. Any other values are ignored and reserved for future use. [id] is the username that this permission refers to, which may not contain the ":" character. Any [reserved] information present must be ignored and is reserved for future use. All of [type], [id], and [reserved] must be valid UTF-8.read-onlybooleanFALSEFALSE if the connection can be modified using the provided settings service's D-Bus interface with the right privileges, or TRUE if the connection is read-only and cannot be modified.secondariesarray of stringList of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported.slave-typestringSetting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave.stable-idstringThis represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used as DHCP client identifier with ipv4.dhcp-client-id=stable and to derive the DHCP DUID with ipv6.dhcp-duid=stable-[llt,ll,uuid]. Note that depending on the context where it is used, other parameters are also seeded into the generation algorithm. For example, a per-host key is commonly also included, so that different systems end up generating different IDs. Or with ipv6.addr-gen-mode=stable-privacy, also the device's name is included, so that different interfaces yield different addresses. The per-host key is the identity of your machine and stored in /var/lib/NetworkManager/secret-key. The '$' character is treated special to perform dynamic substitutions at runtime. Currently, supported are "${CONNECTION}", "${DEVICE}", "${MAC}", "${BOOT}", "${RANDOM}". These effectively create unique IDs per-connection, per-device, per-boot, or every time. Note that "${DEVICE}" corresponds to the interface name of the device and "${MAC}" is the permanent MAC address of the device. Any unrecognized patterns following '$' are treated verbatim, however are reserved for future use. You are thus advised to avoid '$' or escape it as "$$". For example, set it to "${CONNECTION}-${BOOT}-${DEVICE}" to create a unique id for this connection that changes with every reboot and differs depending on the interface where the profile activates. If the value is unset, a global connection default is consulted. If the value is still unset, the default is similar to "${CONNECTION}" and uses a unique, fixed ID for the connection.timestampuint640The time, in seconds since the Unix Epoch, that the connection was last _successfully_ fully activated. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp. The property is only meant for reading (changes to this property will not be preserved).typestringBase type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, "802-3-ethernet" or "802-11-wireless" or "bluetooth", etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, "vpn" or "bridge", etc).uuidstringA universally unique identifier for the connection, for example generated with libuuid. It should be assigned when the connection is created, and never changed as long as the connection still applies to the same network. For example, it should not be changed when the "id" property or NMSettingIP4Config changes, but might need to be re-created when the Wi-Fi SSID, mobile broadband network provider, or "type" property changes. The UUID must be in the format "2815492f-7e56-435e-b2e9-246bd7cdc664" (ie, contains only hexadecimal characters and "-").wait-device-timeoutint32-1Timeout in milliseconds to wait for device at startup. During boot, devices may take a while to be detected by the driver. This property will cause to delay NetworkManager-wait-online.service and nm-online to give the device a chance to appear. This works by waiting for the given timeout until a compatible device for the profile is available and managed. The value 0 means no wait time. The default value is -1, which currently has the same meaning as no wait time.zonestringThe trust level of a the connection. Free form case-insensitive string (for example "Home", "Work", "Public"). NULL or unspecified zone means the connection will be placed in the default zone as defined by the firewall. When updating this property on a currently activated connection, the change takes effect immediately.6lowpan setting6LoWPAN Settings.Key NameValue TypeDefault ValueValue DescriptionparentstringIf given, specifies the parent interface name or parent connection UUID from which this 6LowPAN interface should be created.802-1x settingIEEE 802.1x Authentication Settings.Key NameValue TypeDefault ValueValue Descriptionaltsubject-matchesarray of stringList of strings to be matched against the altSubjectName of the certificate presented by the authentication server. If the list is empty, no verification of the server certificate's altSubjectName is performed.anonymous-identitystringAnonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS.auth-timeoutint320A timeout for the authentication. Zero means the global default; if the global default is not set, the authentication timeout is 25 seconds.ca-certbyte arrayContains the CA certificate if used by the EAP method specified in the "eap" property. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory.ca-cert-passwordstringThe password used to access the CA certificate stored in "ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.ca-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "ca-cert-password" property. (see for flag values)ca-pathstringUTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the "ca-cert" property. If NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an existing directory, then this setting is ignored.client-certbyte arrayContains the client certificate if used by the EAP method specified in the "eap" property. Certificate data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte.client-cert-passwordstringThe password used to access the client certificate stored in "client-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.client-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "client-cert-password" property. (see for flag values)domain-matchstringConstraint for server domain name. If set, this list of FQDNs is used as a match requirement for dNSName element(s) of the certificate presented by the authentication server. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using the same comparison. Multiple valid FQDNs can be passed as a ";" delimited list.domain-suffix-matchstringConstraint for server domain name. If set, this FQDN is used as a suffix match requirement for dNSName element(s) of the certificate presented by the authentication server. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using same suffix match comparison. Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited list.eaparray of stringThe allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: "leap", "md5", "tls", "peap", "ttls", "pwd", and "fast". Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations.identitystringIdentity string for EAP authentication methods. Often the user's user or login name.optionalbooleanFALSEWhether the 802.1X authentication is optional. If TRUE, the activation will continue even after a timeout or an authentication failure. Setting the property to TRUE is currently allowed only for Ethernet connections. If set to FALSE, the activation can continue only after a successful authentication.pac-filestringUTF-8 encoded file path containing PAC for EAP-FAST.passwordstringUTF-8 encoded password used for EAP authentication methods. If both the "password" property and the "password-raw" property are specified, "password" is preferred.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)password-rawbyte arrayPassword used for EAP authentication methods, given as a byte array to allow passwords in other encodings than UTF-8 to be used. If both the "password" property and the "password-raw" property are specified, "password" is preferred.password-raw-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password-raw" property. (see for flag values)phase1-auth-flagsuint320Specifies authentication flags to use in "phase 1" outer authentication using NMSetting8021xAuthFlags options. The individual TLS versions can be explicitly disabled. If a certain TLS disable flag is not set, it is up to the supplicant to allow or forbid it. The TLS options map to tls_disable_tlsv1_x settings. See the wpa_supplicant documentation for more details.phase1-fast-provisioningstringEnables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the "eap" property. Recognized values are "0" (disabled), "1" (allow unauthenticated provisioning), "2" (allow authenticated provisioning), and "3" (allow both authenticated and unauthenticated provisioning). See the wpa_supplicant documentation for more details.phase1-peaplabelstringForces use of the new PEAP label during key derivation. Some RADIUS servers may require forcing the new PEAP label to interoperate with PEAPv1. Set to "1" to force use of the new PEAP label. See the wpa_supplicant documentation for more details.phase1-peapverstringForces which PEAP version is used when PEAP is set as the EAP method in the "eap" property. When unset, the version reported by the server will be used. Sometimes when using older RADIUS servers, it is necessary to force the client to use a particular PEAP version. To do so, this property may be set to "0" or "1" to force that specific PEAP version.phase2-altsubject-matchesarray of stringList of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner "phase 2" authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed.phase2-authstringSpecifies the allowed "phase 2" inner non-EAP authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. Recognized non-EAP "phase 2" methods are "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.phase2-autheapstringSpecifies the allowed "phase 2" inner EAP-based authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.phase2-ca-certbyte arrayContains the "phase 2" CA certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory.phase2-ca-cert-passwordstringThe password used to access the "phase2" CA certificate stored in "phase2-ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.phase2-ca-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-ca-cert-password" property. (see for flag values)phase2-ca-pathstringUTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the "phase2-ca-cert" property. If NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an existing directory, then this setting is ignored.phase2-client-certbyte arrayContains the "phase 2" client certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended.phase2-client-cert-passwordstringThe password used to access the "phase2" client certificate stored in "phase2-client-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.phase2-client-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-client-cert-password" property. (see for flag values)phase2-domain-matchstringConstraint for server domain name. If set, this list of FQDNs is used as a match requirement for dNSName element(s) of the certificate presented by the authentication server during the inner "phase 2" authentication. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using the same comparison. Multiple valid FQDNs can be passed as a ";" delimited list.phase2-domain-suffix-matchstringConstraint for server domain name. If set, this FQDN is used as a suffix match requirement for dNSName element(s) of the certificate presented by the authentication server during the inner "phase 2" authentication. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using same suffix match comparison. Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited list.phase2-private-keybyte arrayContains the "phase 2" inner private key when the "phase2-auth" or "phase2-autheap" property is set to "tls". Key data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the "phase2-private-key-password" property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte, and as with the blob scheme the "phase2-private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate.phase2-private-key-passwordstringThe password used to decrypt the "phase 2" private key specified in the "phase2-private-key" property when the private key either uses the path scheme, or is a PKCS#12 format key.phase2-private-key-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-private-key-password" property. (see for flag values)phase2-subject-matchstringSubstring to be matched against the subject of the certificate presented by the authentication server during the inner "phase 2" authentication. When unset, no verification of the authentication server certificate's subject is performed. This property provides little security, if any, and its use is deprecated in favor of NMSetting8021x:phase2-domain-suffix-match.pinstringPIN used for EAP authentication methods.pin-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "pin" property. (see for flag values)private-keybyte arrayContains the private key when the "eap" property is set to "tls". Key data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the "private-key-password" property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte, and as with the blob scheme the "private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate. WARNING: "private-key" is not a "secret" property, and thus unencrypted private key data using the BLOB scheme may be readable by unprivileged users. Private keys should always be encrypted with a private key password to prevent unauthorized access to unencrypted private key data.private-key-passwordstringThe password used to decrypt the private key specified in the "private-key" property when the private key either uses the path scheme, or if the private key is a PKCS#12 format key.private-key-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "private-key-password" property. (see for flag values)subject-matchstringSubstring to be matched against the subject of the certificate presented by the authentication server. When unset, no verification of the authentication server certificate's subject is performed. This property provides little security, if any, and its use is deprecated in favor of NMSetting8021x:domain-suffix-match.system-ca-certsbooleanFALSEWhen TRUE, overrides the "ca-path" and "phase2-ca-path" properties using the system CA directory specified at configure time with the --system-ca-path switch. The certificates in this directory are added to the verification chain in addition to any certificates specified by the "ca-cert" and "phase2-ca-cert" properties. If the path provided with --system-ca-path is rather a file name (bundle of trusted CA certificates), it overrides "ca-cert" and "phase2-ca-cert" properties instead (sets ca_cert/ca_cert2 options for wpa_supplicant).adsl settingADSL Settings.Key NameValue TypeDefault ValueValue DescriptionencapsulationstringEncapsulation of ADSL connection. Can be "vcmux" or "llc".passwordstringPassword used to authenticate with the ADSL service.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)protocolstringADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm".usernamestringUsername used to authenticate with the ADSL service.vciuint320VCI of ADSL connectionvpiuint320VPI of ADSL connectionbluetooth settingBluetooth Settings.Key NameValue TypeDefault ValueValue Descriptionbdaddrbyte arrayThe Bluetooth address of the device.typestringEither "dun" for Dial-Up Networking connections or "panu" for Personal Area Networking connections to devices supporting the NAP profile.bond settingBonding Settings.Key NameValue TypeDefault ValueValue Descriptioninterface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bond's interface name.optionsdict of string to string{'mode': 'balance-rr'}Dictionary of key/value pairs of bonding options. Both keys and values must be strings. Option names must contain only alphanumeric characters (ie, [a-zA-Z0-9]).bridge settingBridging Settings.Key NameValue TypeDefault ValueValue Descriptionageing-timeuint32300The Ethernet MAC address aging time, in seconds.forward-delayuint3215The Spanning Tree Protocol (STP) forwarding delay, in seconds.group-addressbyte arrayIf specified, The MAC address of the multicast group this bridge uses for STP. The address must be a link-local address in standard Ethernet MAC address format, ie an address of the form 01:80:C2:00:00:0X, with X in [0, 4..F]. If not specified the default value is 01:80:C2:00:00:00.group-forward-maskuint320A mask of group addresses to forward. Usually, group addresses in the range from 01:80:C2:00:00:00 to 01:80:C2:00:00:0F are not forwarded according to standards. This property is a mask of 16 bits, each corresponding to a group address in that range that must be forwarded. The mask can't have bits 0, 1 or 2 set because they are used for STP, MAC pause frames and LACP.hello-timeuint322The Spanning Tree Protocol (STP) hello time, in seconds.interface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bridge's interface name.mac-addressbyte arrayIf specified, the MAC address of bridge. When creating a new bridge, this MAC address will be set. If this field is left unspecified, the "ethernet.cloned-mac-address" is referred instead to generate the initial MAC address. Note that setting "ethernet.cloned-mac-address" anyway overwrites the MAC address of the bridge later while activating the bridge. Hence, this property is deprecated. Deprecated: 1max-ageuint3220The Spanning Tree Protocol (STP) maximum message age, in seconds.multicast-hash-maxuint324096Set maximum size of multicast hash table (value must be a power of 2).multicast-last-member-countuint322Set the number of queries the bridge will send before stopping forwarding a multicast group after a "leave" message has been received.multicast-last-member-intervaluint64100Set interval (in deciseconds) between queries to find remaining members of a group, after a "leave" message is received.multicast-membership-intervaluint6426000Set delay (in deciseconds) after which the bridge will leave a group, if no membership reports for this group are received.multicast-querierbooleanFALSEEnable or disable sending of multicast queries by the bridge. If not specified the option is disabled.multicast-querier-intervaluint6425500If no queries are seen after this delay (in deciseconds) has passed, the bridge will start to send its own queries.multicast-query-intervaluint6412500Interval (in deciseconds) between queries sent by the bridge after the end of the startup phase.multicast-query-response-intervaluint641000Set the Max Response Time/Max Response Delay (in deciseconds) for IGMP/MLD queries sent by the bridge.multicast-query-use-ifaddrbooleanFALSEIf enabled the bridge's own IP address is used as the source address for IGMP queries otherwise the default of 0.0.0.0 is used.multicast-routerstringSets bridge's multicast router. Multicast-snooping must be enabled for this option to work. Supported values are: 'auto', 'disabled', 'enabled' to which kernel assigns the numbers 1, 0, and 2, respectively. If not specified the default value is 'auto' (1).multicast-snoopingbooleanTRUEControls whether IGMP snooping is enabled for this bridge. Note that if snooping was automatically disabled due to hash collisions, the system may refuse to enable the feature until the collisions are resolved.multicast-startup-query-countuint322Set the number of IGMP queries to send during startup phase.multicast-startup-query-intervaluint643125Sets the time (in deciseconds) between queries sent out at startup to determine membership information.priorityuint3232768Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are "better"; the lowest priority bridge will be elected the root bridge.stpbooleanTRUEControls whether Spanning Tree Protocol (STP) is enabled for this bridge.vlan-default-pviduint321The default PVID for the ports of the bridge, that is the VLAN id assigned to incoming untagged frames.vlan-filteringbooleanFALSEControl whether VLAN filtering is enabled on the bridge.vlan-protocolstringIf specified, the protocol used for VLAN filtering. Supported values are: '802.1Q', '802.1ad'. If not specified the default value is '802.1Q'.vlan-stats-enabledbooleanFALSEControls whether per-VLAN stats accounting is enabled.vlansarray of vardictArray of bridge VLAN objects. In addition to the VLANs specified here, the bridge will also have the default-pvid VLAN configured by the bridge.vlan-default-pvid property. In nmcli the VLAN list can be specified with the following syntax: $vid [pvid] [untagged] [, $vid [pvid] [untagged]]... where $vid is either a single id between 1 and 4094 or a range, represented as a couple of ids separated by a dash.bridge-port settingBridge Port Settings.Key NameValue TypeDefault ValueValue Descriptionhairpin-modebooleanFALSEEnables or disables "hairpin mode" for the port, which allows frames to be sent back out through the port the frame was received on.path-costuint32100The Spanning Tree Protocol (STP) port cost for destinations via this port.priorityuint3232The Spanning Tree Protocol (STP) priority of this bridge port.vlansarray of vardictArray of bridge VLAN objects. In addition to the VLANs specified here, the port will also have the default-pvid VLAN configured on the bridge by the bridge.vlan-default-pvid property. In nmcli the VLAN list can be specified with the following syntax: $vid [pvid] [untagged] [, $vid [pvid] [untagged]]... where $vid is either a single id between 1 and 4094 or a range, represented as a couple of ids separated by a dash.cdma settingCDMA-based Mobile Broadband Settings.Key NameValue TypeDefault ValueValue Descriptionmtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.numberstringThe number to dial to establish the connection to the CDMA-based mobile broadband network, if any. If not specified, the default number (#777) is used when required.passwordstringThe password used to authenticate with the network, if required. Many providers do not require a password, or accept any password. But if a password is required, it is specified here.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)usernamestringThe username used to authenticate with the network, if required. Many providers do not require a username, or accept any username. But if a username is required, it is specified here.dcb settingData Center Bridging Settings.Key NameValue TypeDefault ValueValue Descriptionapp-fcoe-flagsNMSettingDcbFlags (uint32)Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).app-fcoe-modestring"fabric"The FCoE controller mode; either "fabric" (default) or "vn2vn".app-fcoe-priorityint32-1The highest User Priority (0 - 7) which FCoE frames should use, or -1 for default priority. Only used when the "app-fcoe-flags" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.app-fip-flagsNMSettingDcbFlags (uint32)Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).app-fip-priorityint32-1The highest User Priority (0 - 7) which FIP frames should use, or -1 for default priority. Only used when the "app-fip-flags" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.app-iscsi-flagsNMSettingDcbFlags (uint32)Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).app-iscsi-priorityint32-1The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for default priority. Only used when the "app-iscsi-flags" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.priority-bandwidtharray of uint32An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the percentage of bandwidth of the priority's assigned group that the priority may use. The sum of all percentages for priorities which belong to the same group must total 100 percents.priority-flow-controlarray of uint32An array of 8 boolean values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the corresponding priority should transmit priority pause.priority-flow-control-flagsNMSettingDcbFlags (uint32)Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).priority-group-bandwidtharray of uint32An array of 8 uint values, where the array index corresponds to the Priority Group ID (0 - 7) and the value indicates the percentage of link bandwidth allocated to that group. Allowed values are 0 - 100, and the sum of all values must total 100 percents.priority-group-flagsNMSettingDcbFlags (uint32)Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).priority-group-idarray of uint32An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the Priority Group ID. Allowed Priority Group ID values are 0 - 7 or 15 for the unrestricted group.priority-strict-bandwidtharray of uint32An array of 8 boolean values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the priority may use all of the bandwidth allocated to its assigned group.priority-traffic-classarray of uint32An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the traffic class (0 - 7) to which the priority is mapped.dummy settingDummy Link Settings.Key NameValue TypeDefault ValueValue Descriptionethtool settingEthtool Ethernet Settings.Key NameValue TypeDefault ValueValue Descriptiongeneric settingGeneric Link Settings.Key NameValue TypeDefault ValueValue Descriptiongsm settingGSM-based Mobile Broadband Settings.Key NameValue TypeDefault ValueValue DescriptionapnstringThe GPRS Access Point Name specifying the APN used when establishing a data session with the GSM-based network. The APN often determines how the user will be billed for their network usage and whether the user has access to the Internet or just a provider-specific walled-garden, so it is important to use the correct APN for the user's mobile broadband plan. The APN may only be composed of the characters a-z, 0-9, ., and - per GSM 03.60 Section 14.9.auto-configbooleanFALSEWhen TRUE, the settings such as APN, username, or password will default to values that match the network the modem will register to in the Mobile Broadband Provider database.device-idstringThe device unique identifier (as given by the WWAN management service) which this connection applies to. If given, the connection will only apply to the specified device.home-onlybooleanFALSEWhen TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.network-idstringThe Network ID (GSM LAI format, ie MCC-MNC) to force specific network registration. If the Network ID is specified, NetworkManager will attempt to force the device to register only on the specified network. This can be used to ensure that the device does not roam when direct roaming control of the device is not otherwise possible.numberstringLegacy setting that used to help establishing PPP data sessions for GSM-based modems. Deprecated: 1passwordstringThe password used to authenticate with the network, if required. Many providers do not require a password, or accept any password. But if a password is required, it is specified here.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)pinstringIf the SIM is locked with a PIN it must be unlocked before any other operations are requested. Specify the PIN here to allow operation of the device.pin-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "pin" property. (see for flag values)sim-idstringThe SIM card unique identifier (as given by the WWAN management service) which this connection applies to. If given, the connection will apply to any device also allowed by "device-id" which contains a SIM card matching the given identifier.sim-operator-idstringA MCC/MNC string like "310260" or "21601" identifying the specific mobile network operator which this connection applies to. If given, the connection will apply to any device also allowed by "device-id" and "sim-id" which contains a SIM card provisioned by the given operator.usernamestringThe username used to authenticate with the network, if required. Many providers do not require a username, or accept any username. But if a username is required, it is specified here.infiniband settingInfiniband Settings.Key NameValue TypeDefault ValueValue Descriptionmac-addressbyte arrayIf specified, this connection will only apply to the IPoIB device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.p-keyint32-1The InfiniBand P_Key to use for this device. A value of -1 means to use the default P_Key (aka "the P_Key at index 0"). Otherwise, it is a 16-bit unsigned integer, whose high bit is set if it is a "full membership" P_Key.parentstringThe interface name of the parent device of this device. Normally NULL, but if the "p_key" property is set, then you must specify the base device by setting either this property or "mac-address".transport-modestringThe IP-over-InfiniBand transport mode. Either "datagram" or "connected".ipv4 settingIPv4 Settings.Key NameValue TypeDefault ValueValue Descriptionaddress-dataarray of vardictArray of IPv4 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.addressesarray of array of uint32Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. Array of IPv4 address structures. Each IPv4 address structure is composed of 3 32-bit values; the first being the IPv4 address (network byte order), the second the prefix (1 - 32), and last the IPv4 gateway (network byte order). The gateway may be left as 0 if no gateway exists for that subnet.dad-timeoutint32-1Timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. A zero value means that no duplicate address detection is performed, -1 means the default value (either configuration ipvx.dad-timeout override or zero). A value greater than zero is a timeout in milliseconds. The property is currently implemented only for IPv4.dhcp-client-idstringA string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options. When the property is a hex string ('aa:bb:cc') it is interpreted as a binary client ID, in which case the first byte is assumed to be the 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a MAC address). If the property is not a hex string it is considered as a non-hardware-address client ID and the 'type' field is set to 0. The special values "mac" and "perm-mac" are supported, which use the current or permanent MAC address of the device to generate a client identifier with type ethernet (01). Currently, these options only work for ethernet type of links. The special value "ipv6-duid" uses the DUID from "ipv6.dhcp-duid" property as an RFC4361-compliant client identifier. As IAID it uses "ipv4.dhcp-iaid" and falls back to "ipv6.dhcp-iaid" if unset. The special value "duid" generates a RFC4361-compliant client identifier based on "ipv4.dhcp-iaid" and uses a DUID generated by hashing /etc/machine-id. The special value "stable" is supported to generate a type 0 client identifier based on the stable-id (see connection.stable-id) and a per-host key. If you set the stable-id, you may want to include the "${DEVICE}" or "${MAC}" specifier to get a per-device key. If unset, a globally configured default is used. If still unset, the default depends on the DHCP plugin.dhcp-fqdnstringIf the "dhcp-send-hostname" property is TRUE, then the specified FQDN will be sent to the DHCP server when acquiring a lease. This property and "dhcp-hostname" are mutually exclusive and cannot be set at the same time.dhcp-hostnamestringIf the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and "dhcp-fqdn" are mutually exclusive and cannot be set at the same time.dhcp-hostname-flagsuint320Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) and NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE (0x4). When no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is not set, the standard FQDN flags are set in the request: NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) for IPv4 and NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1) for IPv6. When this property is set to the default value NM_DHCP_HOSTNAME_FLAG_NONE (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also NM_DHCP_HOSTNAME_FLAG_NONE (0x0), then the standard FQDN flags described above are sent in the DHCP requests.dhcp-iaidstringA string containing the "Identity Association Identifier" (IAID) used by the DHCP client. The property is a 32-bit decimal value or a special value among "mac", "perm-mac", "ifname" and "stable". When set to "mac" (or "perm-mac"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to "ifname", the IAID is computed by hashing the interface name. The special value "stable" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be "ifname". Note that at the moment this property is ignored for IPv6 by dhclient, which always derives the IAID from the MAC address.dhcp-reject-serversarray of stringArray of servers from which DHCP offers must be rejected. This property is useful to avoid getting a lease from misconfigured or rogue servers. For DHCPv4, each element must be an IPv4 address, optionally followed by a slash and a prefix length (e.g. "192.168.122.0/24"). This property is currently not implemented for DHCPv6.dhcp-send-hostnamebooleanTRUEIf TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer. If the "dhcp-hostname" property is NULL and this property is TRUE, the current persistent hostname of the computer is sent.dhcp-timeoutint320A timeout for a DHCP transaction in seconds. If zero (the default), a globally configured default is used. If still unspecified, a device specific timeout is used (usually 45 seconds). Set to 2147483647 (MAXINT32) for infinity.dhcp-vendor-class-identifierstringThe Vendor Class Identifier DHCP option (60). Special characters in the data string may be escaped using C-style escapes, nevertheless this property cannot contain nul bytes. If the per-profile value is unspecified (the default), a global connection default gets consulted. If still unspecified, the DHCP option is not sent to the server. Since 1.28dnsarray of uint32Array of IP addresses of DNS servers (as network-byte-order integers)dns-optionsarray of stringArray of DNS options as described in man 5 resolv.conf. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties. The currently supported options are "attempts", "debug", "edns0", "inet6", "ip6-bytestring", "ip6-dotint", "ndots", "no-check-names", "no-ip6-dotint", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc". The "trust-ad" setting is only honored if the profile contributes name servers to resolv.conf, and if all contributing profiles have "trust-ad" enabled. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added.dns-priorityint320DNS servers priority. The relative priority for DNS servers specified by this setting. A lower numerical value is better (higher priority). Negative values have the special effect of excluding other configurations with a greater numerical priority value; so in presence of at least one negative priority, only DNS servers from connections with the lowest priority value will be used. To avoid all DNS leaks, set the priority of the profile that should be used to the most negative value of all active connections profiles. Zero selects a globally configured default value. If the latter is missing or zero too, it defaults to 50 for VPNs (including WireGuard) and 100 for other connections. Note that the priority is to order DNS settings for multiple active connections. It does not disambiguate multiple DNS servers within the same connection profile. When multiple devices have configurations with the same priority, VPNs will be considered first, then devices with the best (lowest metric) default route and then all other devices. When using dns=default, servers with higher priority will be on top of resolv.conf. To prioritize a given server over another one within the same connection, just specify them in the desired order. Note that commonly the resolver tries name servers in /etc/resolv.conf in the order listed, proceeding with the next server in the list on failure. See for example the "rotate" option of the dns-options setting. If there are any negative DNS priorities, then only name servers from the devices with that lowest priority will be considered. When using a DNS resolver that supports Conditional Forwarding or Split DNS (with dns=dnsmasq or dns=systemd-resolved settings), each connection is used to query domains in its search list. The search domains determine which name servers to ask, and the DNS priority is used to prioritize name servers based on the domain. Queries for domains not present in any search list are routed through connections having the '~.' special wildcard domain, which is added automatically to connections with the default route (or can be added manually). When multiple connections specify the same domain, the one with the best priority (lowest numerical value) wins. If a sub domain is configured on another interface it will be accepted regardless the priority, unless parent domain on the other interface has a negative priority, which causes the sub domain to be shadowed. With Split DNS one can avoid undesired DNS leaks by properly configuring DNS priorities and the search domains, so that only name servers of the desired interface are configured.dns-searcharray of stringArray of DNS search domains. Domains starting with a tilde ('~') are considered 'routing' domains and are used only to decide the interface over which a query must be forwarded; they are not used to complete unqualified host names. When using a DNS plugin that supports Conditional Forwarding or Split DNS, then the search domains specify which name servers to query. This makes the behavior different from running with plain /etc/resolv.conf. For more information see also the dns-priority setting.gatewaystringThe gateway associated with this configuration. This is only meaningful if "addresses" is also set. The gateway's main purpose is to control the next hop of the standard default route on the device. Hence, the gateway property conflicts with "never-default" and will be automatically dropped if the IP configuration is set to never-default. As an alternative to set the gateway, configure a static default route with /0 as prefix length.ignore-auto-dnsbooleanFALSEWhen "method" is set to "auto" and this property to TRUE, automatically configured name servers and search domains are ignored and only name servers and search domains specified in the "dns" and "dns-search" properties, if any, are used.ignore-auto-routesbooleanFALSEWhen "method" is set to "auto" and this property to TRUE, automatically configured routes are ignored and only routes specified in the "routes" property, if any, are used.may-failbooleanTRUEIf TRUE, allow overall network configuration to proceed even if the configuration specified by this property times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv6-only networks, setting this property to TRUE on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully.methodstringIP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "disabled", "auto", "manual", and "link-local". See the subclass-specific documentation for other values. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration. The "ignore-auto-routes" and "ignore-auto-dns" properties modify this behavior. For methods that imply no upstream network, such as "shared" or "link-local", these properties must be empty. For IPv4 method "shared", the IP subnet can be configured by adding one manual IPv4 address or otherwise 10.42.x.0/24 is chosen. Note that the shared method must be configured on the interface which shares the internet to a subnet, not on the uplink which is shared.never-defaultbooleanFALSEIf TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.route-dataarray of vardictArray of IPv4 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'next-hop' entry, containing the next hop IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.route-metricint64-1The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is chosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric.route-tableuint320Enable policy routing (source routing) and set the routing table used when adding routes. This affects all routes, including device-routes, IPv4LL, DHCP, SLAAC, default-routes and static routes. But note that static routes can individually overwrite the setting by explicitly specifying a non-zero routing table. If the table setting is left at zero, it is eligible to be overwritten via global configuration. If the property is zero even after applying the global configuration value, policy routing is disabled for the address family of this connection. Policy routing disabled means that NetworkManager will add all routes to the main table (except static routes that explicitly configure a different table). Additionally, NetworkManager will not delete any extraneous routes from tables except the main table. This is to preserve backward compatibility for users who manage routing tables outside of NetworkManager.routesarray of array of uint32Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. Array of IPv4 route structures. Each IPv4 route structure is composed of 4 32-bit values; the first being the destination IPv4 network or address (network byte order), the second the destination network or address prefix (1 - 32), the third being the next-hop (network byte order) if any, and the fourth being the route metric. If the metric is 0, NM will choose an appropriate default metric for the device. (There is no way to explicitly specify an actual metric of 0 with this property.)ipv6 settingIPv6 Settings.Key NameValue TypeDefault ValueValue Descriptionaddr-gen-modeint321Configure method for creating the address for use with RFC4862 IPv6 Stateless Address Autoconfiguration. The permitted values are: NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64 (0) or NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_STABLE_PRIVACY (1). If the property is set to EUI64, the addresses will be generated using the interface tokens derived from hardware address. This makes the host part of the address to stay constant, making it possible to track host's presence when it changes networks. The address changes when the interface hardware is replaced. The value of stable-privacy enables use of cryptographically secure hash of a secret host-specific key along with the connection's stable-id and the network address as specified by RFC7217. This makes it impossible to use the address track host's presence, and makes the address stable when the network interface hardware is replaced. On D-Bus, the absence of an addr-gen-mode setting equals enabling stable-privacy. For keyfile plugin, the absence of the setting on disk means EUI64 so that the property doesn't change on upgrade from older versions. Note that this setting is distinct from the Privacy Extensions as configured by "ip6-privacy" property and it does not affect the temporary addresses configured with this option.address-dataarray of vardictArray of IPv6 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.addressesarray of legacy IPv6 address struct (a(ayuay))Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. Array of IPv6 address structures. Each IPv6 address structure is composed of an IPv6 address, a prefix length (1 - 128), and an IPv6 gateway address. The gateway may be zeroed out if no gateway exists for that subnet.dad-timeoutint32-1Timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. A zero value means that no duplicate address detection is performed, -1 means the default value (either configuration ipvx.dad-timeout override or zero). A value greater than zero is a timeout in milliseconds. The property is currently implemented only for IPv4.dhcp-duidstringA string containing the DHCPv6 Unique Identifier (DUID) used by the dhcp client to identify itself to DHCPv6 servers (RFC 3315). The DUID is carried in the Client Identifier option. If the property is a hex string ('aa:bb:cc') it is interpreted as a binary DUID and filled as an opaque value in the Client Identifier option. The special value "lease" will retrieve the DUID previously used from the lease file belonging to the connection. If no DUID is found and "dhclient" is the configured dhcp client, the DUID is searched in the system-wide dhclient lease file. If still no DUID is found, or another dhcp client is used, a global and permanent DUID-UUID (RFC 6355) will be generated based on the machine-id. The special values "llt" and "ll" will generate a DUID of type LLT or LL (see RFC 3315) based on the current MAC address of the device. In order to try providing a stable DUID-LLT, the time field will contain a constant timestamp that is used globally (for all profiles) and persisted to disk. The special values "stable-llt", "stable-ll" and "stable-uuid" will generate a DUID of the corresponding type, derived from the connection's stable-id and a per-host unique key. You may want to include the "${DEVICE}" or "${MAC}" specifier in the stable-id, in case this profile gets activated on multiple devices. So, the link-layer address of "stable-ll" and "stable-llt" will be a generated address derived from the stable id. The DUID-LLT time value in the "stable-llt" option will be picked among a static timespan of three years (the upper bound of the interval is the same constant timestamp used in "llt"). When the property is unset, the global value provided for "ipv6.dhcp-duid" is used. If no global value is provided, the default "lease" value is assumed.dhcp-hostnamestringIf the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and "dhcp-fqdn" are mutually exclusive and cannot be set at the same time.dhcp-hostname-flagsuint320Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) and NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE (0x4). When no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is not set, the standard FQDN flags are set in the request: NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) for IPv4 and NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1) for IPv6. When this property is set to the default value NM_DHCP_HOSTNAME_FLAG_NONE (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also NM_DHCP_HOSTNAME_FLAG_NONE (0x0), then the standard FQDN flags described above are sent in the DHCP requests.dhcp-iaidstringA string containing the "Identity Association Identifier" (IAID) used by the DHCP client. The property is a 32-bit decimal value or a special value among "mac", "perm-mac", "ifname" and "stable". When set to "mac" (or "perm-mac"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to "ifname", the IAID is computed by hashing the interface name. The special value "stable" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be "ifname". Note that at the moment this property is ignored for IPv6 by dhclient, which always derives the IAID from the MAC address.dhcp-reject-serversarray of stringArray of servers from which DHCP offers must be rejected. This property is useful to avoid getting a lease from misconfigured or rogue servers. For DHCPv4, each element must be an IPv4 address, optionally followed by a slash and a prefix length (e.g. "192.168.122.0/24"). This property is currently not implemented for DHCPv6.dhcp-send-hostnamebooleanTRUEIf TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer. If the "dhcp-hostname" property is NULL and this property is TRUE, the current persistent hostname of the computer is sent.dhcp-timeoutint320A timeout for a DHCP transaction in seconds. If zero (the default), a globally configured default is used. If still unspecified, a device specific timeout is used (usually 45 seconds). Set to 2147483647 (MAXINT32) for infinity.dnsarray of byte arrayArray of IP addresses of DNS servers (in network byte order)dns-optionsarray of stringArray of DNS options as described in man 5 resolv.conf. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties. The currently supported options are "attempts", "debug", "edns0", "inet6", "ip6-bytestring", "ip6-dotint", "ndots", "no-check-names", "no-ip6-dotint", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc". The "trust-ad" setting is only honored if the profile contributes name servers to resolv.conf, and if all contributing profiles have "trust-ad" enabled. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added.dns-priorityint320DNS servers priority. The relative priority for DNS servers specified by this setting. A lower numerical value is better (higher priority). Negative values have the special effect of excluding other configurations with a greater numerical priority value; so in presence of at least one negative priority, only DNS servers from connections with the lowest priority value will be used. To avoid all DNS leaks, set the priority of the profile that should be used to the most negative value of all active connections profiles. Zero selects a globally configured default value. If the latter is missing or zero too, it defaults to 50 for VPNs (including WireGuard) and 100 for other connections. Note that the priority is to order DNS settings for multiple active connections. It does not disambiguate multiple DNS servers within the same connection profile. When multiple devices have configurations with the same priority, VPNs will be considered first, then devices with the best (lowest metric) default route and then all other devices. When using dns=default, servers with higher priority will be on top of resolv.conf. To prioritize a given server over another one within the same connection, just specify them in the desired order. Note that commonly the resolver tries name servers in /etc/resolv.conf in the order listed, proceeding with the next server in the list on failure. See for example the "rotate" option of the dns-options setting. If there are any negative DNS priorities, then only name servers from the devices with that lowest priority will be considered. When using a DNS resolver that supports Conditional Forwarding or Split DNS (with dns=dnsmasq or dns=systemd-resolved settings), each connection is used to query domains in its search list. The search domains determine which name servers to ask, and the DNS priority is used to prioritize name servers based on the domain. Queries for domains not present in any search list are routed through connections having the '~.' special wildcard domain, which is added automatically to connections with the default route (or can be added manually). When multiple connections specify the same domain, the one with the best priority (lowest numerical value) wins. If a sub domain is configured on another interface it will be accepted regardless the priority, unless parent domain on the other interface has a negative priority, which causes the sub domain to be shadowed. With Split DNS one can avoid undesired DNS leaks by properly configuring DNS priorities and the search domains, so that only name servers of the desired interface are configured.dns-searcharray of stringArray of DNS search domains. Domains starting with a tilde ('~') are considered 'routing' domains and are used only to decide the interface over which a query must be forwarded; they are not used to complete unqualified host names. When using a DNS plugin that supports Conditional Forwarding or Split DNS, then the search domains specify which name servers to query. This makes the behavior different from running with plain /etc/resolv.conf. For more information see also the dns-priority setting.gatewaystringThe gateway associated with this configuration. This is only meaningful if "addresses" is also set. The gateway's main purpose is to control the next hop of the standard default route on the device. Hence, the gateway property conflicts with "never-default" and will be automatically dropped if the IP configuration is set to never-default. As an alternative to set the gateway, configure a static default route with /0 as prefix length.ignore-auto-dnsbooleanFALSEWhen "method" is set to "auto" and this property to TRUE, automatically configured name servers and search domains are ignored and only name servers and search domains specified in the "dns" and "dns-search" properties, if any, are used.ignore-auto-routesbooleanFALSEWhen "method" is set to "auto" and this property to TRUE, automatically configured routes are ignored and only routes specified in the "routes" property, if any, are used.ip6-privacyNMSettingIP6ConfigPrivacy (int32)Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If enabled, it makes the kernel generate a temporary IPv6 address in addition to the public one generated from MAC address via modified EUI-64. This enhances privacy, but could cause problems in some applications, on the other hand. The permitted values are: -1: unknown, 0: disabled, 1: enabled (prefer public address), 2: enabled (prefer temporary addresses). Having a per-connection setting set to "-1" (unknown) means fallback to global configuration "ipv6.ip6-privacy". If also global configuration is unspecified or set to "-1", fallback to read "/proc/sys/net/ipv6/conf/default/use_tempaddr". Note that this setting is distinct from the Stable Privacy addresses that can be enabled with the "addr-gen-mode" property's "stable-privacy" setting as another way of avoiding host tracking with IPv6 addresses.may-failbooleanTRUEIf TRUE, allow overall network configuration to proceed even if the configuration specified by this property times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv6-only networks, setting this property to TRUE on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully.methodstringIP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "disabled", "auto", "manual", and "link-local". See the subclass-specific documentation for other values. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration. The "ignore-auto-routes" and "ignore-auto-dns" properties modify this behavior. For methods that imply no upstream network, such as "shared" or "link-local", these properties must be empty. For IPv4 method "shared", the IP subnet can be configured by adding one manual IPv4 address or otherwise 10.42.x.0/24 is chosen. Note that the shared method must be configured on the interface which shares the internet to a subnet, not on the uplink which is shared.never-defaultbooleanFALSEIf TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.ra-timeoutint320A timeout for waiting Router Advertisements in seconds. If zero (the default), a globally configured default is used. If still unspecified, the timeout depends on the sysctl settings of the device. Set to 2147483647 (MAXINT32) for infinity.route-dataarray of vardictArray of IPv6 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'next-hop' entry, containing the next hop IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.route-metricint64-1The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is chosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric.route-tableuint320Enable policy routing (source routing) and set the routing table used when adding routes. This affects all routes, including device-routes, IPv4LL, DHCP, SLAAC, default-routes and static routes. But note that static routes can individually overwrite the setting by explicitly specifying a non-zero routing table. If the table setting is left at zero, it is eligible to be overwritten via global configuration. If the property is zero even after applying the global configuration value, policy routing is disabled for the address family of this connection. Policy routing disabled means that NetworkManager will add all routes to the main table (except static routes that explicitly configure a different table). Additionally, NetworkManager will not delete any extraneous routes from tables except the main table. This is to preserve backward compatibility for users who manage routing tables outside of NetworkManager.routesarray of legacy IPv6 route struct (a(ayuayu))Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. Array of IPv6 route structures. Each IPv6 route structure is composed of an IPv6 address, a prefix length (1 - 128), an IPv6 next hop address (which may be zeroed out if there is no next hop), and a metric. If the metric is 0, NM will choose an appropriate default metric for the device.tokenstringConfigure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 IPv6 tokenized interface identifiers. Useful with eui64 addr-gen-mode.ip-tunnel settingIP Tunneling Settings.Key NameValue TypeDefault ValueValue Descriptionencapsulation-limituint320How many additional levels of encapsulation are permitted to be prepended to packets. This property applies only to IPv6 tunnels.flagsuint320Tunnel flags. Currently, the following values are supported: 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). They are valid only for IPv6 tunnels.flow-labeluint320The flow label to assign to tunnel packets. This property applies only to IPv6 tunnels.input-keystringThe key used for tunnel input packets; the property is valid only for certain tunnel modes (GRE, IP6GRE). If empty, no key is used.localstringThe local endpoint of the tunnel; the value can be empty, otherwise it must contain an IPv4 or IPv6 address.modeuint320The tunneling mode, for example NM_IP_TUNNEL_MODE_IPIP (1) or NM_IP_TUNNEL_MODE_GRE (2).mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple fragments.output-keystringThe key used for tunnel output packets; the property is valid only for certain tunnel modes (GRE, IP6GRE). If empty, no key is used.parentstringIf given, specifies the parent interface name or parent connection UUID the new device will be bound to so that tunneled packets will only be routed via that interface.path-mtu-discoverybooleanTRUEWhether to enable Path MTU Discovery on this tunnel.remotestringThe remote endpoint of the tunnel; the value must contain an IPv4 or IPv6 address.tosuint320The type of service (IPv4) or traffic class (IPv6) field to be set on tunneled packets.ttluint320The TTL to assign to tunneled packets. 0 is a special value meaning that packets inherit the TTL value.macsec settingMACSec Settings.Key NameValue TypeDefault ValueValue DescriptionencryptbooleanTRUEWhether the transmitted traffic must be encrypted.mka-cakstringThe pre-shared CAK (Connectivity Association Key) for MACsec Key Agreement.mka-cak-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "mka-cak" property. (see for flag values)mka-cknstringThe pre-shared CKN (Connectivity-association Key Name) for MACsec Key Agreement.modeint320Specifies how the CAK (Connectivity Association Key) for MKA (MACsec Key Agreement) is obtained.parentstringIf given, specifies the parent interface name or parent connection UUID from which this MACSEC interface should be created. If this property is not specified, the connection must contain an "802-3-ethernet" setting with a "mac-address" property.portint321The port component of the SCI (Secure Channel Identifier), between 1 and 65534.send-scibooleanTRUESpecifies whether the SCI (Secure Channel Identifier) is included in every packet.validationint322Specifies the validation mode for incoming frames.macvlan settingMAC VLAN Settings.Key NameValue TypeDefault ValueValue Descriptionmodeuint320The macvlan mode, which specifies the communication mechanism between multiple macvlans on the same lower device.parentstringIf given, specifies the parent interface name or parent connection UUID from which this MAC-VLAN interface should be created. If this property is not specified, the connection must contain an "802-3-ethernet" setting with a "mac-address" property.promiscuousbooleanTRUEWhether the interface should be put in promiscuous mode.tapbooleanFALSEWhether the interface should be a MACVTAP.match settingMatch settings.Key NameValue TypeDefault ValueValue Descriptiondriverarray of stringA list of driver names to match. Each element is a shell wildcard pattern. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\\' are used for optional and mandatory matches and inverting the pattern.interface-namearray of stringA list of interface names to match. Each element is a shell wildcard pattern. An element can be prefixed with a pipe symbol (|) or an ampersand (&). The former means that the element is optional and the latter means that it is mandatory. If there are any optional elements, than the match evaluates to true if at least one of the optional element matches (logical OR). If there are any mandatory elements, then they all must match (logical AND). By default, an element is optional. This means that an element "foo" behaves the same as "|foo". An element can also be inverted with exclamation mark (!) between the pipe symbol (or the ampersand) and before the pattern. Note that "!foo" is a shortcut for the mandatory match "&!foo". Finally, a backslash can be used at the beginning of the element (after the optional special characters) to escape the start of the pattern. For example, "&\\!a" is an mandatory match for literally "!a".kernel-command-linearray of stringA list of kernel command line arguments to match. This may be used to check whether a specific kernel command line option is set (or if prefixed with the exclamation mark unset). The argument must either be a single word, or an assignment (i.e. two words, separated "="). In the former case the kernel command line is searched for the word appearing as is, or as left hand side of an assignment. In the latter case, the exact assignment is looked for with right and left hand side matching. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\\' are used for optional and mandatory matches and inverting the pattern.patharray of stringA list of paths to match against the ID_PATH udev property of devices. ID_PATH represents the topological persistent path of a device. It typically contains a subsystem string (pci, usb, platform, etc.) and a subsystem-specific identifier. For PCI devices the path has the form "pci-$domain:$bus:$device.$function", where each variable is an hexadecimal value; for example "pci-0000:0a:00.0". The path of a device can be obtained with "udevadm info /sys/class/net/$dev | grep ID_PATH=" or by looking at the "path" property exported by NetworkManager ("nmcli -f general.path device show $dev"). Each element of the list is a shell wildcard pattern. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\\' are used for optional and mandatory matches and inverting the pattern.802-11-olpc-mesh settingOLPC Wireless Mesh Settings.Key NameValue TypeDefault ValueValue Descriptionchanneluint320Channel on which the mesh network to join is located.dhcp-anycast-addressbyte arrayAnycast DHCP MAC address used when requesting an IP address via DHCP. The specific anycast address used determines which DHCP server class answers the request.ssidbyte arraySSID of the mesh network to join.ovs-bridge settingOvsBridge Link Settings.Key NameValue TypeDefault ValueValue Descriptiondatapath-typestringThe data path type. One of "system", "netdev" or empty.fail-modestringThe bridge failure mode. One of "secure", "standalone" or empty.mcast-snooping-enablebooleanFALSEEnable or disable multicast snooping.rstp-enablebooleanFALSEEnable or disable RSTP.stp-enablebooleanFALSEEnable or disable STP.ovs-dpdk settingOvsDpdk Link Settings.Key NameValue TypeDefault ValueValue DescriptiondevargsstringOpen vSwitch DPDK device arguments.ovs-interface settingOpen vSwitch Interface Settings.Key NameValue TypeDefault ValueValue DescriptiontypestringThe interface type. Either "internal", "system", "patch", "dpdk", or empty.ovs-patch settingOvsPatch Link Settings.Key NameValue TypeDefault ValueValue DescriptionpeerstringSpecifies the name of the interface for the other side of the patch. The patch on the other side must also set this interface as peer.ovs-port settingOvsPort Link Settings.Key NameValue TypeDefault ValueValue Descriptionbond-downdelayuint320The time port must be inactive in order to be considered down.bond-modestringBonding mode. One of "active-backup", "balance-slb", or "balance-tcp".bond-updelayuint320The time port must be active before it starts forwarding traffic.lacpstringLACP mode. One of "active", "off", or "passive".taguint320The VLAN tag in the range 0-4095.vlan-modestringThe VLAN mode. One of "access", "native-tagged", "native-untagged", "trunk" or unset.ppp settingPoint-to-Point Protocol Settings.Key NameValue TypeDefault ValueValue Descriptionbauduint320If non-zero, instruct pppd to set the serial port to the specified baudrate. This value should normally be left as 0 to automatically choose the speed.crtsctsbooleanFALSEIf TRUE, specify that pppd should set the serial port to use hardware flow control with RTS and CTS signals. This value should normally be set to FALSE.lcp-echo-failureuint320If non-zero, instruct pppd to presume the connection to the peer has failed if the specified number of LCP echo-requests go unanswered by the peer. The "lcp-echo-interval" property must also be set to a non-zero value if this property is used.lcp-echo-intervaluint320If non-zero, instruct pppd to send an LCP echo-request frame to the peer every n seconds (where n is the specified value). Note that some PPP peers will respond to echo requests and some will not, and it is not possible to autodetect this.mppe-statefulbooleanFALSEIf TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE.mruuint320If non-zero, instruct pppd to request that the peer send packets no larger than the specified size. If non-zero, the MRU should be between 128 and 16384.mtuuint320If non-zero, instruct pppd to send packets no larger than the specified size.no-vj-compbooleanFALSEIf TRUE, Van Jacobsen TCP header compression will not be requested.noauthbooleanTRUEIf TRUE, do not require the other side (usually the PPP server) to authenticate itself to the client. If FALSE, require authentication from the remote side. In almost all cases, this should be TRUE.nobsdcompbooleanFALSEIf TRUE, BSD compression will not be requested.nodeflatebooleanFALSEIf TRUE, "deflate" compression will not be requested.refuse-chapbooleanFALSEIf TRUE, the CHAP authentication method will not be used.refuse-eapbooleanFALSEIf TRUE, the EAP authentication method will not be used.refuse-mschapbooleanFALSEIf TRUE, the MSCHAP authentication method will not be used.refuse-mschapv2booleanFALSEIf TRUE, the MSCHAPv2 authentication method will not be used.refuse-papbooleanFALSEIf TRUE, the PAP authentication method will not be used.require-mppebooleanFALSEIf TRUE, MPPE (Microsoft Point-to-Point Encryption) will be required for the PPP session. If either 64-bit or 128-bit MPPE is not available the session will fail. Note that MPPE is not used on mobile broadband connections.require-mppe-128booleanFALSEIf TRUE, 128-bit MPPE (Microsoft Point-to-Point Encryption) will be required for the PPP session, and the "require-mppe" property must also be set to TRUE. If 128-bit MPPE is not available the session will fail.pppoe settingPPP-over-Ethernet Settings.Key NameValue TypeDefault ValueValue DescriptionparentstringIf given, specifies the parent interface name on which this PPPoE connection should be created. If this property is not specified, the connection is activated on the interface specified in "interface-name" of NMSettingConnection.passwordstringPassword used to authenticate with the PPPoE service.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)servicestringIf specified, instruct PPPoE to only initiate sessions with access concentrators that provide the specified service. For most providers, this should be left blank. It is only required if there are multiple access concentrators or a specific service is known to be required.usernamestringUsername used to authenticate with the PPPoE service.proxy settingWWW Proxy Settings.Key NameValue TypeDefault ValueValue Descriptionbrowser-onlybooleanFALSEWhether the proxy configuration is for browser only.methodint320Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)pac-scriptstringPAC script for the connection.pac-urlstringPAC URL for obtaining PAC file.serial settingSerial Link Settings.Key NameValue TypeDefault ValueValue Descriptionbauduint3257600Speed to use for communication over the serial port. Note that this value usually has no effect for mobile broadband modems as they generally ignore speed settings and use the highest available speed.bitsuint328Byte-width of the serial communication. The 8 in "8n1" for example.paritybyteThe connection parity: 69 (ASCII 'E') for even parity, 111 (ASCII 'o') for odd, 110 (ASCII 'n') for none.send-delayuint640Time to delay between each byte sent to the modem, in microseconds.stopbitsuint321Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in "8n1" for example.sriov settingSR-IOV settings.Key NameValue TypeDefault ValueValue Descriptionautoprobe-driversNMTernary (int32)Whether to autoprobe virtual functions by a compatible driver. If set to NM_TERNARY_TRUE (1), the kernel will try to bind VFs to a compatible driver and if this succeeds a new network interface will be instantiated for each VF. If set to NM_TERNARY_FALSE (0), VFs will not be claimed and no network interfaces will be created for them. When set to NM_TERNARY_DEFAULT (-1), the global default is used; in case the global default is unspecified it is assumed to be NM_TERNARY_TRUE (1).total-vfsuint320The total number of virtual functions to create. Note that when the sriov setting is present NetworkManager enforces the number of virtual functions on the interface (also when it is zero) during activation and resets it upon deactivation. To prevent any changes to SR-IOV parameters don't add a sriov setting to the connection.vfsarray of vardictArray of virtual function descriptors. Each VF descriptor is a dictionary mapping attribute names to GVariant values. The 'index' entry is mandatory for each VF. When represented as string a VF is in the form: "INDEX [ATTR=VALUE[ ATTR=VALUE]...]". for example: "2 mac=00:11:22:33:44:55 spoof-check=true". Multiple VFs can be specified using a comma as separator. Currently, the following attributes are supported: mac, spoof-check, trust, min-tx-rate, max-tx-rate, vlans. The "vlans" attribute is represented as a semicolon-separated list of VLAN descriptors, where each descriptor has the form "ID[.PRIORITY[.PROTO]]". PROTO can be either 'q' for 802.1Q (the default) or 'ad' for 802.1ad.tc settingLinux Traffic Control Settings.Key NameValue TypeDefault ValueValue Descriptionqdiscsarray of vardictArray of TC queueing disciplines.tfiltersarray of vardictArray of TC traffic filters.team settingTeaming Settings.Key NameValue TypeDefault ValueValue DescriptionconfigstringThe JSON configuration for the team network interface. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd. If not specified, the default configuration is used. See man teamd.conf for the format details.interface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the team's interface name.link-watchersarray of vardictLink watchers configuration for the connection: each link watcher is defined by a dictionary, whose keys depend upon the selected link watcher. Available link watchers are 'ethtool', 'nsna_ping' and 'arp_ping' and it is specified in the dictionary with the key 'name'. Available keys are: ethtool: 'delay-up', 'delay-down', 'init-wait'; nsna_ping: 'init-wait', 'interval', 'missed-max', 'target-host'; arp_ping: all the ones in nsna_ping and 'source-host', 'validate-active', 'validate-inactive', 'send-always'. See teamd.conf man for more details.mcast-rejoin-countint32-1Corresponds to the teamd mcast_rejoin.count.mcast-rejoin-intervalint32-1Corresponds to the teamd mcast_rejoin.interval.notify-peers-countint32-1Corresponds to the teamd notify_peers.count.notify-peers-intervalint32-1Corresponds to the teamd notify_peers.interval.runnerstringCorresponds to the teamd runner.name. Permitted values are: "roundrobin", "broadcast", "activebackup", "loadbalance", "lacp", "random".runner-activebooleanTRUECorresponds to the teamd runner.active.runner-agg-select-policystringCorresponds to the teamd runner.agg_select_policy.runner-fast-ratebooleanFALSECorresponds to the teamd runner.fast_rate.runner-hwaddr-policystringCorresponds to the teamd runner.hwaddr_policy.runner-min-portsint32-1Corresponds to the teamd runner.min_ports.runner-sys-prioint32-1Corresponds to the teamd runner.sys_prio.runner-tx-balancerstringCorresponds to the teamd runner.tx_balancer.name.runner-tx-balancer-intervalint32-1Corresponds to the teamd runner.tx_balancer.interval.runner-tx-hasharray of stringCorresponds to the teamd runner.tx_hash.team-port settingTeam Port Settings.Key NameValue TypeDefault ValueValue DescriptionconfigstringThe JSON configuration for the team port. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd. If not specified, the default configuration is used. See man teamd.conf for the format details.lacp-keyint32-1Corresponds to the teamd ports.PORTIFNAME.lacp_key.lacp-prioint32-1Corresponds to the teamd ports.PORTIFNAME.lacp_prio.link-watchersarray of vardictLink watchers configuration for the connection: each link watcher is defined by a dictionary, whose keys depend upon the selected link watcher. Available link watchers are 'ethtool', 'nsna_ping' and 'arp_ping' and it is specified in the dictionary with the key 'name'. Available keys are: ethtool: 'delay-up', 'delay-down', 'init-wait'; nsna_ping: 'init-wait', 'interval', 'missed-max', 'target-host'; arp_ping: all the ones in nsna_ping and 'source-host', 'validate-active', 'validate-inactive', 'send-always'. See teamd.conf man for more details.prioint320Corresponds to the teamd ports.PORTIFNAME.prio.queue-idint32-1Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the parameter is skipped from the json config.stickybooleanFALSECorresponds to the teamd ports.PORTIFNAME.sticky.tun settingTunnel Settings.Key NameValue TypeDefault ValueValue DescriptiongroupstringThe group ID which will own the device. If set to NULL everyone will be able to use the device.modeuint321The operating mode of the virtual device. Allowed values are NM_SETTING_TUN_MODE_TUN (1) to create a layer 3 device and NM_SETTING_TUN_MODE_TAP (2) to create an Ethernet-like layer 2 one.multi-queuebooleanFALSEIf the property is set to TRUE, the interface will support multiple file descriptors (queues) to parallelize packet sending or receiving. Otherwise, the interface will only support a single queue.ownerstringThe user ID which will own the device. If set to NULL everyone will be able to use the device.pibooleanFALSEIf TRUE the interface will prepend a 4 byte header describing the physical interface to the packets.vnet-hdrbooleanFALSEIf TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network header.user settingGeneral User Profile Settings.Key NameValue TypeDefault ValueValue Descriptiondatadict of string to string{}A dictionary of key/value pairs with user data. This data is ignored by NetworkManager and can be used at the users discretion. The keys only support a strict ascii format, but the values can be arbitrary UTF8 strings up to a certain length.vlan settingVLAN Settings.Key NameValue TypeDefault ValueValue Descriptionegress-priority-maparray of stringFor outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities. The mapping is given in the format "from:to" where both "from" and "to" are unsigned integers, ie "7:3".flagsNMVlanFlags (uint32)One or more flags which control the behavior and features of the VLAN interface. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device's operating state). NM_VLAN_FLAG_MVRP (0x8) (use of the MVRP protocol). The default value of this property is NM_VLAN_FLAG_REORDER_HEADERS, but it used to be 0. To preserve backward compatibility, the default-value in the D-Bus API continues to be 0 and a missing property on D-Bus is still considered as 0.iduint320The VLAN identifier that the interface created by this connection should be assigned. The valid range is from 0 to 4094, without the reserved id 4095.ingress-priority-maparray of stringFor incoming packets, a list of mappings from 802.1p priorities to Linux SKB priorities. The mapping is given in the format "from:to" where both "from" and "to" are unsigned integers, ie "7:3".interface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the vlan's interface name.parentstringIf given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created. If this property is not specified, the connection must contain an "802-3-ethernet" setting with a "mac-address" property.vpn settingVPN Settings.Key NameValue TypeDefault ValueValue Descriptiondatadict of string to string{}Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings.persistentbooleanFALSEIf the VPN service supports persistence, and this property is TRUE, the VPN will attempt to stay connected across link changes and outages, until explicitly disconnected.secretsdict of string to string{}Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings.service-typestringD-Bus service name of the VPN plugin that this setting uses to connect to its network. i.e. org.freedesktop.NetworkManager.vpnc for the vpnc plugin.timeoutuint320Timeout for the VPN service to establish the connection. Some services may take quite a long time to connect. Value of 0 means a default timeout, which is 60 seconds (unless overridden by vpn.timeout in configuration file). Values greater than zero mean timeout in seconds.user-namestringIf the VPN connection requires a user name for authentication, that name should be provided here. If the connection is available to more than one user, and the VPN requires each user to supply a different name, then leave this property empty. If this property is empty, NetworkManager will automatically supply the username of the user which requested the VPN connection.vrf settingVRF settings.Key NameValue TypeDefault ValueValue Descriptiontableuint320The routing table for this VRF.vxlan settingVXLAN Settings.Key NameValue TypeDefault ValueValue Descriptionageinguint32300Specifies the lifetime in seconds of FDB entries learnt by the kernel.destination-portuint328472Specifies the UDP destination port to communicate to the remote VXLAN tunnel endpoint.iduint320Specifies the VXLAN Network Identifier (or VXLAN Segment Identifier) to use.l2-missbooleanFALSESpecifies whether netlink LL ADDR miss notifications are generated.l3-missbooleanFALSESpecifies whether netlink IP ADDR miss notifications are generated.learningbooleanTRUESpecifies whether unknown source link layer addresses and IP addresses are entered into the VXLAN device forwarding database.limituint320Specifies the maximum number of FDB entries. A value of zero means that the kernel will store unlimited entries.localstringIf given, specifies the source IP address to use in outgoing packets.parentstringIf given, specifies the parent interface name or parent connection UUID.proxybooleanFALSESpecifies whether ARP proxy is turned on.remotestringSpecifies the unicast destination IP address to use in outgoing packets when the destination link layer address is not known in the VXLAN device forwarding database, or the multicast IP address to join.rscbooleanFALSESpecifies whether route short circuit is turned on.source-port-maxuint320Specifies the maximum UDP source port to communicate to the remote VXLAN tunnel endpoint.source-port-minuint320Specifies the minimum UDP source port to communicate to the remote VXLAN tunnel endpoint.tosuint320Specifies the TOS value to use in outgoing packets.ttluint320Specifies the time-to-live value to use in outgoing packets.wifi-p2p settingWi-Fi P2P Settings.Key NameValue TypeDefault ValueValue DescriptionpeerstringThe P2P device that should be connected to. Currently, this is the only way to create or join a group.wfd-iesbyte arrayThe Wi-Fi Display (WFD) Information Elements (IEs) to set. Wi-Fi Display requires a protocol specific information element to be set in certain Wi-Fi frames. These can be specified here for the purpose of establishing a connection. This setting is only useful when implementing a Wi-Fi Display client.wps-methoduint320Flags indicating which mode of WPS is to be used. There's little point in changing the default setting as NetworkManager will automatically determine the best method to use.wimax settingWiMax Settings.Key NameValue TypeDefault ValueValue Descriptionmac-addressbyte arrayIf specified, this connection will only apply to the WiMAX device whose MAC address matches. This property does not change the MAC address of the device (known as MAC spoofing). Deprecated: 1network-namestringNetwork Service Provider (NSP) name of the WiMAX network this connection should use. Deprecated: 1802-3-ethernet settingWired Ethernet Settings.Key NameValue TypeDefault ValueValue Descriptionassigned-mac-addressstringThe new field for the cloned MAC address. It can be either a hardware address in ASCII representation, or one of the special values "preserve", "permanent", "random" or "stable". This field replaces the deprecated "cloned-mac-address" on D-Bus, which can only contain explicit hardware addresses. Note that this property only exists in D-Bus API. libnm and nmcli continue to call this property "cloned-mac-address".auto-negotiatebooleanFALSEWhen TRUE, enforce auto-negotiation of speed and duplex mode. If "speed" and "duplex" properties are both specified, only that single mode will be advertised and accepted during the link auto-negotiation process: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabits modes, as in these cases link negotiation is mandatory. When FALSE, "speed" and "duplex" properties should be both set or link configuration will be skipped.cloned-mac-addressbyte arrayThis D-Bus field is deprecated in favor of "assigned-mac-address" which is more flexible and allows specifying special variants like "random". For libnm and nmcli, this field is called "cloned-mac-address".duplexstringWhen a value is set, either "half" or "full", configures the device to use the specified duplex mode. If "auto-negotiate" is "yes" the specified duplex mode will be the only one advertised during link negotiation: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabits modes, as in these cases link negotiation is mandatory. If the value is unset (the default), the link configuration will be either skipped (if "auto-negotiate" is "no", the default) or will be auto-negotiated (if "auto-negotiate" is "yes") and the local device will advertise all the supported duplex modes. Must be set together with the "speed" property if specified. Before specifying a duplex mode be sure your device supports it.generate-mac-address-maskstringWith "cloned-mac-address" setting "random" or "stable", by default all bits of the MAC address are scrambled and a locally-administered, unicast MAC address is created. This property allows to specify that certain bits are fixed. Note that the least significant bit of the first MAC address will always be unset to create a unicast MAC address. If the property is NULL, it is eligible to be overwritten by a default connection setting. If the value is still NULL or an empty string, the default is to create a locally-administered, unicast MAC address. If the value contains one MAC address, this address is used as mask. The set bits of the mask are to be filled with the current MAC address of the device, while the unset bits are subject to randomization. Setting "FE:FF:FF:00:00:00" means to preserve the OUI of the current MAC address and only randomize the lower 3 bytes using the "random" or "stable" algorithm. If the value contains one additional MAC address after the mask, this address is used instead of the current MAC address to fill the bits that shall not be randomized. For example, a value of "FE:FF:FF:00:00:00 68:F7:28:00:00:00" will set the OUI of the MAC address to 68:F7:28, while the lower bits are randomized. A value of "02:00:00:00:00:00 00:00:00:00:00:00" will create a fully scrambled globally-administered, burned-in MAC address. If the value contains more than one additional MAC addresses, one of them is chosen randomly. For example, "02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00" will create a fully scrambled MAC address, randomly locally or globally administered.mac-addressbyte arrayIf specified, this connection will only apply to the Ethernet device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).mac-address-blacklistarray of stringIf specified, this connection will never apply to the Ethernet device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55).mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.portstringSpecific port type to use if the device supports multiple attachment methods. One of "tp" (Twisted Pair), "aui" (Attachment Unit Interface), "bnc" (Thin Ethernet) or "mii" (Media Independent Interface). If the device supports only one port type, this setting is ignored.s390-nettypestrings390 network device type; one of "qeth", "lcs", or "ctc", representing the different types of virtual network devices available on s390 systems.s390-optionsdict of string to string{}Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include "portno", "layer2", "portname", "protocol", among others. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9]).s390-subchannelsarray of stringIdentifies specific subchannels that this network device uses for communication with z/VM or s390 host. Like the "mac-address" property for non-z/VM devices, this property can be used to ensure this connection only applies to the network device that uses these subchannels. The list should contain exactly 3 strings, and each string may only be composed of hexadecimal characters and the period (.) character.speeduint320When a value greater than 0 is set, configures the device to use the specified speed. If "auto-negotiate" is "yes" the specified speed will be the only one advertised during link negotiation: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabit speeds, as in this case link negotiation is mandatory. If the value is unset (0, the default), the link configuration will be either skipped (if "auto-negotiate" is "no", the default) or will be auto-negotiated (if "auto-negotiate" is "yes") and the local device will advertise all the supported speeds. In Mbit/s, ie 100 == 100Mbit/s. Must be set together with the "duplex" property when non-zero. Before specifying a speed value be sure your device supports it.wake-on-lanuint321The NMSettingWiredWakeOnLan options to enable. Not all devices support all options. May be any combination of 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) or the special values NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT (0x1) (to use global settings) and NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE (0x8000) (to disable management of Wake-on-LAN in NetworkManager).wake-on-lan-passwordstringIf specified, the password used with magic-packet-based Wake-on-LAN, represented as an Ethernet MAC address. If NULL, no password will be required.wireguard settingWireGuard Settings.Key NameValue TypeDefault ValueValue Descriptionfwmarkuint320The use of fwmark is optional and is by default off. Setting it to 0 disables it. Otherwise, it is a 32-bit fwmark for outgoing packets. Note that "ip4-auto-default-route" or "ip6-auto-default-route" enabled, implies to automatically choose a fwmark.ip4-auto-default-routeNMTernary (int32)Whether to enable special handling of the IPv4 default route. If enabled, the IPv4 default route from wireguard.peer-routes will be placed to a dedicated routing-table and two policy routing rules will be added. The fwmark number is also used as routing-table for the default-route, and if fwmark is zero, an unused fwmark/table is chosen automatically. This corresponds to what wg-quick does with Table=auto and what WireGuard calls "Improved Rule-based Routing". Note that for this automatism to work, you usually don't want to set ipv4.gateway, because that will result in a conflicting default route. Leaving this at the default will enable this option automatically if ipv4.never-default is not set and there are any peers that use a default-route as allowed-ips.ip6-auto-default-routeNMTernary (int32)Like ip4-auto-default-route, but for the IPv6 default route.listen-portuint320The listen-port. If listen-port is not specified, the port will be chosen randomly when the interface comes up.mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple fragments. If zero a default MTU is used. Note that contrary to wg-quick's MTU setting, this does not take into account the current routes at the time of activation.peer-routesbooleanTRUEWhether to automatically add routes for the AllowedIPs ranges of the peers. If TRUE (the default), NetworkManager will automatically add routes in the routing tables according to ipv4.route-table and ipv6.route-table. Usually you want this automatism enabled. If FALSE, no such routes are added automatically. In this case, the user may want to configure static routes in ipv4.routes and ipv6.routes, respectively. Note that if the peer's AllowedIPs is "0.0.0.0/0" or "::/0" and the profile's ipv4.never-default or ipv6.never-default setting is enabled, the peer route for this peer won't be added automatically.peersarray of 'a{sv}'Array of dictionaries for the WireGuard peers.private-keystringThe 256 bit private-key in base64 encoding.private-key-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "private-key" property. (see for flag values)802-11-wireless settingWi-Fi Settings.Key NameValue TypeDefault ValueValue Descriptionap-isolationNMTernary (int32)Configures AP isolation, which prevents communication between wireless devices connected to this AP. This property can be set to a value different from NM_TERNARY_DEFAULT (-1) only when the interface is configured in AP mode. If set to NM_TERNARY_TRUE (1), devices are not able to communicate with each other. This increases security because it protects devices against attacks from other clients in the network. At the same time, it prevents devices to access resources on the same wireless networks as file shares, printers, etc. If set to NM_TERNARY_FALSE (0), devices can talk to each other. When set to NM_TERNARY_DEFAULT (-1), the global default is used; in case the global default is unspecified it is assumed to be NM_TERNARY_FALSE (0).assigned-mac-addressstringThe new field for the cloned MAC address. It can be either a hardware address in ASCII representation, or one of the special values "preserve", "permanent", "random" or "stable". This field replaces the deprecated "cloned-mac-address" on D-Bus, which can only contain explicit hardware addresses. Note that this property only exists in D-Bus API. libnm and nmcli continue to call this property "cloned-mac-address".bandstring802.11 frequency band of the network. One of "a" for 5GHz 802.11a or "bg" for 2.4GHz 802.11. This will lock associations to the Wi-Fi network to the specific band, i.e. if "a" is specified, the device will not associate with the same network in the 2.4GHz band even if the network's settings are compatible. This setting depends on specific driver capability and may not work with all drivers.bssidbyte arrayIf specified, directs the device to only associate with the given access point. This capability is highly driver dependent and not supported by all devices. Note: this property does not control the BSSID used when creating an Ad-Hoc network and is unlikely to in the future.channeluint320Wireless channel to use for the Wi-Fi connection. The device will only join (or create for Ad-Hoc networks) a Wi-Fi network on the specified channel. Because channel numbers overlap between bands, this property also requires the "band" property to be set.cloned-mac-addressbyte arrayThis D-Bus field is deprecated in favor of "assigned-mac-address" which is more flexible and allows specifying special variants like "random". For libnm and nmcli, this field is called "cloned-mac-address".generate-mac-address-maskstringWith "cloned-mac-address" setting "random" or "stable", by default all bits of the MAC address are scrambled and a locally-administered, unicast MAC address is created. This property allows to specify that certain bits are fixed. Note that the least significant bit of the first MAC address will always be unset to create a unicast MAC address. If the property is NULL, it is eligible to be overwritten by a default connection setting. If the value is still NULL or an empty string, the default is to create a locally-administered, unicast MAC address. If the value contains one MAC address, this address is used as mask. The set bits of the mask are to be filled with the current MAC address of the device, while the unset bits are subject to randomization. Setting "FE:FF:FF:00:00:00" means to preserve the OUI of the current MAC address and only randomize the lower 3 bytes using the "random" or "stable" algorithm. If the value contains one additional MAC address after the mask, this address is used instead of the current MAC address to fill the bits that shall not be randomized. For example, a value of "FE:FF:FF:00:00:00 68:F7:28:00:00:00" will set the OUI of the MAC address to 68:F7:28, while the lower bits are randomized. A value of "02:00:00:00:00:00 00:00:00:00:00:00" will create a fully scrambled globally-administered, burned-in MAC address. If the value contains more than one additional MAC addresses, one of them is chosen randomly. For example, "02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00" will create a fully scrambled MAC address, randomly locally or globally administered.hiddenbooleanFALSEIf TRUE, indicates that the network is a non-broadcasting network that hides its SSID. This works both in infrastructure and AP mode. In infrastructure mode, various workarounds are used for a more reliable discovery of hidden networks, such as probe-scanning the SSID. However, these workarounds expose inherent insecurities with hidden SSID networks, and thus hidden SSID networks should be used with caution. In AP mode, the created network does not broadcast its SSID. Note that marking the network as hidden may be a privacy issue for you (in infrastructure mode) or client stations (in AP mode), as the explicit probe-scans are distinctly recognizable on the air.mac-addressbyte arrayIf specified, this connection will only apply to the Wi-Fi device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).mac-address-blacklistarray of stringA list of permanent MAC addresses of Wi-Fi devices to which this connection should never apply. Each MAC address should be given in the standard hex-digits-and-colons notation (eg "00:11:22:33:44:55").mac-address-randomizationuint320One of NM_SETTING_MAC_RANDOMIZATION_DEFAULT (0) (never randomize unless the user has set a global default to randomize and the supplicant supports randomization), NM_SETTING_MAC_RANDOMIZATION_NEVER (1) (never randomize the MAC address), or NM_SETTING_MAC_RANDOMIZATION_ALWAYS (2) (always randomize the MAC address). This property is deprecated for 'cloned-mac-address'. Deprecated: 1modestringWi-Fi network mode; one of "infrastructure", "mesh", "adhoc" or "ap". If blank, infrastructure is assumed.mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.powersaveuint320One of NM_SETTING_WIRELESS_POWERSAVE_DISABLE (2) (disable Wi-Fi power saving), NM_SETTING_WIRELESS_POWERSAVE_ENABLE (3) (enable Wi-Fi power saving), NM_SETTING_WIRELESS_POWERSAVE_IGNORE (1) (don't touch currently configure setting) or NM_SETTING_WIRELESS_POWERSAVE_DEFAULT (0) (use the globally configured value). All other values are reserved.rateuint320If non-zero, directs the device to only use the specified bitrate for communication with the access point. Units are in Kb/s, ie 5500 = 5.5 Mbit/s. This property is highly driver dependent and not all devices support setting a static bitrate.securityThis property is deprecated, but can be set to the value '802-11-wireless-security' when a wireless security setting is also present in the connection dictionary, for compatibility with very old NetworkManager daemons.seen-bssidsarray of stringA list of BSSIDs (each BSSID formatted as a MAC address like "00:11:22:33:44:55") that have been detected as part of the Wi-Fi network. NetworkManager internally tracks previously seen BSSIDs. The property is only meant for reading and reflects the BSSID list of NetworkManager. The changes you make to this property will not be preserved.ssidbyte arraySSID of the Wi-Fi network. Must be specified.tx-poweruint320If non-zero, directs the device to use the specified transmit power. Units are dBm. This property is highly driver dependent and not all devices support setting a static transmit power.wake-on-wlanuint321The NMSettingWirelessWakeOnWLan options to enable. Not all devices support all options. May be any combination of 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) or the special values NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT (0x1) (to use global settings) and NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE (0x8000) (to disable management of Wake-on-LAN in NetworkManager).802-11-wireless-security settingWi-Fi Security Settings.Key NameValue TypeDefault ValueValue Descriptionauth-algstringWhen WEP is used (ie, key-mgmt = "none" or "ieee8021x") indicate the 802.11 authentication algorithm required by the AP here. One of "open" for Open System, "shared" for Shared Key, or "leap" for Cisco LEAP. When using Cisco LEAP (ie, key-mgmt = "ieee8021x" and auth-alg = "leap") the "leap-username" and "leap-password" properties must be specified.filsint320Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the connection. One of NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) (use global default value), NM_SETTING_WIRELESS_SECURITY_FILS_DISABLE (1) (disable FILS), NM_SETTING_WIRELESS_SECURITY_FILS_OPTIONAL (2) (enable FILS if the supplicant and the access point support it) or NM_SETTING_WIRELESS_SECURITY_FILS_REQUIRED (3) (enable FILS and fail if not supported). When set to NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) and no global default is set, FILS will be optionally enabled.grouparray of stringA list of group/broadcast encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of "wep40", "wep104", "tkip", or "ccmp".key-mgmtstringKey management used for the connection. One of "none" (WEP), "ieee8021x" (Dynamic WEP), "wpa-psk" (infrastructure WPA-PSK), "sae" (SAE), "owe" (Opportunistic Wireless Encryption), "wpa-eap" (WPA-Enterprise) or "wpa-eap-suite-b-192" (WPA3-Enterprise Suite B). This property must be set for any Wi-Fi connection that uses security.leap-passwordstringThe login password for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").leap-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "leap-password" property. (see for flag values)leap-usernamestringThe login username for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").pairwisearray of stringA list of pairwise encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of "tkip" or "ccmp".pmfint320Indicates whether Protected Management Frames (802.11w) must be enabled for the connection. One of NM_SETTING_WIRELESS_SECURITY_PMF_DEFAULT (0) (use global default value), NM_SETTING_WIRELESS_SECURITY_PMF_DISABLE (1) (disable PMF), NM_SETTING_WIRELESS_SECURITY_PMF_OPTIONAL (2) (enable PMF if the supplicant and the access point support it) or NM_SETTING_WIRELESS_SECURITY_PMF_REQUIRED (3) (enable PMF and fail if not supported). When set to NM_SETTING_WIRELESS_SECURITY_PMF_DEFAULT (0) and no global default is set, PMF will be optionally enabled.protoarray of stringList of strings specifying the allowed WPA protocol versions to use. Each element may be one "wpa" (allow WPA) or "rsn" (allow WPA2/RSN). If not specified, both WPA and RSN connections are allowed.pskstringPre-Shared-Key for WPA networks. For WPA-PSK, it's either an ASCII passphrase of 8 to 63 characters that is (as specified in the 802.11i standard) hashed to derive the actual key, or the key in form of 64 hexadecimal character. The WPA3-Personal networks use a passphrase of any length for SAE authentication.psk-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "psk" property. (see for flag values)wep-key-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "wep-key0", "wep-key1", "wep-key2", and "wep-key3" properties. (see for flag values)wep-key-typeNMWepKeyType (uint32)Controls the interpretation of WEP keys. Allowed values are NM_WEP_KEY_TYPE_KEY (1), in which case the key is either a 10- or 26-character hexadecimal string, or a 5- or 13-character ASCII password; or NM_WEP_KEY_TYPE_PASSPHRASE (2), in which case the passphrase is provided as a string and will be hashed using the de-facto MD5 method to derive the actual WEP key.wep-key0stringIndex 0 WEP key. This is the WEP key used in most networks. See the "wep-key-type" property for a description of how this key is interpreted.wep-key1stringIndex 1 WEP key. This WEP index is not used by most networks. See the "wep-key-type" property for a description of how this key is interpreted.wep-key2stringIndex 2 WEP key. This WEP index is not used by most networks. See the "wep-key-type" property for a description of how this key is interpreted.wep-key3stringIndex 3 WEP key. This WEP index is not used by most networks. See the "wep-key-type" property for a description of how this key is interpreted.wep-tx-keyidxuint320When static WEP is used (ie, key-mgmt = "none") and a non-default WEP key index is used by the AP, put that WEP key index here. Valid values are 0 (default key) through 3. Note that some consumer access points (like the Linksys WRT54G) number the keys 1 - 4.wps-methoduint320Flags indicating which mode of WPS is to be used if any. There's little point in changing the default setting as NetworkManager will automatically determine whether it's feasible to start WPS enrollment from the Access Point capabilities. WPS can be disabled by setting this property to a value of 1.wpan settingIEEE 802.15.4 (WPAN) MAC Settings.Key NameValue TypeDefault ValueValue Descriptionchannelint32-1IEEE 802.15.4 channel. A positive integer or -1, meaning "do not set, use whatever the device is already set to".mac-addressstringIf specified, this connection will only apply to the IEEE 802.15.4 (WPAN) MAC layer device whose permanent MAC address matches.pageint32-1IEEE 802.15.4 channel page. A positive integer or -1, meaning "do not set, use whatever the device is already set to".pan-iduint3265535IEEE 802.15.4 Personal Area Network (PAN) identifier.short-addressuint3265535Short IEEE 802.15.4 address to be used within a restricted environment.hostname settingHostname settings.Key NameValue TypeDefault ValueValue Descriptionfrom-dhcpNMTernary (int32)Whether the system hostname can be determined from DHCP on this connection. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_TRUE (1).from-dns-lookupNMTernary (int32)Whether the system hostname can be determined from reverse DNS lookup of addresses on this device. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_TRUE (1).only-from-defaultNMTernary (int32)If set to NM_TERNARY_TRUE (1), NetworkManager attempts to get the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has the default route for the given address family (IPv4/IPv6). If set to NM_TERNARY_FALSE (0), the hostname can be set from this device even if it doesn't have the default route. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_FALSE (0).priorityint320The relative priority of this connection to determine the system hostname. A lower numerical value is better (higher priority). A connection with higher priority is considered before connections with lower priority. If the value is zero, it can be overridden by a global value from NetworkManager configuration. If the property doesn't have a value in the global configuration, the value is assumed to be 100. Negative values have the special effect of excluding other connections with a greater numerical priority value; so in presence of at least one negative priority, only connections with the lowest priority value will be used to determine the hostname.ovs-external-ids settingOVS External IDs Settings.Key NameValue TypeDefault ValueValue Descriptiondatadict of string to string{}A dictionary of key/value pairs with exernal-ids for OVS.veth settingVeth Settings.Key NameValue TypeDefault ValueValue DescriptionpeerstringThis property specifies the peer interface name of the veth. This property is mandatory.Secret flag types: + connection settingGeneral Connection Profile Settings.Key NameValue TypeDefault ValueValue Descriptionauth-retriesint32-1The number of retries for the authentication. Zero means to try indefinitely; -1 means to use a global default. If the global default is not set, the authentication retries for 3 times before failing the connection. Currently, this only applies to 802-1x authentication.autoconnectbooleanTRUEWhether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles.autoconnect-priorityint320The autoconnect priority. If the connection is set to autoconnect, connections with higher priority will be preferred. Defaults to 0. The higher number means higher priority.autoconnect-retriesint32-1The number of times a connection should be tried when autoactivating before giving up. Zero means forever, -1 means the global default (4 times if not overridden). Setting this to 1 means to try activation only once before blocking autoconnect. Note that after a timeout, NetworkManager will try to autoconnect again.autoconnect-slavesNMSettingConnectionAutoconnectSlaves (int32)Whether or not slaves of this connection should be automatically brought up when NetworkManager activates this connection. This only has a real effect for master connections. The properties "autoconnect", "autoconnect-priority" and "autoconnect-retries" are unrelated to this setting. The permitted values are: 0: leave slave connections untouched, 1: activate all the slave connections with this connection, -1: default. If -1 (default) is set, global connection.autoconnect-slaves is read to determine the real value. If it is default as well, this fallbacks to 0.gateway-ping-timeoutuint320If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping.idstringA human readable unique identifier for the connection, like "Work Wi-Fi" or "T-Mobile 3G".interface-namestringThe name of the network interface this connection is bound to. If not set, then the connection can be attached to any interface of the appropriate type (subject to restrictions imposed by other settings). For software devices this specifies the name of the created device. For connection types where interface names cannot easily be made persistent (e.g. mobile broadband or USB Ethernet), this property should not be used. Setting this property restricts the interfaces a connection can be used with, and if interface names change or are reordered the connection may be applied to the wrong interface.lldpint32-1Whether LLDP is enabled for the connection.llmnrint32-1Whether Link-Local Multicast Name Resolution (LLMNR) is enabled for the connection. LLMNR is a protocol based on the Domain Name System (DNS) packet format that allows both IPv4 and IPv6 hosts to perform name resolution for hosts on the same local link. The permitted values are: "yes" (2) register hostname and resolving for the connection, "no" (0) disable LLMNR for the interface, "resolve" (1) do not register hostname but allow resolving of LLMNR host names If unspecified, "default" ultimately depends on the DNS plugin (which for systemd-resolved currently means "yes"). This feature requires a plugin which supports LLMNR. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.masterstringInterface name of the master device or UUID of the master connection.mdnsint32-1Whether mDNS is enabled for the connection. The permitted values are: "yes" (2) register hostname and resolving for the connection, "no" (0) disable mDNS for the interface, "resolve" (1) do not register hostname but allow resolving of mDNS host names and "default" (-1) to allow lookup of a global default in NetworkManager.conf. If unspecified, "default" ultimately depends on the DNS plugin (which for systemd-resolved currently means "no"). This feature requires a plugin which supports mDNS. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.meteredNMMetered (int32)Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately.mud-urlstringIf configured, set to a Manufacturer Usage Description (MUD) URL that points to manufacturer-recommended network policies for IoT devices. It is transmitted as a DHCPv4 or DHCPv6 option. The value must be a valid URL starting with "https://". The special value "none" is allowed to indicate that no MUD URL is used. If the per-profile value is unspecified (the default), a global connection default gets consulted. If still unspecified, the ultimate default is "none".multi-connectint320Specifies whether the profile can be active multiple times at a particular moment. The value is of type NMConnectionMultiConnect.permissionsarray of stringAn array of strings defining what access a given user has to this connection. If this is NULL or empty, all users are allowed to access this connection; otherwise users are allowed if and only if they are in this list. When this is not empty, the connection can be active only when one of the specified users is logged into an active session. Each entry is of the form "[type]:[id]:[reserved]"; for example, "user:dcbw:blah". At this time only the "user" [type] is allowed. Any other values are ignored and reserved for future use. [id] is the username that this permission refers to, which may not contain the ":" character. Any [reserved] information present must be ignored and is reserved for future use. All of [type], [id], and [reserved] must be valid UTF-8.read-onlybooleanFALSEFALSE if the connection can be modified using the provided settings service's D-Bus interface with the right privileges, or TRUE if the connection is read-only and cannot be modified.secondariesarray of stringList of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported.slave-typestringSetting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave.stable-idstringThis represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used as DHCP client identifier with ipv4.dhcp-client-id=stable and to derive the DHCP DUID with ipv6.dhcp-duid=stable-[llt,ll,uuid]. Note that depending on the context where it is used, other parameters are also seeded into the generation algorithm. For example, a per-host key is commonly also included, so that different systems end up generating different IDs. Or with ipv6.addr-gen-mode=stable-privacy, also the device's name is included, so that different interfaces yield different addresses. The per-host key is the identity of your machine and stored in /var/lib/NetworkManager/secret-key. The '$' character is treated special to perform dynamic substitutions at runtime. Currently, supported are "${CONNECTION}", "${DEVICE}", "${MAC}", "${BOOT}", "${RANDOM}". These effectively create unique IDs per-connection, per-device, per-boot, or every time. Note that "${DEVICE}" corresponds to the interface name of the device and "${MAC}" is the permanent MAC address of the device. Any unrecognized patterns following '$' are treated verbatim, however are reserved for future use. You are thus advised to avoid '$' or escape it as "$$". For example, set it to "${CONNECTION}-${BOOT}-${DEVICE}" to create a unique id for this connection that changes with every reboot and differs depending on the interface where the profile activates. If the value is unset, a global connection default is consulted. If the value is still unset, the default is similar to "${CONNECTION}" and uses a unique, fixed ID for the connection.timestampuint640The time, in seconds since the Unix Epoch, that the connection was last _successfully_ fully activated. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp. The property is only meant for reading (changes to this property will not be preserved).typestringBase type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, "802-3-ethernet" or "802-11-wireless" or "bluetooth", etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, "vpn" or "bridge", etc).uuidstringA universally unique identifier for the connection, for example generated with libuuid. It should be assigned when the connection is created, and never changed as long as the connection still applies to the same network. For example, it should not be changed when the "id" property or NMSettingIP4Config changes, but might need to be re-created when the Wi-Fi SSID, mobile broadband network provider, or "type" property changes. The UUID must be in the format "2815492f-7e56-435e-b2e9-246bd7cdc664" (ie, contains only hexadecimal characters and "-").wait-device-timeoutint32-1Timeout in milliseconds to wait for device at startup. During boot, devices may take a while to be detected by the driver. This property will cause to delay NetworkManager-wait-online.service and nm-online to give the device a chance to appear. This works by waiting for the given timeout until a compatible device for the profile is available and managed. The value 0 means no wait time. The default value is -1, which currently has the same meaning as no wait time.zonestringThe trust level of a the connection. Free form case-insensitive string (for example "Home", "Work", "Public"). NULL or unspecified zone means the connection will be placed in the default zone as defined by the firewall. When updating this property on a currently activated connection, the change takes effect immediately.6lowpan setting6LoWPAN Settings.Key NameValue TypeDefault ValueValue DescriptionparentstringIf given, specifies the parent interface name or parent connection UUID from which this 6LowPAN interface should be created.802-1x settingIEEE 802.1x Authentication Settings.Key NameValue TypeDefault ValueValue Descriptionaltsubject-matchesarray of stringList of strings to be matched against the altSubjectName of the certificate presented by the authentication server. If the list is empty, no verification of the server certificate's altSubjectName is performed.anonymous-identitystringAnonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS.auth-timeoutint320A timeout for the authentication. Zero means the global default; if the global default is not set, the authentication timeout is 25 seconds.ca-certbyte arrayContains the CA certificate if used by the EAP method specified in the "eap" property. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory.ca-cert-passwordstringThe password used to access the CA certificate stored in "ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.ca-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "ca-cert-password" property. (see for flag values)ca-pathstringUTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the "ca-cert" property. If NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an existing directory, then this setting is ignored.client-certbyte arrayContains the client certificate if used by the EAP method specified in the "eap" property. Certificate data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte.client-cert-passwordstringThe password used to access the client certificate stored in "client-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.client-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "client-cert-password" property. (see for flag values)domain-matchstringConstraint for server domain name. If set, this list of FQDNs is used as a match requirement for dNSName element(s) of the certificate presented by the authentication server. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using the same comparison. Multiple valid FQDNs can be passed as a ";" delimited list.domain-suffix-matchstringConstraint for server domain name. If set, this FQDN is used as a suffix match requirement for dNSName element(s) of the certificate presented by the authentication server. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using same suffix match comparison. Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited list.eaparray of stringThe allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: "leap", "md5", "tls", "peap", "ttls", "pwd", and "fast". Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations.identitystringIdentity string for EAP authentication methods. Often the user's user or login name.optionalbooleanFALSEWhether the 802.1X authentication is optional. If TRUE, the activation will continue even after a timeout or an authentication failure. Setting the property to TRUE is currently allowed only for Ethernet connections. If set to FALSE, the activation can continue only after a successful authentication.pac-filestringUTF-8 encoded file path containing PAC for EAP-FAST.passwordstringUTF-8 encoded password used for EAP authentication methods. If both the "password" property and the "password-raw" property are specified, "password" is preferred.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)password-rawbyte arrayPassword used for EAP authentication methods, given as a byte array to allow passwords in other encodings than UTF-8 to be used. If both the "password" property and the "password-raw" property are specified, "password" is preferred.password-raw-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password-raw" property. (see for flag values)phase1-auth-flagsuint320Specifies authentication flags to use in "phase 1" outer authentication using NMSetting8021xAuthFlags options. The individual TLS versions can be explicitly disabled. If a certain TLS disable flag is not set, it is up to the supplicant to allow or forbid it. The TLS options map to tls_disable_tlsv1_x settings. See the wpa_supplicant documentation for more details.phase1-fast-provisioningstringEnables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the "eap" property. Recognized values are "0" (disabled), "1" (allow unauthenticated provisioning), "2" (allow authenticated provisioning), and "3" (allow both authenticated and unauthenticated provisioning). See the wpa_supplicant documentation for more details.phase1-peaplabelstringForces use of the new PEAP label during key derivation. Some RADIUS servers may require forcing the new PEAP label to interoperate with PEAPv1. Set to "1" to force use of the new PEAP label. See the wpa_supplicant documentation for more details.phase1-peapverstringForces which PEAP version is used when PEAP is set as the EAP method in the "eap" property. When unset, the version reported by the server will be used. Sometimes when using older RADIUS servers, it is necessary to force the client to use a particular PEAP version. To do so, this property may be set to "0" or "1" to force that specific PEAP version.phase2-altsubject-matchesarray of stringList of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner "phase 2" authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed.phase2-authstringSpecifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified.phase2-autheapstringSpecifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.phase2-ca-certbyte arrayContains the "phase 2" CA certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory.phase2-ca-cert-passwordstringThe password used to access the "phase2" CA certificate stored in "phase2-ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.phase2-ca-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-ca-cert-password" property. (see for flag values)phase2-ca-pathstringUTF-8 encoded path to a directory containing PEM or DER formatted certificates to be added to the verification chain in addition to the certificate specified in the "phase2-ca-cert" property. If NMSetting8021x:system-ca-certs is enabled and the built-in CA path is an existing directory, then this setting is ignored.phase2-client-certbyte arrayContains the "phase 2" client certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme (which is backwards compatible with NM 0.7.x) this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended.phase2-client-cert-passwordstringThe password used to access the "phase2" client certificate stored in "phase2-client-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.phase2-client-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-client-cert-password" property. (see for flag values)phase2-domain-matchstringConstraint for server domain name. If set, this list of FQDNs is used as a match requirement for dNSName element(s) of the certificate presented by the authentication server during the inner "phase 2" authentication. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using the same comparison. Multiple valid FQDNs can be passed as a ";" delimited list.phase2-domain-suffix-matchstringConstraint for server domain name. If set, this FQDN is used as a suffix match requirement for dNSName element(s) of the certificate presented by the authentication server during the inner "phase 2" authentication. If a matching dNSName is found, this constraint is met. If no dNSName values are present, this constraint is matched against SubjectName CN using same suffix match comparison. Since version 1.24, multiple valid FQDNs can be passed as a ";" delimited list.phase2-private-keybyte arrayContains the "phase 2" inner private key when the "phase2-auth" or "phase2-autheap" property is set to "tls". Key data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the "phase2-private-key-password" property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte, and as with the blob scheme the "phase2-private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate.phase2-private-key-passwordstringThe password used to decrypt the "phase 2" private key specified in the "phase2-private-key" property when the private key either uses the path scheme, or is a PKCS#12 format key.phase2-private-key-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-private-key-password" property. (see for flag values)phase2-subject-matchstringSubstring to be matched against the subject of the certificate presented by the authentication server during the inner "phase 2" authentication. When unset, no verification of the authentication server certificate's subject is performed. This property provides little security, if any, and its use is deprecated in favor of NMSetting8021x:phase2-domain-suffix-match.pinstringPIN used for EAP authentication methods.pin-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "pin" property. (see for flag values)private-keybyte arrayContains the private key when the "eap" property is set to "tls". Key data is specified using a "scheme"; two are currently supported: blob and path. When using the blob scheme and private keys, this property should be set to the key's encrypted PEM encoded data. When using private keys with the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte. When using PKCS#12 format private keys and the blob scheme, this property should be set to the PKCS#12 data and the "private-key-password" property must be set to password used to decrypt the PKCS#12 certificate and key. When using PKCS#12 files and the path scheme, this property should be set to the full UTF-8 encoded path of the key, prefixed with the string "file://" and ending with a terminating NUL byte, and as with the blob scheme the "private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate. WARNING: "private-key" is not a "secret" property, and thus unencrypted private key data using the BLOB scheme may be readable by unprivileged users. Private keys should always be encrypted with a private key password to prevent unauthorized access to unencrypted private key data.private-key-passwordstringThe password used to decrypt the private key specified in the "private-key" property when the private key either uses the path scheme, or if the private key is a PKCS#12 format key.private-key-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "private-key-password" property. (see for flag values)subject-matchstringSubstring to be matched against the subject of the certificate presented by the authentication server. When unset, no verification of the authentication server certificate's subject is performed. This property provides little security, if any, and its use is deprecated in favor of NMSetting8021x:domain-suffix-match.system-ca-certsbooleanFALSEWhen TRUE, overrides the "ca-path" and "phase2-ca-path" properties using the system CA directory specified at configure time with the --system-ca-path switch. The certificates in this directory are added to the verification chain in addition to any certificates specified by the "ca-cert" and "phase2-ca-cert" properties. If the path provided with --system-ca-path is rather a file name (bundle of trusted CA certificates), it overrides "ca-cert" and "phase2-ca-cert" properties instead (sets ca_cert/ca_cert2 options for wpa_supplicant).adsl settingADSL Settings.Key NameValue TypeDefault ValueValue DescriptionencapsulationstringEncapsulation of ADSL connection. Can be "vcmux" or "llc".passwordstringPassword used to authenticate with the ADSL service.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)protocolstringADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm".usernamestringUsername used to authenticate with the ADSL service.vciuint320VCI of ADSL connectionvpiuint320VPI of ADSL connectionbluetooth settingBluetooth Settings.Key NameValue TypeDefault ValueValue Descriptionbdaddrbyte arrayThe Bluetooth address of the device.typestringEither "dun" for Dial-Up Networking connections or "panu" for Personal Area Networking connections to devices supporting the NAP profile.bond settingBonding Settings.Key NameValue TypeDefault ValueValue Descriptioninterface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bond's interface name.optionsdict of string to string{'mode': 'balance-rr'}Dictionary of key/value pairs of bonding options. Both keys and values must be strings. Option names must contain only alphanumeric characters (ie, [a-zA-Z0-9]).bridge settingBridging Settings.Key NameValue TypeDefault ValueValue Descriptionageing-timeuint32300The Ethernet MAC address aging time, in seconds.forward-delayuint3215The Spanning Tree Protocol (STP) forwarding delay, in seconds.group-addressbyte arrayIf specified, The MAC address of the multicast group this bridge uses for STP. The address must be a link-local address in standard Ethernet MAC address format, ie an address of the form 01:80:C2:00:00:0X, with X in [0, 4..F]. If not specified the default value is 01:80:C2:00:00:00.group-forward-maskuint320A mask of group addresses to forward. Usually, group addresses in the range from 01:80:C2:00:00:00 to 01:80:C2:00:00:0F are not forwarded according to standards. This property is a mask of 16 bits, each corresponding to a group address in that range that must be forwarded. The mask can't have bits 0, 1 or 2 set because they are used for STP, MAC pause frames and LACP.hello-timeuint322The Spanning Tree Protocol (STP) hello time, in seconds.interface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bridge's interface name.mac-addressbyte arrayIf specified, the MAC address of bridge. When creating a new bridge, this MAC address will be set. If this field is left unspecified, the "ethernet.cloned-mac-address" is referred instead to generate the initial MAC address. Note that setting "ethernet.cloned-mac-address" anyway overwrites the MAC address of the bridge later while activating the bridge. Hence, this property is deprecated. Deprecated: 1max-ageuint3220The Spanning Tree Protocol (STP) maximum message age, in seconds.multicast-hash-maxuint324096Set maximum size of multicast hash table (value must be a power of 2).multicast-last-member-countuint322Set the number of queries the bridge will send before stopping forwarding a multicast group after a "leave" message has been received.multicast-last-member-intervaluint64100Set interval (in deciseconds) between queries to find remaining members of a group, after a "leave" message is received.multicast-membership-intervaluint6426000Set delay (in deciseconds) after which the bridge will leave a group, if no membership reports for this group are received.multicast-querierbooleanFALSEEnable or disable sending of multicast queries by the bridge. If not specified the option is disabled.multicast-querier-intervaluint6425500If no queries are seen after this delay (in deciseconds) has passed, the bridge will start to send its own queries.multicast-query-intervaluint6412500Interval (in deciseconds) between queries sent by the bridge after the end of the startup phase.multicast-query-response-intervaluint641000Set the Max Response Time/Max Response Delay (in deciseconds) for IGMP/MLD queries sent by the bridge.multicast-query-use-ifaddrbooleanFALSEIf enabled the bridge's own IP address is used as the source address for IGMP queries otherwise the default of 0.0.0.0 is used.multicast-routerstringSets bridge's multicast router. Multicast-snooping must be enabled for this option to work. Supported values are: 'auto', 'disabled', 'enabled' to which kernel assigns the numbers 1, 0, and 2, respectively. If not specified the default value is 'auto' (1).multicast-snoopingbooleanTRUEControls whether IGMP snooping is enabled for this bridge. Note that if snooping was automatically disabled due to hash collisions, the system may refuse to enable the feature until the collisions are resolved.multicast-startup-query-countuint322Set the number of IGMP queries to send during startup phase.multicast-startup-query-intervaluint643125Sets the time (in deciseconds) between queries sent out at startup to determine membership information.priorityuint3232768Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are "better"; the lowest priority bridge will be elected the root bridge.stpbooleanTRUEControls whether Spanning Tree Protocol (STP) is enabled for this bridge.vlan-default-pviduint321The default PVID for the ports of the bridge, that is the VLAN id assigned to incoming untagged frames.vlan-filteringbooleanFALSEControl whether VLAN filtering is enabled on the bridge.vlan-protocolstringIf specified, the protocol used for VLAN filtering. Supported values are: '802.1Q', '802.1ad'. If not specified the default value is '802.1Q'.vlan-stats-enabledbooleanFALSEControls whether per-VLAN stats accounting is enabled.vlansarray of vardictArray of bridge VLAN objects. In addition to the VLANs specified here, the bridge will also have the default-pvid VLAN configured by the bridge.vlan-default-pvid property. In nmcli the VLAN list can be specified with the following syntax: $vid [pvid] [untagged] [, $vid [pvid] [untagged]]... where $vid is either a single id between 1 and 4094 or a range, represented as a couple of ids separated by a dash.bridge-port settingBridge Port Settings.Key NameValue TypeDefault ValueValue Descriptionhairpin-modebooleanFALSEEnables or disables "hairpin mode" for the port, which allows frames to be sent back out through the port the frame was received on.path-costuint32100The Spanning Tree Protocol (STP) port cost for destinations via this port.priorityuint3232The Spanning Tree Protocol (STP) priority of this bridge port.vlansarray of vardictArray of bridge VLAN objects. In addition to the VLANs specified here, the port will also have the default-pvid VLAN configured on the bridge by the bridge.vlan-default-pvid property. In nmcli the VLAN list can be specified with the following syntax: $vid [pvid] [untagged] [, $vid [pvid] [untagged]]... where $vid is either a single id between 1 and 4094 or a range, represented as a couple of ids separated by a dash.cdma settingCDMA-based Mobile Broadband Settings.Key NameValue TypeDefault ValueValue Descriptionmtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.numberstringThe number to dial to establish the connection to the CDMA-based mobile broadband network, if any. If not specified, the default number (#777) is used when required.passwordstringThe password used to authenticate with the network, if required. Many providers do not require a password, or accept any password. But if a password is required, it is specified here.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)usernamestringThe username used to authenticate with the network, if required. Many providers do not require a username, or accept any username. But if a username is required, it is specified here.dcb settingData Center Bridging Settings.Key NameValue TypeDefault ValueValue Descriptionapp-fcoe-flagsNMSettingDcbFlags (uint32)Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).app-fcoe-modestring"fabric"The FCoE controller mode; either "fabric" (default) or "vn2vn".app-fcoe-priorityint32-1The highest User Priority (0 - 7) which FCoE frames should use, or -1 for default priority. Only used when the "app-fcoe-flags" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.app-fip-flagsNMSettingDcbFlags (uint32)Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).app-fip-priorityint32-1The highest User Priority (0 - 7) which FIP frames should use, or -1 for default priority. Only used when the "app-fip-flags" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.app-iscsi-flagsNMSettingDcbFlags (uint32)Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).app-iscsi-priorityint32-1The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for default priority. Only used when the "app-iscsi-flags" property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.priority-bandwidtharray of uint32An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the percentage of bandwidth of the priority's assigned group that the priority may use. The sum of all percentages for priorities which belong to the same group must total 100 percents.priority-flow-controlarray of uint32An array of 8 boolean values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the corresponding priority should transmit priority pause.priority-flow-control-flagsNMSettingDcbFlags (uint32)Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).priority-group-bandwidtharray of uint32An array of 8 uint values, where the array index corresponds to the Priority Group ID (0 - 7) and the value indicates the percentage of link bandwidth allocated to that group. Allowed values are 0 - 100, and the sum of all values must total 100 percents.priority-group-flagsNMSettingDcbFlags (uint32)Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).priority-group-idarray of uint32An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the Priority Group ID. Allowed Priority Group ID values are 0 - 7 or 15 for the unrestricted group.priority-strict-bandwidtharray of uint32An array of 8 boolean values, where the array index corresponds to the User Priority (0 - 7) and the value indicates whether or not the priority may use all of the bandwidth allocated to its assigned group.priority-traffic-classarray of uint32An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the traffic class (0 - 7) to which the priority is mapped.dummy settingDummy Link Settings.Key NameValue TypeDefault ValueValue Descriptionethtool settingEthtool Ethernet Settings.Key NameValue TypeDefault ValueValue Descriptiongeneric settingGeneric Link Settings.Key NameValue TypeDefault ValueValue Descriptiongsm settingGSM-based Mobile Broadband Settings.Key NameValue TypeDefault ValueValue DescriptionapnstringThe GPRS Access Point Name specifying the APN used when establishing a data session with the GSM-based network. The APN often determines how the user will be billed for their network usage and whether the user has access to the Internet or just a provider-specific walled-garden, so it is important to use the correct APN for the user's mobile broadband plan. The APN may only be composed of the characters a-z, 0-9, ., and - per GSM 03.60 Section 14.9.auto-configbooleanFALSEWhen TRUE, the settings such as APN, username, or password will default to values that match the network the modem will register to in the Mobile Broadband Provider database.device-idstringThe device unique identifier (as given by the WWAN management service) which this connection applies to. If given, the connection will only apply to the specified device.home-onlybooleanFALSEWhen TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.network-idstringThe Network ID (GSM LAI format, ie MCC-MNC) to force specific network registration. If the Network ID is specified, NetworkManager will attempt to force the device to register only on the specified network. This can be used to ensure that the device does not roam when direct roaming control of the device is not otherwise possible.numberstringLegacy setting that used to help establishing PPP data sessions for GSM-based modems. Deprecated: 1passwordstringThe password used to authenticate with the network, if required. Many providers do not require a password, or accept any password. But if a password is required, it is specified here.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)pinstringIf the SIM is locked with a PIN it must be unlocked before any other operations are requested. Specify the PIN here to allow operation of the device.pin-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "pin" property. (see for flag values)sim-idstringThe SIM card unique identifier (as given by the WWAN management service) which this connection applies to. If given, the connection will apply to any device also allowed by "device-id" which contains a SIM card matching the given identifier.sim-operator-idstringA MCC/MNC string like "310260" or "21601" identifying the specific mobile network operator which this connection applies to. If given, the connection will apply to any device also allowed by "device-id" and "sim-id" which contains a SIM card provisioned by the given operator.usernamestringThe username used to authenticate with the network, if required. Many providers do not require a username, or accept any username. But if a username is required, it is specified here.infiniband settingInfiniband Settings.Key NameValue TypeDefault ValueValue Descriptionmac-addressbyte arrayIf specified, this connection will only apply to the IPoIB device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.p-keyint32-1The InfiniBand P_Key to use for this device. A value of -1 means to use the default P_Key (aka "the P_Key at index 0"). Otherwise, it is a 16-bit unsigned integer, whose high bit is set if it is a "full membership" P_Key.parentstringThe interface name of the parent device of this device. Normally NULL, but if the "p_key" property is set, then you must specify the base device by setting either this property or "mac-address".transport-modestringThe IP-over-InfiniBand transport mode. Either "datagram" or "connected".ipv4 settingIPv4 Settings.Key NameValue TypeDefault ValueValue Descriptionaddress-dataarray of vardictArray of IPv4 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.addressesarray of array of uint32Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. Array of IPv4 address structures. Each IPv4 address structure is composed of 3 32-bit values; the first being the IPv4 address (network byte order), the second the prefix (1 - 32), and last the IPv4 gateway (network byte order). The gateway may be left as 0 if no gateway exists for that subnet.dad-timeoutint32-1Timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. A zero value means that no duplicate address detection is performed, -1 means the default value (either configuration ipvx.dad-timeout override or zero). A value greater than zero is a timeout in milliseconds. The property is currently implemented only for IPv4.dhcp-client-idstringA string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options. When the property is a hex string ('aa:bb:cc') it is interpreted as a binary client ID, in which case the first byte is assumed to be the 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a MAC address). If the property is not a hex string it is considered as a non-hardware-address client ID and the 'type' field is set to 0. The special values "mac" and "perm-mac" are supported, which use the current or permanent MAC address of the device to generate a client identifier with type ethernet (01). Currently, these options only work for ethernet type of links. The special value "ipv6-duid" uses the DUID from "ipv6.dhcp-duid" property as an RFC4361-compliant client identifier. As IAID it uses "ipv4.dhcp-iaid" and falls back to "ipv6.dhcp-iaid" if unset. The special value "duid" generates a RFC4361-compliant client identifier based on "ipv4.dhcp-iaid" and uses a DUID generated by hashing /etc/machine-id. The special value "stable" is supported to generate a type 0 client identifier based on the stable-id (see connection.stable-id) and a per-host key. If you set the stable-id, you may want to include the "${DEVICE}" or "${MAC}" specifier to get a per-device key. If unset, a globally configured default is used. If still unset, the default depends on the DHCP plugin.dhcp-fqdnstringIf the "dhcp-send-hostname" property is TRUE, then the specified FQDN will be sent to the DHCP server when acquiring a lease. This property and "dhcp-hostname" are mutually exclusive and cannot be set at the same time.dhcp-hostnamestringIf the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and "dhcp-fqdn" are mutually exclusive and cannot be set at the same time.dhcp-hostname-flagsuint320Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) and NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE (0x4). When no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is not set, the standard FQDN flags are set in the request: NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) for IPv4 and NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1) for IPv6. When this property is set to the default value NM_DHCP_HOSTNAME_FLAG_NONE (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also NM_DHCP_HOSTNAME_FLAG_NONE (0x0), then the standard FQDN flags described above are sent in the DHCP requests.dhcp-iaidstringA string containing the "Identity Association Identifier" (IAID) used by the DHCP client. The property is a 32-bit decimal value or a special value among "mac", "perm-mac", "ifname" and "stable". When set to "mac" (or "perm-mac"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to "ifname", the IAID is computed by hashing the interface name. The special value "stable" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be "ifname". Note that at the moment this property is ignored for IPv6 by dhclient, which always derives the IAID from the MAC address.dhcp-reject-serversarray of stringArray of servers from which DHCP offers must be rejected. This property is useful to avoid getting a lease from misconfigured or rogue servers. For DHCPv4, each element must be an IPv4 address, optionally followed by a slash and a prefix length (e.g. "192.168.122.0/24"). This property is currently not implemented for DHCPv6.dhcp-send-hostnamebooleanTRUEIf TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer. If the "dhcp-hostname" property is NULL and this property is TRUE, the current persistent hostname of the computer is sent.dhcp-timeoutint320A timeout for a DHCP transaction in seconds. If zero (the default), a globally configured default is used. If still unspecified, a device specific timeout is used (usually 45 seconds). Set to 2147483647 (MAXINT32) for infinity.dhcp-vendor-class-identifierstringThe Vendor Class Identifier DHCP option (60). Special characters in the data string may be escaped using C-style escapes, nevertheless this property cannot contain nul bytes. If the per-profile value is unspecified (the default), a global connection default gets consulted. If still unspecified, the DHCP option is not sent to the server. Since 1.28dnsarray of uint32Array of IP addresses of DNS servers (as network-byte-order integers)dns-optionsarray of stringArray of DNS options as described in man 5 resolv.conf. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties. The currently supported options are "attempts", "debug", "edns0", "inet6", "ip6-bytestring", "ip6-dotint", "ndots", "no-check-names", "no-ip6-dotint", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc". The "trust-ad" setting is only honored if the profile contributes name servers to resolv.conf, and if all contributing profiles have "trust-ad" enabled. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added.dns-priorityint320DNS servers priority. The relative priority for DNS servers specified by this setting. A lower numerical value is better (higher priority). Negative values have the special effect of excluding other configurations with a greater numerical priority value; so in presence of at least one negative priority, only DNS servers from connections with the lowest priority value will be used. To avoid all DNS leaks, set the priority of the profile that should be used to the most negative value of all active connections profiles. Zero selects a globally configured default value. If the latter is missing or zero too, it defaults to 50 for VPNs (including WireGuard) and 100 for other connections. Note that the priority is to order DNS settings for multiple active connections. It does not disambiguate multiple DNS servers within the same connection profile. When multiple devices have configurations with the same priority, VPNs will be considered first, then devices with the best (lowest metric) default route and then all other devices. When using dns=default, servers with higher priority will be on top of resolv.conf. To prioritize a given server over another one within the same connection, just specify them in the desired order. Note that commonly the resolver tries name servers in /etc/resolv.conf in the order listed, proceeding with the next server in the list on failure. See for example the "rotate" option of the dns-options setting. If there are any negative DNS priorities, then only name servers from the devices with that lowest priority will be considered. When using a DNS resolver that supports Conditional Forwarding or Split DNS (with dns=dnsmasq or dns=systemd-resolved settings), each connection is used to query domains in its search list. The search domains determine which name servers to ask, and the DNS priority is used to prioritize name servers based on the domain. Queries for domains not present in any search list are routed through connections having the '~.' special wildcard domain, which is added automatically to connections with the default route (or can be added manually). When multiple connections specify the same domain, the one with the best priority (lowest numerical value) wins. If a sub domain is configured on another interface it will be accepted regardless the priority, unless parent domain on the other interface has a negative priority, which causes the sub domain to be shadowed. With Split DNS one can avoid undesired DNS leaks by properly configuring DNS priorities and the search domains, so that only name servers of the desired interface are configured.dns-searcharray of stringArray of DNS search domains. Domains starting with a tilde ('~') are considered 'routing' domains and are used only to decide the interface over which a query must be forwarded; they are not used to complete unqualified host names. When using a DNS plugin that supports Conditional Forwarding or Split DNS, then the search domains specify which name servers to query. This makes the behavior different from running with plain /etc/resolv.conf. For more information see also the dns-priority setting.gatewaystringThe gateway associated with this configuration. This is only meaningful if "addresses" is also set. The gateway's main purpose is to control the next hop of the standard default route on the device. Hence, the gateway property conflicts with "never-default" and will be automatically dropped if the IP configuration is set to never-default. As an alternative to set the gateway, configure a static default route with /0 as prefix length.ignore-auto-dnsbooleanFALSEWhen "method" is set to "auto" and this property to TRUE, automatically configured name servers and search domains are ignored and only name servers and search domains specified in the "dns" and "dns-search" properties, if any, are used.ignore-auto-routesbooleanFALSEWhen "method" is set to "auto" and this property to TRUE, automatically configured routes are ignored and only routes specified in the "routes" property, if any, are used.may-failbooleanTRUEIf TRUE, allow overall network configuration to proceed even if the configuration specified by this property times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv6-only networks, setting this property to TRUE on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully.methodstringIP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "disabled", "auto", "manual", and "link-local". See the subclass-specific documentation for other values. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration. The "ignore-auto-routes" and "ignore-auto-dns" properties modify this behavior. For methods that imply no upstream network, such as "shared" or "link-local", these properties must be empty. For IPv4 method "shared", the IP subnet can be configured by adding one manual IPv4 address or otherwise 10.42.x.0/24 is chosen. Note that the shared method must be configured on the interface which shares the internet to a subnet, not on the uplink which is shared.never-defaultbooleanFALSEIf TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.route-dataarray of vardictArray of IPv4 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'next-hop' entry, containing the next hop IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.route-metricint64-1The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is chosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric.route-tableuint320Enable policy routing (source routing) and set the routing table used when adding routes. This affects all routes, including device-routes, IPv4LL, DHCP, SLAAC, default-routes and static routes. But note that static routes can individually overwrite the setting by explicitly specifying a non-zero routing table. If the table setting is left at zero, it is eligible to be overwritten via global configuration. If the property is zero even after applying the global configuration value, policy routing is disabled for the address family of this connection. Policy routing disabled means that NetworkManager will add all routes to the main table (except static routes that explicitly configure a different table). Additionally, NetworkManager will not delete any extraneous routes from tables except the main table. This is to preserve backward compatibility for users who manage routing tables outside of NetworkManager.routesarray of array of uint32Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. Array of IPv4 route structures. Each IPv4 route structure is composed of 4 32-bit values; the first being the destination IPv4 network or address (network byte order), the second the destination network or address prefix (1 - 32), the third being the next-hop (network byte order) if any, and the fourth being the route metric. If the metric is 0, NM will choose an appropriate default metric for the device. (There is no way to explicitly specify an actual metric of 0 with this property.)ipv6 settingIPv6 Settings.Key NameValue TypeDefault ValueValue Descriptionaddr-gen-modeint321Configure method for creating the address for use with RFC4862 IPv6 Stateless Address Autoconfiguration. The permitted values are: NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64 (0) or NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_STABLE_PRIVACY (1). If the property is set to EUI64, the addresses will be generated using the interface tokens derived from hardware address. This makes the host part of the address to stay constant, making it possible to track host's presence when it changes networks. The address changes when the interface hardware is replaced. The value of stable-privacy enables use of cryptographically secure hash of a secret host-specific key along with the connection's stable-id and the network address as specified by RFC7217. This makes it impossible to use the address track host's presence, and makes the address stable when the network interface hardware is replaced. On D-Bus, the absence of an addr-gen-mode setting equals enabling stable-privacy. For keyfile plugin, the absence of the setting on disk means EUI64 so that the property doesn't change on upgrade from older versions. Note that this setting is distinct from the Privacy Extensions as configured by "ip6-privacy" property and it does not affect the temporary addresses configured with this option.address-dataarray of vardictArray of IPv6 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.addressesarray of legacy IPv6 address struct (a(ayuay))Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. Array of IPv6 address structures. Each IPv6 address structure is composed of an IPv6 address, a prefix length (1 - 128), and an IPv6 gateway address. The gateway may be zeroed out if no gateway exists for that subnet.dad-timeoutint32-1Timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. A zero value means that no duplicate address detection is performed, -1 means the default value (either configuration ipvx.dad-timeout override or zero). A value greater than zero is a timeout in milliseconds. The property is currently implemented only for IPv4.dhcp-duidstringA string containing the DHCPv6 Unique Identifier (DUID) used by the dhcp client to identify itself to DHCPv6 servers (RFC 3315). The DUID is carried in the Client Identifier option. If the property is a hex string ('aa:bb:cc') it is interpreted as a binary DUID and filled as an opaque value in the Client Identifier option. The special value "lease" will retrieve the DUID previously used from the lease file belonging to the connection. If no DUID is found and "dhclient" is the configured dhcp client, the DUID is searched in the system-wide dhclient lease file. If still no DUID is found, or another dhcp client is used, a global and permanent DUID-UUID (RFC 6355) will be generated based on the machine-id. The special values "llt" and "ll" will generate a DUID of type LLT or LL (see RFC 3315) based on the current MAC address of the device. In order to try providing a stable DUID-LLT, the time field will contain a constant timestamp that is used globally (for all profiles) and persisted to disk. The special values "stable-llt", "stable-ll" and "stable-uuid" will generate a DUID of the corresponding type, derived from the connection's stable-id and a per-host unique key. You may want to include the "${DEVICE}" or "${MAC}" specifier in the stable-id, in case this profile gets activated on multiple devices. So, the link-layer address of "stable-ll" and "stable-llt" will be a generated address derived from the stable id. The DUID-LLT time value in the "stable-llt" option will be picked among a static timespan of three years (the upper bound of the interval is the same constant timestamp used in "llt"). When the property is unset, the global value provided for "ipv6.dhcp-duid" is used. If no global value is provided, the default "lease" value is assumed.dhcp-hostnamestringIf the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and "dhcp-fqdn" are mutually exclusive and cannot be set at the same time.dhcp-hostname-flagsuint320Flags for the DHCP hostname and FQDN. Currently, this property only includes flags to control the FQDN flags set in the DHCP FQDN option. Supported FQDN flags are NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) and NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE (0x4). When no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is set, the DHCP FQDN option will contain no flag. Otherwise, if no FQDN flag is set and NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS (0x8) is not set, the standard FQDN flags are set in the request: NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1), NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED (0x2) for IPv4 and NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE (0x1) for IPv6. When this property is set to the default value NM_DHCP_HOSTNAME_FLAG_NONE (0x0), a global default is looked up in NetworkManager configuration. If that value is unset or also NM_DHCP_HOSTNAME_FLAG_NONE (0x0), then the standard FQDN flags described above are sent in the DHCP requests.dhcp-iaidstringA string containing the "Identity Association Identifier" (IAID) used by the DHCP client. The property is a 32-bit decimal value or a special value among "mac", "perm-mac", "ifname" and "stable". When set to "mac" (or "perm-mac"), the last 4 bytes of the current (or permanent) MAC address are used as IAID. When set to "ifname", the IAID is computed by hashing the interface name. The special value "stable" can be used to generate an IAID based on the stable-id (see connection.stable-id), a per-host key and the interface name. When the property is unset, the value from global configuration is used; if no global default is set then the IAID is assumed to be "ifname". Note that at the moment this property is ignored for IPv6 by dhclient, which always derives the IAID from the MAC address.dhcp-reject-serversarray of stringArray of servers from which DHCP offers must be rejected. This property is useful to avoid getting a lease from misconfigured or rogue servers. For DHCPv4, each element must be an IPv4 address, optionally followed by a slash and a prefix length (e.g. "192.168.122.0/24"). This property is currently not implemented for DHCPv6.dhcp-send-hostnamebooleanTRUEIf TRUE, a hostname is sent to the DHCP server when acquiring a lease. Some DHCP servers use this hostname to update DNS databases, essentially providing a static hostname for the computer. If the "dhcp-hostname" property is NULL and this property is TRUE, the current persistent hostname of the computer is sent.dhcp-timeoutint320A timeout for a DHCP transaction in seconds. If zero (the default), a globally configured default is used. If still unspecified, a device specific timeout is used (usually 45 seconds). Set to 2147483647 (MAXINT32) for infinity.dnsarray of byte arrayArray of IP addresses of DNS servers (in network byte order)dns-optionsarray of stringArray of DNS options as described in man 5 resolv.conf. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties. The currently supported options are "attempts", "debug", "edns0", "inet6", "ip6-bytestring", "ip6-dotint", "ndots", "no-check-names", "no-ip6-dotint", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc". The "trust-ad" setting is only honored if the profile contributes name servers to resolv.conf, and if all contributing profiles have "trust-ad" enabled. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added.dns-priorityint320DNS servers priority. The relative priority for DNS servers specified by this setting. A lower numerical value is better (higher priority). Negative values have the special effect of excluding other configurations with a greater numerical priority value; so in presence of at least one negative priority, only DNS servers from connections with the lowest priority value will be used. To avoid all DNS leaks, set the priority of the profile that should be used to the most negative value of all active connections profiles. Zero selects a globally configured default value. If the latter is missing or zero too, it defaults to 50 for VPNs (including WireGuard) and 100 for other connections. Note that the priority is to order DNS settings for multiple active connections. It does not disambiguate multiple DNS servers within the same connection profile. When multiple devices have configurations with the same priority, VPNs will be considered first, then devices with the best (lowest metric) default route and then all other devices. When using dns=default, servers with higher priority will be on top of resolv.conf. To prioritize a given server over another one within the same connection, just specify them in the desired order. Note that commonly the resolver tries name servers in /etc/resolv.conf in the order listed, proceeding with the next server in the list on failure. See for example the "rotate" option of the dns-options setting. If there are any negative DNS priorities, then only name servers from the devices with that lowest priority will be considered. When using a DNS resolver that supports Conditional Forwarding or Split DNS (with dns=dnsmasq or dns=systemd-resolved settings), each connection is used to query domains in its search list. The search domains determine which name servers to ask, and the DNS priority is used to prioritize name servers based on the domain. Queries for domains not present in any search list are routed through connections having the '~.' special wildcard domain, which is added automatically to connections with the default route (or can be added manually). When multiple connections specify the same domain, the one with the best priority (lowest numerical value) wins. If a sub domain is configured on another interface it will be accepted regardless the priority, unless parent domain on the other interface has a negative priority, which causes the sub domain to be shadowed. With Split DNS one can avoid undesired DNS leaks by properly configuring DNS priorities and the search domains, so that only name servers of the desired interface are configured.dns-searcharray of stringArray of DNS search domains. Domains starting with a tilde ('~') are considered 'routing' domains and are used only to decide the interface over which a query must be forwarded; they are not used to complete unqualified host names. When using a DNS plugin that supports Conditional Forwarding or Split DNS, then the search domains specify which name servers to query. This makes the behavior different from running with plain /etc/resolv.conf. For more information see also the dns-priority setting.gatewaystringThe gateway associated with this configuration. This is only meaningful if "addresses" is also set. The gateway's main purpose is to control the next hop of the standard default route on the device. Hence, the gateway property conflicts with "never-default" and will be automatically dropped if the IP configuration is set to never-default. As an alternative to set the gateway, configure a static default route with /0 as prefix length.ignore-auto-dnsbooleanFALSEWhen "method" is set to "auto" and this property to TRUE, automatically configured name servers and search domains are ignored and only name servers and search domains specified in the "dns" and "dns-search" properties, if any, are used.ignore-auto-routesbooleanFALSEWhen "method" is set to "auto" and this property to TRUE, automatically configured routes are ignored and only routes specified in the "routes" property, if any, are used.ip6-privacyNMSettingIP6ConfigPrivacy (int32)Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If enabled, it makes the kernel generate a temporary IPv6 address in addition to the public one generated from MAC address via modified EUI-64. This enhances privacy, but could cause problems in some applications, on the other hand. The permitted values are: -1: unknown, 0: disabled, 1: enabled (prefer public address), 2: enabled (prefer temporary addresses). Having a per-connection setting set to "-1" (unknown) means fallback to global configuration "ipv6.ip6-privacy". If also global configuration is unspecified or set to "-1", fallback to read "/proc/sys/net/ipv6/conf/default/use_tempaddr". Note that this setting is distinct from the Stable Privacy addresses that can be enabled with the "addr-gen-mode" property's "stable-privacy" setting as another way of avoiding host tracking with IPv6 addresses.may-failbooleanTRUEIf TRUE, allow overall network configuration to proceed even if the configuration specified by this property times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv6-only networks, setting this property to TRUE on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully.methodstringIP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "disabled", "auto", "manual", and "link-local". See the subclass-specific documentation for other values. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration. The "ignore-auto-routes" and "ignore-auto-dns" properties modify this behavior. For methods that imply no upstream network, such as "shared" or "link-local", these properties must be empty. For IPv4 method "shared", the IP subnet can be configured by adding one manual IPv4 address or otherwise 10.42.x.0/24 is chosen. Note that the shared method must be configured on the interface which shares the internet to a subnet, not on the uplink which is shared.never-defaultbooleanFALSEIf TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.ra-timeoutint320A timeout for waiting Router Advertisements in seconds. If zero (the default), a globally configured default is used. If still unspecified, the timeout depends on the sysctl settings of the device. Set to 2147483647 (MAXINT32) for infinity.route-dataarray of vardictArray of IPv6 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'next-hop' entry, containing the next hop IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.route-metricint64-1The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is chosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric.route-tableuint320Enable policy routing (source routing) and set the routing table used when adding routes. This affects all routes, including device-routes, IPv4LL, DHCP, SLAAC, default-routes and static routes. But note that static routes can individually overwrite the setting by explicitly specifying a non-zero routing table. If the table setting is left at zero, it is eligible to be overwritten via global configuration. If the property is zero even after applying the global configuration value, policy routing is disabled for the address family of this connection. Policy routing disabled means that NetworkManager will add all routes to the main table (except static routes that explicitly configure a different table). Additionally, NetworkManager will not delete any extraneous routes from tables except the main table. This is to preserve backward compatibility for users who manage routing tables outside of NetworkManager.routesarray of legacy IPv6 route struct (a(ayuayu))Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. Array of IPv6 route structures. Each IPv6 route structure is composed of an IPv6 address, a prefix length (1 - 128), an IPv6 next hop address (which may be zeroed out if there is no next hop), and a metric. If the metric is 0, NM will choose an appropriate default metric for the device.tokenstringConfigure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 IPv6 tokenized interface identifiers. Useful with eui64 addr-gen-mode.ip-tunnel settingIP Tunneling Settings.Key NameValue TypeDefault ValueValue Descriptionencapsulation-limituint320How many additional levels of encapsulation are permitted to be prepended to packets. This property applies only to IPv6 tunnels.flagsuint320Tunnel flags. Currently, the following values are supported: 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). They are valid only for IPv6 tunnels.flow-labeluint320The flow label to assign to tunnel packets. This property applies only to IPv6 tunnels.input-keystringThe key used for tunnel input packets; the property is valid only for certain tunnel modes (GRE, IP6GRE). If empty, no key is used.localstringThe local endpoint of the tunnel; the value can be empty, otherwise it must contain an IPv4 or IPv6 address.modeuint320The tunneling mode, for example NM_IP_TUNNEL_MODE_IPIP (1) or NM_IP_TUNNEL_MODE_GRE (2).mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple fragments.output-keystringThe key used for tunnel output packets; the property is valid only for certain tunnel modes (GRE, IP6GRE). If empty, no key is used.parentstringIf given, specifies the parent interface name or parent connection UUID the new device will be bound to so that tunneled packets will only be routed via that interface.path-mtu-discoverybooleanTRUEWhether to enable Path MTU Discovery on this tunnel.remotestringThe remote endpoint of the tunnel; the value must contain an IPv4 or IPv6 address.tosuint320The type of service (IPv4) or traffic class (IPv6) field to be set on tunneled packets.ttluint320The TTL to assign to tunneled packets. 0 is a special value meaning that packets inherit the TTL value.macsec settingMACSec Settings.Key NameValue TypeDefault ValueValue DescriptionencryptbooleanTRUEWhether the transmitted traffic must be encrypted.mka-cakstringThe pre-shared CAK (Connectivity Association Key) for MACsec Key Agreement.mka-cak-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "mka-cak" property. (see for flag values)mka-cknstringThe pre-shared CKN (Connectivity-association Key Name) for MACsec Key Agreement.modeint320Specifies how the CAK (Connectivity Association Key) for MKA (MACsec Key Agreement) is obtained.parentstringIf given, specifies the parent interface name or parent connection UUID from which this MACSEC interface should be created. If this property is not specified, the connection must contain an "802-3-ethernet" setting with a "mac-address" property.portint321The port component of the SCI (Secure Channel Identifier), between 1 and 65534.send-scibooleanTRUESpecifies whether the SCI (Secure Channel Identifier) is included in every packet.validationint322Specifies the validation mode for incoming frames.macvlan settingMAC VLAN Settings.Key NameValue TypeDefault ValueValue Descriptionmodeuint320The macvlan mode, which specifies the communication mechanism between multiple macvlans on the same lower device.parentstringIf given, specifies the parent interface name or parent connection UUID from which this MAC-VLAN interface should be created. If this property is not specified, the connection must contain an "802-3-ethernet" setting with a "mac-address" property.promiscuousbooleanTRUEWhether the interface should be put in promiscuous mode.tapbooleanFALSEWhether the interface should be a MACVTAP.match settingMatch settings.Key NameValue TypeDefault ValueValue Descriptiondriverarray of stringA list of driver names to match. Each element is a shell wildcard pattern. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\\' are used for optional and mandatory matches and inverting the pattern.interface-namearray of stringA list of interface names to match. Each element is a shell wildcard pattern. An element can be prefixed with a pipe symbol (|) or an ampersand (&). The former means that the element is optional and the latter means that it is mandatory. If there are any optional elements, than the match evaluates to true if at least one of the optional element matches (logical OR). If there are any mandatory elements, then they all must match (logical AND). By default, an element is optional. This means that an element "foo" behaves the same as "|foo". An element can also be inverted with exclamation mark (!) between the pipe symbol (or the ampersand) and before the pattern. Note that "!foo" is a shortcut for the mandatory match "&!foo". Finally, a backslash can be used at the beginning of the element (after the optional special characters) to escape the start of the pattern. For example, "&\\!a" is an mandatory match for literally "!a".kernel-command-linearray of stringA list of kernel command line arguments to match. This may be used to check whether a specific kernel command line option is set (or if prefixed with the exclamation mark unset). The argument must either be a single word, or an assignment (i.e. two words, separated "="). In the former case the kernel command line is searched for the word appearing as is, or as left hand side of an assignment. In the latter case, the exact assignment is looked for with right and left hand side matching. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\\' are used for optional and mandatory matches and inverting the pattern.patharray of stringA list of paths to match against the ID_PATH udev property of devices. ID_PATH represents the topological persistent path of a device. It typically contains a subsystem string (pci, usb, platform, etc.) and a subsystem-specific identifier. For PCI devices the path has the form "pci-$domain:$bus:$device.$function", where each variable is an hexadecimal value; for example "pci-0000:0a:00.0". The path of a device can be obtained with "udevadm info /sys/class/net/$dev | grep ID_PATH=" or by looking at the "path" property exported by NetworkManager ("nmcli -f general.path device show $dev"). Each element of the list is a shell wildcard pattern. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\\' are used for optional and mandatory matches and inverting the pattern.802-11-olpc-mesh settingOLPC Wireless Mesh Settings.Key NameValue TypeDefault ValueValue Descriptionchanneluint320Channel on which the mesh network to join is located.dhcp-anycast-addressbyte arrayAnycast DHCP MAC address used when requesting an IP address via DHCP. The specific anycast address used determines which DHCP server class answers the request.ssidbyte arraySSID of the mesh network to join.ovs-bridge settingOvsBridge Link Settings.Key NameValue TypeDefault ValueValue Descriptiondatapath-typestringThe data path type. One of "system", "netdev" or empty.fail-modestringThe bridge failure mode. One of "secure", "standalone" or empty.mcast-snooping-enablebooleanFALSEEnable or disable multicast snooping.rstp-enablebooleanFALSEEnable or disable RSTP.stp-enablebooleanFALSEEnable or disable STP.ovs-dpdk settingOvsDpdk Link Settings.Key NameValue TypeDefault ValueValue DescriptiondevargsstringOpen vSwitch DPDK device arguments.ovs-interface settingOpen vSwitch Interface Settings.Key NameValue TypeDefault ValueValue DescriptiontypestringThe interface type. Either "internal", "system", "patch", "dpdk", or empty.ovs-patch settingOvsPatch Link Settings.Key NameValue TypeDefault ValueValue DescriptionpeerstringSpecifies the name of the interface for the other side of the patch. The patch on the other side must also set this interface as peer.ovs-port settingOvsPort Link Settings.Key NameValue TypeDefault ValueValue Descriptionbond-downdelayuint320The time port must be inactive in order to be considered down.bond-modestringBonding mode. One of "active-backup", "balance-slb", or "balance-tcp".bond-updelayuint320The time port must be active before it starts forwarding traffic.lacpstringLACP mode. One of "active", "off", or "passive".taguint320The VLAN tag in the range 0-4095.vlan-modestringThe VLAN mode. One of "access", "native-tagged", "native-untagged", "trunk" or unset.ppp settingPoint-to-Point Protocol Settings.Key NameValue TypeDefault ValueValue Descriptionbauduint320If non-zero, instruct pppd to set the serial port to the specified baudrate. This value should normally be left as 0 to automatically choose the speed.crtsctsbooleanFALSEIf TRUE, specify that pppd should set the serial port to use hardware flow control with RTS and CTS signals. This value should normally be set to FALSE.lcp-echo-failureuint320If non-zero, instruct pppd to presume the connection to the peer has failed if the specified number of LCP echo-requests go unanswered by the peer. The "lcp-echo-interval" property must also be set to a non-zero value if this property is used.lcp-echo-intervaluint320If non-zero, instruct pppd to send an LCP echo-request frame to the peer every n seconds (where n is the specified value). Note that some PPP peers will respond to echo requests and some will not, and it is not possible to autodetect this.mppe-statefulbooleanFALSEIf TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE.mruuint320If non-zero, instruct pppd to request that the peer send packets no larger than the specified size. If non-zero, the MRU should be between 128 and 16384.mtuuint320If non-zero, instruct pppd to send packets no larger than the specified size.no-vj-compbooleanFALSEIf TRUE, Van Jacobsen TCP header compression will not be requested.noauthbooleanTRUEIf TRUE, do not require the other side (usually the PPP server) to authenticate itself to the client. If FALSE, require authentication from the remote side. In almost all cases, this should be TRUE.nobsdcompbooleanFALSEIf TRUE, BSD compression will not be requested.nodeflatebooleanFALSEIf TRUE, "deflate" compression will not be requested.refuse-chapbooleanFALSEIf TRUE, the CHAP authentication method will not be used.refuse-eapbooleanFALSEIf TRUE, the EAP authentication method will not be used.refuse-mschapbooleanFALSEIf TRUE, the MSCHAP authentication method will not be used.refuse-mschapv2booleanFALSEIf TRUE, the MSCHAPv2 authentication method will not be used.refuse-papbooleanFALSEIf TRUE, the PAP authentication method will not be used.require-mppebooleanFALSEIf TRUE, MPPE (Microsoft Point-to-Point Encryption) will be required for the PPP session. If either 64-bit or 128-bit MPPE is not available the session will fail. Note that MPPE is not used on mobile broadband connections.require-mppe-128booleanFALSEIf TRUE, 128-bit MPPE (Microsoft Point-to-Point Encryption) will be required for the PPP session, and the "require-mppe" property must also be set to TRUE. If 128-bit MPPE is not available the session will fail.pppoe settingPPP-over-Ethernet Settings.Key NameValue TypeDefault ValueValue DescriptionparentstringIf given, specifies the parent interface name on which this PPPoE connection should be created. If this property is not specified, the connection is activated on the interface specified in "interface-name" of NMSettingConnection.passwordstringPassword used to authenticate with the PPPoE service.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)servicestringIf specified, instruct PPPoE to only initiate sessions with access concentrators that provide the specified service. For most providers, this should be left blank. It is only required if there are multiple access concentrators or a specific service is known to be required.usernamestringUsername used to authenticate with the PPPoE service.proxy settingWWW Proxy Settings.Key NameValue TypeDefault ValueValue Descriptionbrowser-onlybooleanFALSEWhether the proxy configuration is for browser only.methodint320Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)pac-scriptstringPAC script for the connection.pac-urlstringPAC URL for obtaining PAC file.serial settingSerial Link Settings.Key NameValue TypeDefault ValueValue Descriptionbauduint3257600Speed to use for communication over the serial port. Note that this value usually has no effect for mobile broadband modems as they generally ignore speed settings and use the highest available speed.bitsuint328Byte-width of the serial communication. The 8 in "8n1" for example.paritybyteThe connection parity: 69 (ASCII 'E') for even parity, 111 (ASCII 'o') for odd, 110 (ASCII 'n') for none.send-delayuint640Time to delay between each byte sent to the modem, in microseconds.stopbitsuint321Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in "8n1" for example.sriov settingSR-IOV settings.Key NameValue TypeDefault ValueValue Descriptionautoprobe-driversNMTernary (int32)Whether to autoprobe virtual functions by a compatible driver. If set to NM_TERNARY_TRUE (1), the kernel will try to bind VFs to a compatible driver and if this succeeds a new network interface will be instantiated for each VF. If set to NM_TERNARY_FALSE (0), VFs will not be claimed and no network interfaces will be created for them. When set to NM_TERNARY_DEFAULT (-1), the global default is used; in case the global default is unspecified it is assumed to be NM_TERNARY_TRUE (1).total-vfsuint320The total number of virtual functions to create. Note that when the sriov setting is present NetworkManager enforces the number of virtual functions on the interface (also when it is zero) during activation and resets it upon deactivation. To prevent any changes to SR-IOV parameters don't add a sriov setting to the connection.vfsarray of vardictArray of virtual function descriptors. Each VF descriptor is a dictionary mapping attribute names to GVariant values. The 'index' entry is mandatory for each VF. When represented as string a VF is in the form: "INDEX [ATTR=VALUE[ ATTR=VALUE]...]". for example: "2 mac=00:11:22:33:44:55 spoof-check=true". Multiple VFs can be specified using a comma as separator. Currently, the following attributes are supported: mac, spoof-check, trust, min-tx-rate, max-tx-rate, vlans. The "vlans" attribute is represented as a semicolon-separated list of VLAN descriptors, where each descriptor has the form "ID[.PRIORITY[.PROTO]]". PROTO can be either 'q' for 802.1Q (the default) or 'ad' for 802.1ad.tc settingLinux Traffic Control Settings.Key NameValue TypeDefault ValueValue Descriptionqdiscsarray of vardictArray of TC queueing disciplines.tfiltersarray of vardictArray of TC traffic filters.team settingTeaming Settings.Key NameValue TypeDefault ValueValue DescriptionconfigstringThe JSON configuration for the team network interface. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd. If not specified, the default configuration is used. See man teamd.conf for the format details.interface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the team's interface name.link-watchersarray of vardictLink watchers configuration for the connection: each link watcher is defined by a dictionary, whose keys depend upon the selected link watcher. Available link watchers are 'ethtool', 'nsna_ping' and 'arp_ping' and it is specified in the dictionary with the key 'name'. Available keys are: ethtool: 'delay-up', 'delay-down', 'init-wait'; nsna_ping: 'init-wait', 'interval', 'missed-max', 'target-host'; arp_ping: all the ones in nsna_ping and 'source-host', 'validate-active', 'validate-inactive', 'send-always'. See teamd.conf man for more details.mcast-rejoin-countint32-1Corresponds to the teamd mcast_rejoin.count.mcast-rejoin-intervalint32-1Corresponds to the teamd mcast_rejoin.interval.notify-peers-countint32-1Corresponds to the teamd notify_peers.count.notify-peers-intervalint32-1Corresponds to the teamd notify_peers.interval.runnerstringCorresponds to the teamd runner.name. Permitted values are: "roundrobin", "broadcast", "activebackup", "loadbalance", "lacp", "random".runner-activebooleanTRUECorresponds to the teamd runner.active.runner-agg-select-policystringCorresponds to the teamd runner.agg_select_policy.runner-fast-ratebooleanFALSECorresponds to the teamd runner.fast_rate.runner-hwaddr-policystringCorresponds to the teamd runner.hwaddr_policy.runner-min-portsint32-1Corresponds to the teamd runner.min_ports.runner-sys-prioint32-1Corresponds to the teamd runner.sys_prio.runner-tx-balancerstringCorresponds to the teamd runner.tx_balancer.name.runner-tx-balancer-intervalint32-1Corresponds to the teamd runner.tx_balancer.interval.runner-tx-hasharray of stringCorresponds to the teamd runner.tx_hash.team-port settingTeam Port Settings.Key NameValue TypeDefault ValueValue DescriptionconfigstringThe JSON configuration for the team port. The property should contain raw JSON configuration data suitable for teamd, because the value is passed directly to teamd. If not specified, the default configuration is used. See man teamd.conf for the format details.lacp-keyint32-1Corresponds to the teamd ports.PORTIFNAME.lacp_key.lacp-prioint32-1Corresponds to the teamd ports.PORTIFNAME.lacp_prio.link-watchersarray of vardictLink watchers configuration for the connection: each link watcher is defined by a dictionary, whose keys depend upon the selected link watcher. Available link watchers are 'ethtool', 'nsna_ping' and 'arp_ping' and it is specified in the dictionary with the key 'name'. Available keys are: ethtool: 'delay-up', 'delay-down', 'init-wait'; nsna_ping: 'init-wait', 'interval', 'missed-max', 'target-host'; arp_ping: all the ones in nsna_ping and 'source-host', 'validate-active', 'validate-inactive', 'send-always'. See teamd.conf man for more details.prioint320Corresponds to the teamd ports.PORTIFNAME.prio.queue-idint32-1Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the parameter is skipped from the json config.stickybooleanFALSECorresponds to the teamd ports.PORTIFNAME.sticky.tun settingTunnel Settings.Key NameValue TypeDefault ValueValue DescriptiongroupstringThe group ID which will own the device. If set to NULL everyone will be able to use the device.modeuint321The operating mode of the virtual device. Allowed values are NM_SETTING_TUN_MODE_TUN (1) to create a layer 3 device and NM_SETTING_TUN_MODE_TAP (2) to create an Ethernet-like layer 2 one.multi-queuebooleanFALSEIf the property is set to TRUE, the interface will support multiple file descriptors (queues) to parallelize packet sending or receiving. Otherwise, the interface will only support a single queue.ownerstringThe user ID which will own the device. If set to NULL everyone will be able to use the device.pibooleanFALSEIf TRUE the interface will prepend a 4 byte header describing the physical interface to the packets.vnet-hdrbooleanFALSEIf TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network header.user settingGeneral User Profile Settings.Key NameValue TypeDefault ValueValue Descriptiondatadict of string to string{}A dictionary of key/value pairs with user data. This data is ignored by NetworkManager and can be used at the users discretion. The keys only support a strict ascii format, but the values can be arbitrary UTF8 strings up to a certain length.vlan settingVLAN Settings.Key NameValue TypeDefault ValueValue Descriptionegress-priority-maparray of stringFor outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities. The mapping is given in the format "from:to" where both "from" and "to" are unsigned integers, ie "7:3".flagsNMVlanFlags (uint32)One or more flags which control the behavior and features of the VLAN interface. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device's operating state). NM_VLAN_FLAG_MVRP (0x8) (use of the MVRP protocol). The default value of this property is NM_VLAN_FLAG_REORDER_HEADERS, but it used to be 0. To preserve backward compatibility, the default-value in the D-Bus API continues to be 0 and a missing property on D-Bus is still considered as 0.iduint320The VLAN identifier that the interface created by this connection should be assigned. The valid range is from 0 to 4094, without the reserved id 4095.ingress-priority-maparray of stringFor incoming packets, a list of mappings from 802.1p priorities to Linux SKB priorities. The mapping is given in the format "from:to" where both "from" and "to" are unsigned integers, ie "7:3".interface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the vlan's interface name.parentstringIf given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created. If this property is not specified, the connection must contain an "802-3-ethernet" setting with a "mac-address" property.vpn settingVPN Settings.Key NameValue TypeDefault ValueValue Descriptiondatadict of string to string{}Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings.persistentbooleanFALSEIf the VPN service supports persistence, and this property is TRUE, the VPN will attempt to stay connected across link changes and outages, until explicitly disconnected.secretsdict of string to string{}Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings.service-typestringD-Bus service name of the VPN plugin that this setting uses to connect to its network. i.e. org.freedesktop.NetworkManager.vpnc for the vpnc plugin.timeoutuint320Timeout for the VPN service to establish the connection. Some services may take quite a long time to connect. Value of 0 means a default timeout, which is 60 seconds (unless overridden by vpn.timeout in configuration file). Values greater than zero mean timeout in seconds.user-namestringIf the VPN connection requires a user name for authentication, that name should be provided here. If the connection is available to more than one user, and the VPN requires each user to supply a different name, then leave this property empty. If this property is empty, NetworkManager will automatically supply the username of the user which requested the VPN connection.vrf settingVRF settings.Key NameValue TypeDefault ValueValue Descriptiontableuint320The routing table for this VRF.vxlan settingVXLAN Settings.Key NameValue TypeDefault ValueValue Descriptionageinguint32300Specifies the lifetime in seconds of FDB entries learnt by the kernel.destination-portuint328472Specifies the UDP destination port to communicate to the remote VXLAN tunnel endpoint.iduint320Specifies the VXLAN Network Identifier (or VXLAN Segment Identifier) to use.l2-missbooleanFALSESpecifies whether netlink LL ADDR miss notifications are generated.l3-missbooleanFALSESpecifies whether netlink IP ADDR miss notifications are generated.learningbooleanTRUESpecifies whether unknown source link layer addresses and IP addresses are entered into the VXLAN device forwarding database.limituint320Specifies the maximum number of FDB entries. A value of zero means that the kernel will store unlimited entries.localstringIf given, specifies the source IP address to use in outgoing packets.parentstringIf given, specifies the parent interface name or parent connection UUID.proxybooleanFALSESpecifies whether ARP proxy is turned on.remotestringSpecifies the unicast destination IP address to use in outgoing packets when the destination link layer address is not known in the VXLAN device forwarding database, or the multicast IP address to join.rscbooleanFALSESpecifies whether route short circuit is turned on.source-port-maxuint320Specifies the maximum UDP source port to communicate to the remote VXLAN tunnel endpoint.source-port-minuint320Specifies the minimum UDP source port to communicate to the remote VXLAN tunnel endpoint.tosuint320Specifies the TOS value to use in outgoing packets.ttluint320Specifies the time-to-live value to use in outgoing packets.wifi-p2p settingWi-Fi P2P Settings.Key NameValue TypeDefault ValueValue DescriptionpeerstringThe P2P device that should be connected to. Currently, this is the only way to create or join a group.wfd-iesbyte arrayThe Wi-Fi Display (WFD) Information Elements (IEs) to set. Wi-Fi Display requires a protocol specific information element to be set in certain Wi-Fi frames. These can be specified here for the purpose of establishing a connection. This setting is only useful when implementing a Wi-Fi Display client.wps-methoduint320Flags indicating which mode of WPS is to be used. There's little point in changing the default setting as NetworkManager will automatically determine the best method to use.wimax settingWiMax Settings.Key NameValue TypeDefault ValueValue Descriptionmac-addressbyte arrayIf specified, this connection will only apply to the WiMAX device whose MAC address matches. This property does not change the MAC address of the device (known as MAC spoofing). Deprecated: 1network-namestringNetwork Service Provider (NSP) name of the WiMAX network this connection should use. Deprecated: 1802-3-ethernet settingWired Ethernet Settings.Key NameValue TypeDefault ValueValue Descriptionassigned-mac-addressstringThe new field for the cloned MAC address. It can be either a hardware address in ASCII representation, or one of the special values "preserve", "permanent", "random" or "stable". This field replaces the deprecated "cloned-mac-address" on D-Bus, which can only contain explicit hardware addresses. Note that this property only exists in D-Bus API. libnm and nmcli continue to call this property "cloned-mac-address".auto-negotiatebooleanFALSEWhen TRUE, enforce auto-negotiation of speed and duplex mode. If "speed" and "duplex" properties are both specified, only that single mode will be advertised and accepted during the link auto-negotiation process: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabits modes, as in these cases link negotiation is mandatory. When FALSE, "speed" and "duplex" properties should be both set or link configuration will be skipped.cloned-mac-addressbyte arrayThis D-Bus field is deprecated in favor of "assigned-mac-address" which is more flexible and allows specifying special variants like "random". For libnm and nmcli, this field is called "cloned-mac-address".duplexstringWhen a value is set, either "half" or "full", configures the device to use the specified duplex mode. If "auto-negotiate" is "yes" the specified duplex mode will be the only one advertised during link negotiation: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabits modes, as in these cases link negotiation is mandatory. If the value is unset (the default), the link configuration will be either skipped (if "auto-negotiate" is "no", the default) or will be auto-negotiated (if "auto-negotiate" is "yes") and the local device will advertise all the supported duplex modes. Must be set together with the "speed" property if specified. Before specifying a duplex mode be sure your device supports it.generate-mac-address-maskstringWith "cloned-mac-address" setting "random" or "stable", by default all bits of the MAC address are scrambled and a locally-administered, unicast MAC address is created. This property allows to specify that certain bits are fixed. Note that the least significant bit of the first MAC address will always be unset to create a unicast MAC address. If the property is NULL, it is eligible to be overwritten by a default connection setting. If the value is still NULL or an empty string, the default is to create a locally-administered, unicast MAC address. If the value contains one MAC address, this address is used as mask. The set bits of the mask are to be filled with the current MAC address of the device, while the unset bits are subject to randomization. Setting "FE:FF:FF:00:00:00" means to preserve the OUI of the current MAC address and only randomize the lower 3 bytes using the "random" or "stable" algorithm. If the value contains one additional MAC address after the mask, this address is used instead of the current MAC address to fill the bits that shall not be randomized. For example, a value of "FE:FF:FF:00:00:00 68:F7:28:00:00:00" will set the OUI of the MAC address to 68:F7:28, while the lower bits are randomized. A value of "02:00:00:00:00:00 00:00:00:00:00:00" will create a fully scrambled globally-administered, burned-in MAC address. If the value contains more than one additional MAC addresses, one of them is chosen randomly. For example, "02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00" will create a fully scrambled MAC address, randomly locally or globally administered.mac-addressbyte arrayIf specified, this connection will only apply to the Ethernet device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).mac-address-blacklistarray of stringIf specified, this connection will never apply to the Ethernet device whose permanent MAC address matches an address in the list. Each MAC address is in the standard hex-digits-and-colons notation (00:11:22:33:44:55).mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.portstringSpecific port type to use if the device supports multiple attachment methods. One of "tp" (Twisted Pair), "aui" (Attachment Unit Interface), "bnc" (Thin Ethernet) or "mii" (Media Independent Interface). If the device supports only one port type, this setting is ignored.s390-nettypestrings390 network device type; one of "qeth", "lcs", or "ctc", representing the different types of virtual network devices available on s390 systems.s390-optionsdict of string to string{}Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include "portno", "layer2", "portname", "protocol", among others. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9]).s390-subchannelsarray of stringIdentifies specific subchannels that this network device uses for communication with z/VM or s390 host. Like the "mac-address" property for non-z/VM devices, this property can be used to ensure this connection only applies to the network device that uses these subchannels. The list should contain exactly 3 strings, and each string may only be composed of hexadecimal characters and the period (.) character.speeduint320When a value greater than 0 is set, configures the device to use the specified speed. If "auto-negotiate" is "yes" the specified speed will be the only one advertised during link negotiation: this works only for BASE-T 802.3 specifications and is useful for enforcing gigabit speeds, as in this case link negotiation is mandatory. If the value is unset (0, the default), the link configuration will be either skipped (if "auto-negotiate" is "no", the default) or will be auto-negotiated (if "auto-negotiate" is "yes") and the local device will advertise all the supported speeds. In Mbit/s, ie 100 == 100Mbit/s. Must be set together with the "duplex" property when non-zero. Before specifying a speed value be sure your device supports it.wake-on-lanuint321The NMSettingWiredWakeOnLan options to enable. Not all devices support all options. May be any combination of 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) or the special values NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT (0x1) (to use global settings) and NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE (0x8000) (to disable management of Wake-on-LAN in NetworkManager).wake-on-lan-passwordstringIf specified, the password used with magic-packet-based Wake-on-LAN, represented as an Ethernet MAC address. If NULL, no password will be required.wireguard settingWireGuard Settings.Key NameValue TypeDefault ValueValue Descriptionfwmarkuint320The use of fwmark is optional and is by default off. Setting it to 0 disables it. Otherwise, it is a 32-bit fwmark for outgoing packets. Note that "ip4-auto-default-route" or "ip6-auto-default-route" enabled, implies to automatically choose a fwmark.ip4-auto-default-routeNMTernary (int32)Whether to enable special handling of the IPv4 default route. If enabled, the IPv4 default route from wireguard.peer-routes will be placed to a dedicated routing-table and two policy routing rules will be added. The fwmark number is also used as routing-table for the default-route, and if fwmark is zero, an unused fwmark/table is chosen automatically. This corresponds to what wg-quick does with Table=auto and what WireGuard calls "Improved Rule-based Routing". Note that for this automatism to work, you usually don't want to set ipv4.gateway, because that will result in a conflicting default route. Leaving this at the default will enable this option automatically if ipv4.never-default is not set and there are any peers that use a default-route as allowed-ips.ip6-auto-default-routeNMTernary (int32)Like ip4-auto-default-route, but for the IPv6 default route.listen-portuint320The listen-port. If listen-port is not specified, the port will be chosen randomly when the interface comes up.mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple fragments. If zero a default MTU is used. Note that contrary to wg-quick's MTU setting, this does not take into account the current routes at the time of activation.peer-routesbooleanTRUEWhether to automatically add routes for the AllowedIPs ranges of the peers. If TRUE (the default), NetworkManager will automatically add routes in the routing tables according to ipv4.route-table and ipv6.route-table. Usually you want this automatism enabled. If FALSE, no such routes are added automatically. In this case, the user may want to configure static routes in ipv4.routes and ipv6.routes, respectively. Note that if the peer's AllowedIPs is "0.0.0.0/0" or "::/0" and the profile's ipv4.never-default or ipv6.never-default setting is enabled, the peer route for this peer won't be added automatically.peersarray of 'a{sv}'Array of dictionaries for the WireGuard peers.private-keystringThe 256 bit private-key in base64 encoding.private-key-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "private-key" property. (see for flag values)802-11-wireless settingWi-Fi Settings.Key NameValue TypeDefault ValueValue Descriptionap-isolationNMTernary (int32)Configures AP isolation, which prevents communication between wireless devices connected to this AP. This property can be set to a value different from NM_TERNARY_DEFAULT (-1) only when the interface is configured in AP mode. If set to NM_TERNARY_TRUE (1), devices are not able to communicate with each other. This increases security because it protects devices against attacks from other clients in the network. At the same time, it prevents devices to access resources on the same wireless networks as file shares, printers, etc. If set to NM_TERNARY_FALSE (0), devices can talk to each other. When set to NM_TERNARY_DEFAULT (-1), the global default is used; in case the global default is unspecified it is assumed to be NM_TERNARY_FALSE (0).assigned-mac-addressstringThe new field for the cloned MAC address. It can be either a hardware address in ASCII representation, or one of the special values "preserve", "permanent", "random" or "stable". This field replaces the deprecated "cloned-mac-address" on D-Bus, which can only contain explicit hardware addresses. Note that this property only exists in D-Bus API. libnm and nmcli continue to call this property "cloned-mac-address".bandstring802.11 frequency band of the network. One of "a" for 5GHz 802.11a or "bg" for 2.4GHz 802.11. This will lock associations to the Wi-Fi network to the specific band, i.e. if "a" is specified, the device will not associate with the same network in the 2.4GHz band even if the network's settings are compatible. This setting depends on specific driver capability and may not work with all drivers.bssidbyte arrayIf specified, directs the device to only associate with the given access point. This capability is highly driver dependent and not supported by all devices. Note: this property does not control the BSSID used when creating an Ad-Hoc network and is unlikely to in the future.channeluint320Wireless channel to use for the Wi-Fi connection. The device will only join (or create for Ad-Hoc networks) a Wi-Fi network on the specified channel. Because channel numbers overlap between bands, this property also requires the "band" property to be set.cloned-mac-addressbyte arrayThis D-Bus field is deprecated in favor of "assigned-mac-address" which is more flexible and allows specifying special variants like "random". For libnm and nmcli, this field is called "cloned-mac-address".generate-mac-address-maskstringWith "cloned-mac-address" setting "random" or "stable", by default all bits of the MAC address are scrambled and a locally-administered, unicast MAC address is created. This property allows to specify that certain bits are fixed. Note that the least significant bit of the first MAC address will always be unset to create a unicast MAC address. If the property is NULL, it is eligible to be overwritten by a default connection setting. If the value is still NULL or an empty string, the default is to create a locally-administered, unicast MAC address. If the value contains one MAC address, this address is used as mask. The set bits of the mask are to be filled with the current MAC address of the device, while the unset bits are subject to randomization. Setting "FE:FF:FF:00:00:00" means to preserve the OUI of the current MAC address and only randomize the lower 3 bytes using the "random" or "stable" algorithm. If the value contains one additional MAC address after the mask, this address is used instead of the current MAC address to fill the bits that shall not be randomized. For example, a value of "FE:FF:FF:00:00:00 68:F7:28:00:00:00" will set the OUI of the MAC address to 68:F7:28, while the lower bits are randomized. A value of "02:00:00:00:00:00 00:00:00:00:00:00" will create a fully scrambled globally-administered, burned-in MAC address. If the value contains more than one additional MAC addresses, one of them is chosen randomly. For example, "02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00" will create a fully scrambled MAC address, randomly locally or globally administered.hiddenbooleanFALSEIf TRUE, indicates that the network is a non-broadcasting network that hides its SSID. This works both in infrastructure and AP mode. In infrastructure mode, various workarounds are used for a more reliable discovery of hidden networks, such as probe-scanning the SSID. However, these workarounds expose inherent insecurities with hidden SSID networks, and thus hidden SSID networks should be used with caution. In AP mode, the created network does not broadcast its SSID. Note that marking the network as hidden may be a privacy issue for you (in infrastructure mode) or client stations (in AP mode), as the explicit probe-scans are distinctly recognizable on the air.mac-addressbyte arrayIf specified, this connection will only apply to the Wi-Fi device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).mac-address-blacklistarray of stringA list of permanent MAC addresses of Wi-Fi devices to which this connection should never apply. Each MAC address should be given in the standard hex-digits-and-colons notation (eg "00:11:22:33:44:55").mac-address-randomizationuint320One of NM_SETTING_MAC_RANDOMIZATION_DEFAULT (0) (never randomize unless the user has set a global default to randomize and the supplicant supports randomization), NM_SETTING_MAC_RANDOMIZATION_NEVER (1) (never randomize the MAC address), or NM_SETTING_MAC_RANDOMIZATION_ALWAYS (2) (always randomize the MAC address). This property is deprecated for 'cloned-mac-address'. Deprecated: 1modestringWi-Fi network mode; one of "infrastructure", "mesh", "adhoc" or "ap". If blank, infrastructure is assumed.mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.powersaveuint320One of NM_SETTING_WIRELESS_POWERSAVE_DISABLE (2) (disable Wi-Fi power saving), NM_SETTING_WIRELESS_POWERSAVE_ENABLE (3) (enable Wi-Fi power saving), NM_SETTING_WIRELESS_POWERSAVE_IGNORE (1) (don't touch currently configure setting) or NM_SETTING_WIRELESS_POWERSAVE_DEFAULT (0) (use the globally configured value). All other values are reserved.rateuint320If non-zero, directs the device to only use the specified bitrate for communication with the access point. Units are in Kb/s, ie 5500 = 5.5 Mbit/s. This property is highly driver dependent and not all devices support setting a static bitrate.securityThis property is deprecated, but can be set to the value '802-11-wireless-security' when a wireless security setting is also present in the connection dictionary, for compatibility with very old NetworkManager daemons.seen-bssidsarray of stringA list of BSSIDs (each BSSID formatted as a MAC address like "00:11:22:33:44:55") that have been detected as part of the Wi-Fi network. NetworkManager internally tracks previously seen BSSIDs. The property is only meant for reading and reflects the BSSID list of NetworkManager. The changes you make to this property will not be preserved.ssidbyte arraySSID of the Wi-Fi network. Must be specified.tx-poweruint320If non-zero, directs the device to use the specified transmit power. Units are dBm. This property is highly driver dependent and not all devices support setting a static transmit power.wake-on-wlanuint321The NMSettingWirelessWakeOnWLan options to enable. Not all devices support all options. May be any combination of 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) or the special values NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT (0x1) (to use global settings) and NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE (0x8000) (to disable management of Wake-on-LAN in NetworkManager).802-11-wireless-security settingWi-Fi Security Settings.Key NameValue TypeDefault ValueValue Descriptionauth-algstringWhen WEP is used (ie, key-mgmt = "none" or "ieee8021x") indicate the 802.11 authentication algorithm required by the AP here. One of "open" for Open System, "shared" for Shared Key, or "leap" for Cisco LEAP. When using Cisco LEAP (ie, key-mgmt = "ieee8021x" and auth-alg = "leap") the "leap-username" and "leap-password" properties must be specified.filsint320Indicates whether Fast Initial Link Setup (802.11ai) must be enabled for the connection. One of NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) (use global default value), NM_SETTING_WIRELESS_SECURITY_FILS_DISABLE (1) (disable FILS), NM_SETTING_WIRELESS_SECURITY_FILS_OPTIONAL (2) (enable FILS if the supplicant and the access point support it) or NM_SETTING_WIRELESS_SECURITY_FILS_REQUIRED (3) (enable FILS and fail if not supported). When set to NM_SETTING_WIRELESS_SECURITY_FILS_DEFAULT (0) and no global default is set, FILS will be optionally enabled.grouparray of stringA list of group/broadcast encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of "wep40", "wep104", "tkip", or "ccmp".key-mgmtstringKey management used for the connection. One of "none" (WEP), "ieee8021x" (Dynamic WEP), "wpa-psk" (infrastructure WPA-PSK), "sae" (SAE), "owe" (Opportunistic Wireless Encryption), "wpa-eap" (WPA-Enterprise) or "wpa-eap-suite-b-192" (WPA3-Enterprise Suite B). This property must be set for any Wi-Fi connection that uses security.leap-passwordstringThe login password for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").leap-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "leap-password" property. (see for flag values)leap-usernamestringThe login username for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").pairwisearray of stringA list of pairwise encryption algorithms which prevents connections to Wi-Fi networks that do not utilize one of the algorithms in the list. For maximum compatibility leave this property empty. Each list element may be one of "tkip" or "ccmp".pmfint320Indicates whether Protected Management Frames (802.11w) must be enabled for the connection. One of NM_SETTING_WIRELESS_SECURITY_PMF_DEFAULT (0) (use global default value), NM_SETTING_WIRELESS_SECURITY_PMF_DISABLE (1) (disable PMF), NM_SETTING_WIRELESS_SECURITY_PMF_OPTIONAL (2) (enable PMF if the supplicant and the access point support it) or NM_SETTING_WIRELESS_SECURITY_PMF_REQUIRED (3) (enable PMF and fail if not supported). When set to NM_SETTING_WIRELESS_SECURITY_PMF_DEFAULT (0) and no global default is set, PMF will be optionally enabled.protoarray of stringList of strings specifying the allowed WPA protocol versions to use. Each element may be one "wpa" (allow WPA) or "rsn" (allow WPA2/RSN). If not specified, both WPA and RSN connections are allowed.pskstringPre-Shared-Key for WPA networks. For WPA-PSK, it's either an ASCII passphrase of 8 to 63 characters that is (as specified in the 802.11i standard) hashed to derive the actual key, or the key in form of 64 hexadecimal character. The WPA3-Personal networks use a passphrase of any length for SAE authentication.psk-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "psk" property. (see for flag values)wep-key-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "wep-key0", "wep-key1", "wep-key2", and "wep-key3" properties. (see for flag values)wep-key-typeNMWepKeyType (uint32)Controls the interpretation of WEP keys. Allowed values are NM_WEP_KEY_TYPE_KEY (1), in which case the key is either a 10- or 26-character hexadecimal string, or a 5- or 13-character ASCII password; or NM_WEP_KEY_TYPE_PASSPHRASE (2), in which case the passphrase is provided as a string and will be hashed using the de-facto MD5 method to derive the actual WEP key.wep-key0stringIndex 0 WEP key. This is the WEP key used in most networks. See the "wep-key-type" property for a description of how this key is interpreted.wep-key1stringIndex 1 WEP key. This WEP index is not used by most networks. See the "wep-key-type" property for a description of how this key is interpreted.wep-key2stringIndex 2 WEP key. This WEP index is not used by most networks. See the "wep-key-type" property for a description of how this key is interpreted.wep-key3stringIndex 3 WEP key. This WEP index is not used by most networks. See the "wep-key-type" property for a description of how this key is interpreted.wep-tx-keyidxuint320When static WEP is used (ie, key-mgmt = "none") and a non-default WEP key index is used by the AP, put that WEP key index here. Valid values are 0 (default key) through 3. Note that some consumer access points (like the Linksys WRT54G) number the keys 1 - 4.wps-methoduint320Flags indicating which mode of WPS is to be used if any. There's little point in changing the default setting as NetworkManager will automatically determine whether it's feasible to start WPS enrollment from the Access Point capabilities. WPS can be disabled by setting this property to a value of 1.wpan settingIEEE 802.15.4 (WPAN) MAC Settings.Key NameValue TypeDefault ValueValue Descriptionchannelint32-1IEEE 802.15.4 channel. A positive integer or -1, meaning "do not set, use whatever the device is already set to".mac-addressstringIf specified, this connection will only apply to the IEEE 802.15.4 (WPAN) MAC layer device whose permanent MAC address matches.pageint32-1IEEE 802.15.4 channel page. A positive integer or -1, meaning "do not set, use whatever the device is already set to".pan-iduint3265535IEEE 802.15.4 Personal Area Network (PAN) identifier.short-addressuint3265535Short IEEE 802.15.4 address to be used within a restricted environment.hostname settingHostname settings.Key NameValue TypeDefault ValueValue Descriptionfrom-dhcpNMTernary (int32)Whether the system hostname can be determined from DHCP on this connection. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_TRUE (1).from-dns-lookupNMTernary (int32)Whether the system hostname can be determined from reverse DNS lookup of addresses on this device. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_TRUE (1).only-from-defaultNMTernary (int32)If set to NM_TERNARY_TRUE (1), NetworkManager attempts to get the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has the default route for the given address family (IPv4/IPv6). If set to NM_TERNARY_FALSE (0), the hostname can be set from this device even if it doesn't have the default route. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_FALSE (0).priorityint320The relative priority of this connection to determine the system hostname. A lower numerical value is better (higher priority). A connection with higher priority is considered before connections with lower priority. If the value is zero, it can be overridden by a global value from NetworkManager configuration. If the property doesn't have a value in the global configuration, the value is assumed to be 100. Negative values have the special effect of excluding other connections with a greater numerical priority value; so in presence of at least one negative priority, only connections with the lowest priority value will be used to determine the hostname.ovs-external-ids settingOVS External IDs Settings.Key NameValue TypeDefault ValueValue Descriptiondatadict of string to string{}A dictionary of key/value pairs with exernal-ids for OVS.veth settingVeth Settings.Key NameValue TypeDefault ValueValue DescriptionpeerstringThis property specifies the peer interface name of the veth. This property is mandatory.Secret flag types: Each password or secret property in a setting has an associated flags property that describes how to handle that secret. The flags property is a bitfield that contains zero or more of the following values logically OR-ed together. diff --git a/man/nm-settings-docs-dbus.xml b/man/nm-settings-docs-dbus.xml index 6b65459..84846fa 100644 --- a/man/nm-settings-docs-dbus.xml +++ b/man/nm-settings-docs-dbus.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/man/nm-settings-docs-nmcli.xml b/man/nm-settings-docs-nmcli.xml index e815a43..c2c80db 100644 --- a/man/nm-settings-docs-nmcli.xml +++ b/man/nm-settings-docs-nmcli.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/man/nm-settings-ifcfg-rh.5 b/man/nm-settings-ifcfg-rh.5 index 4550e52..6bacf05 100644 --- a/man/nm-settings-ifcfg-rh.5 +++ b/man/nm-settings-ifcfg-rh.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-ifcfg-rh .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: Configuration -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NM\-SETTINGS\-IFCFG\-RH" "5" "" "NetworkManager 1\&.29\&.11" "Configuration" +.TH "NM\-SETTINGS\-IFCFG\-RH" "5" "" "NetworkManager 1\&.29\&.90" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -577,7 +577,7 @@ IEEE_8021X_INNER_AUTH_METHODS\fI(+)\fR T}:T{ \ \& T}:T{ -Inner non\-EAP authentication methods\&. IEEE_8021X_INNER_AUTH_METHODS can contain values both for \*(Aqphase2\-auth\*(Aq and \*(Aqphase2\-autheap\*(Aq properties\&.\fB +Inner non\-EAP authentication methods for TTLS or the inner EAP authentication method for PEAP\&. IEEE_8021X_INNER_AUTH_METHODS can contain values both for \*(Aqphase2\-auth\*(Aq and \*(Aqphase2\-autheap\*(Aq properties\&.\fB Example: \fRIEEE_8021X_INNER_AUTH_METHODS=PAP\fB diff --git a/man/nm-settings-ifcfg-rh.xml b/man/nm-settings-ifcfg-rh.xml index 278d443..36976a2 100644 --- a/man/nm-settings-ifcfg-rh.xml +++ b/man/nm-settings-ifcfg-rh.xml @@ -1,6 +1,6 @@ -nm-settings-ifcfg-rhNetworkManager developersnm-settings-ifcfg-rh5NetworkManagerConfiguration1.29.11nm-settings-ifcfg-rhDescription of ifcfg-rh settings pluginDescription +nm-settings-ifcfg-rhNetworkManager developersnm-settings-ifcfg-rh5NetworkManagerConfiguration1.29.90nm-settings-ifcfg-rhDescription of ifcfg-rh settings pluginDescription NetworkManager is based on the concept of connection profiles that contain network configuration (see nm-settings5 for details). The profiles can be stored in various formats. NetworkManager uses plugins for reading and writing @@ -196,7 +196,7 @@ Allowed values: space-separated list of these values [allow-auth, all Example: IEEE_8021X_PHASE1_AUTH_FLAGS="tls-1-0-disable tls-1-1-disable" -Allowed values: space-separated list of authentication flags namesphase2-authIEEE_8021X_INNER_AUTH_METHODS(+)Inner non-EAP authentication methods. IEEE_8021X_INNER_AUTH_METHODS can contain values both for 'phase2-auth' and 'phase2-autheap' properties. +Allowed values: space-separated list of authentication flags namesphase2-authIEEE_8021X_INNER_AUTH_METHODS(+)Inner non-EAP authentication methods for TTLS or the inner EAP authentication method for PEAP. IEEE_8021X_INNER_AUTH_METHODS can contain values both for 'phase2-auth' and 'phase2-autheap' properties. Example: IEEE_8021X_INNER_AUTH_METHODS=PAP diff --git a/man/nm-settings-keyfile.5 b/man/nm-settings-keyfile.5 index c93ac56..e7bfb7e 100644 --- a/man/nm-settings-keyfile.5 +++ b/man/nm-settings-keyfile.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-keyfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: Configuration -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NM\-SETTINGS\-KEYFILE" "5" "" "NetworkManager 1\&.29\&.11" "Configuration" +.TH "NM\-SETTINGS\-KEYFILE" "5" "" "NetworkManager 1\&.29\&.90" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-keyfile.xml b/man/nm-settings-keyfile.xml index d02ac6e..fedfc19 100644 --- a/man/nm-settings-keyfile.xml +++ b/man/nm-settings-keyfile.xml @@ -1,6 +1,6 @@ -nm-settings-keyfileNetworkManager developersnm-settings-keyfile5NetworkManagerConfiguration1.29.11nm-settings-keyfileDescription of keyfile settings pluginDescription +nm-settings-keyfileNetworkManager developersnm-settings-keyfile5NetworkManagerConfiguration1.29.90nm-settings-keyfileDescription of keyfile settings pluginDescription NetworkManager is based on the concept of connection profiles that contain network configuration (see nm-settings5 for details). The profiles can be stored in various formats. NetworkManager uses plugins for reading and writing diff --git a/man/nm-settings-nmcli.5 b/man/nm-settings-nmcli.5 index 9a6b00e..552d283 100644 --- a/man/nm-settings-nmcli.5 +++ b/man/nm-settings-nmcli.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-nmcli .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: Configuration -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NM\-SETTINGS\-NMCLI" "5" "" "NetworkManager 1\&.29\&.11" "Configuration" +.TH "NM\-SETTINGS\-NMCLI" "5" "" "NetworkManager 1\&.29\&.90" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -459,14 +459,14 @@ Format: array of string .PP \fBphase2\-auth\fR .RS 4 -Specifies the allowed "phase 2" inner non\-EAP authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property\&. Recognized non\-EAP "phase 2" methods are "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls"\&. Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details\&. +Specifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property\&. For TTLS this property selects one of the supported non\-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2\-autheap" selects an EAP inner method\&. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls"\&. Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details\&. Both "phase2\-auth" and "phase2\-autheap" cannot be specified\&. .sp Format: string .RE .PP \fBphase2\-autheap\fR .RS 4 -Specifies the allowed "phase 2" inner EAP\-based authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property\&. Recognized EAP\-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls"\&. Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details\&. +Specifies the allowed "phase 2" inner EAP\-based authentication method when TTLS is specified in the "eap" property\&. Recognized EAP\-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls"\&. Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details\&. .sp Format: string .RE @@ -1260,6 +1260,10 @@ Properties: .RS 4 .RE .PP +\fBfeature\-macsec\-hw\-offload\fR +.RS 4 +.RE +.PP \fBfeature\-ntuple\fR .RS 4 .RE @@ -1280,6 +1284,14 @@ Properties: .RS 4 .RE .PP +\fBfeature\-rx\-gro\-list\fR +.RS 4 +.RE +.PP +\fBfeature\-rx\-udp\-gro\-forwarding\fR +.RS 4 +.RE +.PP \fBfeature\-rx\-udp_tunnel\-port\-offload\fR .RS 4 .RE @@ -1312,6 +1324,10 @@ Properties: .RS 4 .RE .PP +\fBfeature\-tls\-hw\-rx\-offload\fR +.RS 4 +.RE +.PP \fBfeature\-tls\-hw\-tx\-offload\fR .RS 4 .RE @@ -1360,6 +1376,10 @@ Properties: .RS 4 .RE .PP +\fBfeature\-tx\-gso\-list\fR +.RS 4 +.RE +.PP \fBfeature\-tx\-gso\-partial\fR .RS 4 .RE @@ -1408,6 +1428,10 @@ Properties: .RS 4 .RE .PP +\fBfeature\-tx\-tunnel\-remcsum\-segmentation\fR +.RS 4 +.RE +.PP \fBfeature\-tx\-udp\-segmentation\fR .RS 4 .RE diff --git a/man/nm-settings-nmcli.xml b/man/nm-settings-nmcli.xml index 4db1fac..9e7604f 100644 --- a/man/nm-settings-nmcli.xml +++ b/man/nm-settings-nmcli.xml @@ -1,6 +1,6 @@ -nm-settings-nmcliNetworkManager developersnm-settings-nmcli5NetworkManagerConfiguration1.29.11nm-settings-nmcliDescription of settings and properties of NetworkManager connection profiles for nmcliDescription +nm-settings-nmcliNetworkManager developersnm-settings-nmcli5NetworkManagerConfiguration1.29.90nm-settings-nmcliDescription of settings and properties of NetworkManager connection profiles for nmcliDescription NetworkManager is based on a concept of connection profiles, sometimes referred to as connections only. These connection profiles contain a network configuration. When NetworkManager activates a connection profile on a network device the configuration will @@ -103,8 +103,8 @@ Format: stringForces use of the new PEAP label during key derivation. Some RADIUS servers may require forcing the new PEAP label to interoperate with PEAPv1. Set to "1" to force use of the new PEAP label. See the wpa_supplicant documentation for more details. Format: stringForces which PEAP version is used when PEAP is set as the EAP method in the "eap" property. When unset, the version reported by the server will be used. Sometimes when using older RADIUS servers, it is necessary to force the client to use a particular PEAP version. To do so, this property may be set to "0" or "1" to force that specific PEAP version. Format: stringList of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner "phase 2" authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed. - Format: array of stringSpecifies the allowed "phase 2" inner non-EAP authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. Recognized non-EAP "phase 2" methods are "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. - Format: stringSpecifies the allowed "phase 2" inner EAP-based authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. + Format: array of stringSpecifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified. + Format: stringSpecifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Format: stringContains the "phase 2" CA certificate if used by the EAP method specified in the "phase2-auth" or "phase2-autheap" properties. Certificate data is specified using a "scheme"; three are currently supported: blob, path and pkcs#11 URL. When using the blob scheme this property should be set to the certificate's DER encoded data. When using the path scheme, this property should be set to the full UTF-8 encoded path of the certificate, prefixed with the string "file://" and ending with a terminating NUL byte. This property can be unset even if the EAP method supports CA certificates, but this allows man-in-the-middle attacks and is NOT recommended. Note that enabling NMSetting8021x:system-ca-certs will override this setting to use the built-in path, if the built-in path is not a directory. Format: byte arrayThe password used to access the "phase2" CA certificate stored in "phase2-ca-cert" property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login. Format: stringFlags indicating how to handle the "phase2-ca-cert-password" property. @@ -236,7 +236,7 @@ Format: array of uint32An array of 8 uint values, where the array index corresponds to the User Priority (0 - 7) and the value indicates the traffic class (0 - 7) to which the priority is mapped. Format: array of uint32ethtool settingEthtool Ethernet Settings. Properties: - gsm settingGSM-based Mobile Broadband Settings. + gsm settingGSM-based Mobile Broadband Settings. Properties: Alias: apnThe GPRS Access Point Name specifying the APN used when establishing a data session with the GSM-based network. The APN often determines how the user will be billed for their network usage and whether the user has access to the Internet or just a provider-specific walled-garden, so it is important to use the correct APN for the user's mobile broadband plan. The APN may only be composed of the characters a-z, 0-9, ., and - per GSM 03.60 Section 14.9. diff --git a/man/nmcli-examples.7 b/man/nmcli-examples.7 index 688478e..6615eaa 100644 --- a/man/nmcli-examples.7 +++ b/man/nmcli-examples.7 @@ -2,12 +2,12 @@ .\" Title: nmcli-examples .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: Examples -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NMCLI\-EXAMPLES" "7" "" "NetworkManager 1\&.29\&.11" "Examples" +.TH "NMCLI\-EXAMPLES" "7" "" "NetworkManager 1\&.29\&.90" "Examples" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nmcli.1 b/man/nmcli.1 index f7833c1..8c90080 100644 --- a/man/nmcli.1 +++ b/man/nmcli.1 @@ -2,12 +2,12 @@ .\" Title: nmcli .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: General Commands Manual -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NMCLI" "1" "" "NetworkManager 1\&.29\&.11" "General Commands Manual" +.TH "NMCLI" "1" "" "NetworkManager 1\&.29\&.90" "General Commands Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nmtui.1 b/man/nmtui.1 index d82dd95..4acc77f 100644 --- a/man/nmtui.1 +++ b/man/nmtui.1 @@ -2,12 +2,12 @@ .\" Title: nmtui .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 02/08/2021 +.\" Date: 02/11/2021 .\" Manual: General Commands Manual -.\" Source: NetworkManager 1.29.11 +.\" Source: NetworkManager 1.29.90 .\" Language: English .\" -.TH "NMTUI" "1" "" "NetworkManager 1\&.29\&.11" "General Commands Manual" +.TH "NMTUI" "1" "" "NetworkManager 1\&.29\&.90" "General Commands Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/meson.build b/meson.build index 59ff11b..594fa63 100644 --- a/meson.build +++ b/meson.build @@ -6,7 +6,7 @@ project( # - add corresponding NM_VERSION_x_y_z macros in # "shared/nm-version-macros.h.in" # - update number in configure.ac - version: '1.29.11', + version: '1.29.90', license: 'GPL2+', default_options: [ 'buildtype=debugoptimized', @@ -809,6 +809,11 @@ test( args: [source_root], ) +test( + 'check-tree', + find_program(join_paths(source_root, 'tools', 'check-tree.sh')), +) + # Tests, utilities and documentation tests = get_option('tests') enable_tests = (tests != 'no') @@ -904,8 +909,8 @@ content_files = [] subdir('introspection') subdir('shared') subdir('libnm-core') -subdir('libnm') subdir('src/core') +subdir('libnm') subdir('dispatcher') subdir('clients') subdir('data') diff --git a/po/POTFILES.in b/po/POTFILES.in index e48d9a8..21507ee 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -56,8 +56,8 @@ libnm-core/nm-crypto-gnutls.c libnm-core/nm-crypto-nss.c libnm-core/nm-connection.c libnm-core/nm-dbus-utils.c -libnm-core/nm-keyfile/nm-keyfile-utils.c -libnm-core/nm-keyfile/nm-keyfile.c +libnm-core/nm-keyfile-utils.c +libnm-core/nm-keyfile.c libnm-core/nm-libnm-core-aux/nm-libnm-core-aux.c libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c libnm-core/nm-setting-6lowpan.c diff --git a/po/uk.po b/po/uk.po index 0b1f263..f5713db 100644 --- a/po/uk.po +++ b/po/uk.po @@ -8,10 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/NetworkManager/NetworkMan" -"ager/issues\n" -"POT-Creation-Date: 2021-01-14 15:30+0000\n" -"PO-Revision-Date: 2021-01-14 18:21+0200\n" +"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues\n" +"POT-Creation-Date: 2021-02-10 03:28+0000\n" +"PO-Revision-Date: 2021-02-10 11:26+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -19,8 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 20.11.70\n" -"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" -"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: ../clients/cli/agent.c:22 #, c-format @@ -2893,7 +2891,8 @@ msgstr "Ad-Hoc" msgid "Infra" msgstr "Інфраструктура" -#: ../clients/cli/devices.c:1338 ../src/devices/wifi/nm-device-olpc-mesh.c:115 +#: ../clients/cli/devices.c:1338 +#: ../src/core/devices/wifi/nm-device-olpc-mesh.c:115 msgid "Mesh" msgstr "Сітка" @@ -4775,7 +4774,7 @@ msgid "invalid option '%s', use a combination of [%s]" msgstr "некоректний параметр «%s», скористайтеся комбінацією [%s]" #: ../clients/common/nm-meta-setting-desc.c:1623 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1103 +#: ../libnm-core/nm-keyfile.c:1103 #, c-format msgid "invalid option '%s', use one of [%s]" msgstr "" @@ -4857,7 +4856,7 @@ msgstr "" #: ../clients/common/nm-meta-setting-desc.c:2107 #: ../clients/common/nm-meta-setting-desc.c:4103 -#: ../libnm-core/nm-setting-ovs-bridge.c:187 ../src/nm-config.c:548 +#: ../libnm-core/nm-setting-ovs-bridge.c:187 ../src/core/nm-config.c:548 #, c-format msgid "'%s' is not valid" msgstr "«%s» не є коректним" @@ -5318,8 +5317,8 @@ msgstr "Користувач" #: ../clients/common/nm-meta-setting-desc.c:4885 #: ../clients/common/nm-meta-setting-desc.c:5169 -#: ../clients/common/nm-meta-setting-desc.c:5596 -#: ../clients/common/nm-meta-setting-desc.c:6602 +#: ../clients/common/nm-meta-setting-desc.c:5602 +#: ../clients/common/nm-meta-setting-desc.c:6608 msgid "Password [none]" msgstr "Пароль [типово немає]" @@ -5328,11 +5327,11 @@ msgid "Bluetooth device address" msgstr "Адреса пристрою Bluetooth" #: ../clients/common/nm-meta-setting-desc.c:4979 -#: ../clients/common/nm-meta-setting-desc.c:5667 -#: ../clients/common/nm-meta-setting-desc.c:7322 -#: ../clients/common/nm-meta-setting-desc.c:7360 -#: ../clients/common/nm-meta-setting-desc.c:7542 -#: ../clients/common/nm-meta-setting-desc.c:7775 +#: ../clients/common/nm-meta-setting-desc.c:5673 +#: ../clients/common/nm-meta-setting-desc.c:7328 +#: ../clients/common/nm-meta-setting-desc.c:7366 +#: ../clients/common/nm-meta-setting-desc.c:7548 +#: ../clients/common/nm-meta-setting-desc.c:7781 msgid "MAC [none]" msgstr "MAC [типово немає]" @@ -5381,8 +5380,8 @@ msgid "Hairpin [no]" msgstr "Початкова зона [типово немає]" #: ../clients/common/nm-meta-setting-desc.c:5163 -#: ../clients/common/nm-meta-setting-desc.c:5590 -#: ../clients/common/nm-meta-setting-desc.c:7169 +#: ../clients/common/nm-meta-setting-desc.c:5596 +#: ../clients/common/nm-meta-setting-desc.c:7175 msgid "Username [none]" msgstr "Користувач [типово немає]" @@ -5438,25 +5437,25 @@ msgstr "" "«unknown» — дозволити NetworkManager вибирати значення за допомогою " "евристики\n" -#: ../clients/common/nm-meta-setting-desc.c:5606 +#: ../clients/common/nm-meta-setting-desc.c:5612 msgid "APN" msgstr "APN" -#: ../clients/common/nm-meta-setting-desc.c:5676 -#: ../clients/common/nm-meta-setting-desc.c:7391 -#: ../clients/common/nm-meta-setting-desc.c:7582 +#: ../clients/common/nm-meta-setting-desc.c:5682 +#: ../clients/common/nm-meta-setting-desc.c:7397 +#: ../clients/common/nm-meta-setting-desc.c:7588 msgid "MTU [auto]" msgstr "MTU [типово авто]" -#: ../clients/common/nm-meta-setting-desc.c:5695 +#: ../clients/common/nm-meta-setting-desc.c:5701 msgid "P_KEY [none]" msgstr "P_KEY [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:5704 +#: ../clients/common/nm-meta-setting-desc.c:5710 msgid "Parent interface [none]" msgstr "Батьківський інтерфейс [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:5731 +#: ../clients/common/nm-meta-setting-desc.c:5737 msgid "" "Enter a list of IPv4 addresses of DNS servers.\n" "\n" @@ -5466,11 +5465,11 @@ msgstr "" "\n" "Приклад: 8.8.8.8, 8.8.4.4\n" -#: ../clients/common/nm-meta-setting-desc.c:5779 +#: ../clients/common/nm-meta-setting-desc.c:5785 msgid "IPv4 address (IP[/plen]) [none]" msgstr "Адреса IPv4 (IP[/plen]) [немає]" -#: ../clients/common/nm-meta-setting-desc.c:5781 +#: ../clients/common/nm-meta-setting-desc.c:5787 msgid "" "Enter a list of IPv4 addresses formatted as:\n" " ip[/prefix], ip[/prefix],...\n" @@ -5484,11 +5483,11 @@ msgstr "" "\n" "Приклад: 192.168.1.5/24, 10.0.0.11/24\n" -#: ../clients/common/nm-meta-setting-desc.c:5800 +#: ../clients/common/nm-meta-setting-desc.c:5806 msgid "IPv4 gateway [none]" msgstr "Шлюз IPv4 [немає]" -#: ../clients/common/nm-meta-setting-desc.c:5808 +#: ../clients/common/nm-meta-setting-desc.c:5814 msgid "" "Enter a list of IPv4 routes formatted as:\n" " ip[/prefix] [next-hop] [metric],...\n" @@ -5511,7 +5510,7 @@ msgstr "" "Приклади: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n" " 10.1.2.0/24\n" -#: ../clients/common/nm-meta-setting-desc.c:5848 +#: ../clients/common/nm-meta-setting-desc.c:5854 msgid "" "Enter a list of IPv4 routing rules formatted as:\n" " priority [prio] [from [src]] [to [dst]], ,...\n" @@ -5521,7 +5520,7 @@ msgstr "" " priority [пріоритетність] [from [джерело]] [to [призначення]], ,...\n" "\n" -#: ../clients/common/nm-meta-setting-desc.c:5955 +#: ../clients/common/nm-meta-setting-desc.c:5961 msgid "" "Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration " "method is 'auto' these DNS servers are appended to those (if any) returned " @@ -5542,11 +5541,11 @@ msgstr "" "\n" "Приклад: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n" -#: ../clients/common/nm-meta-setting-desc.c:6009 +#: ../clients/common/nm-meta-setting-desc.c:6015 msgid "IPv6 address (IP[/plen]) [none]" msgstr "Адреса IPv6 (IP[/plen]) [немає]" -#: ../clients/common/nm-meta-setting-desc.c:6011 +#: ../clients/common/nm-meta-setting-desc.c:6017 msgid "" "Enter a list of IPv6 addresses formatted as:\n" " ip[/prefix], ip[/prefix],...\n" @@ -5560,11 +5559,11 @@ msgstr "" "\n" "Приклад: 2607:f0d0:1002:51::4/64, 1050:0:0:0:5:600:300c:326b\n" -#: ../clients/common/nm-meta-setting-desc.c:6030 +#: ../clients/common/nm-meta-setting-desc.c:6036 msgid "IPv6 gateway [none]" msgstr "Шлюз IPv6 [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:6038 +#: ../clients/common/nm-meta-setting-desc.c:6044 msgid "" "Enter a list of IPv6 routes formatted as:\n" " ip[/prefix] [next-hop] [metric],...\n" @@ -5589,7 +5588,7 @@ msgstr "" "db8:beef::3 2\n" " abbe::/64 55\n" -#: ../clients/common/nm-meta-setting-desc.c:6078 +#: ../clients/common/nm-meta-setting-desc.c:6084 msgid "" "Enter a list of IPv6 routing rules formatted as:\n" " priority [prio] [from [src]] [to [dst]], ,...\n" @@ -5599,174 +5598,174 @@ msgstr "" " priority [пріоритетність] [from [джерело]] [to [призначення]], ,...\n" "\n" -#: ../clients/common/nm-meta-setting-desc.c:6185 -#: ../clients/common/nm-meta-setting-desc.c:7222 +#: ../clients/common/nm-meta-setting-desc.c:6191 +#: ../clients/common/nm-meta-setting-desc.c:7228 msgid "Parent device [none]" msgstr "Батьківський пристрій [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:6191 +#: ../clients/common/nm-meta-setting-desc.c:6197 msgid "Local endpoint [none]" msgstr "Локальна кінцева точка [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:6198 -#: ../clients/common/nm-meta-setting-desc.c:7241 +#: ../clients/common/nm-meta-setting-desc.c:6204 +#: ../clients/common/nm-meta-setting-desc.c:7247 msgid "Remote" msgstr "Віддалений" -#: ../clients/common/nm-meta-setting-desc.c:6243 +#: ../clients/common/nm-meta-setting-desc.c:6249 msgid "MACsec parent device or connection UUID" msgstr "Батьківський пристрій MACsec або UUID з'єднання" -#: ../clients/common/nm-meta-setting-desc.c:6264 +#: ../clients/common/nm-meta-setting-desc.c:6270 msgid "Enable encryption [yes]" msgstr "Увімкнути шифрування [типово «так»]" -#: ../clients/common/nm-meta-setting-desc.c:6270 +#: ../clients/common/nm-meta-setting-desc.c:6276 #: ../clients/common/nm-secret-agent-simple.c:929 msgid "MKA CAK" msgstr "MKA CAK" -#: ../clients/common/nm-meta-setting-desc.c:6280 +#: ../clients/common/nm-meta-setting-desc.c:6286 msgid "MKA_CKN" msgstr "MKA_CKN" -#: ../clients/common/nm-meta-setting-desc.c:6286 +#: ../clients/common/nm-meta-setting-desc.c:6292 msgid "SCI port [1]" msgstr "Порт SCI [1]" -#: ../clients/common/nm-meta-setting-desc.c:6312 +#: ../clients/common/nm-meta-setting-desc.c:6318 msgid "MACVLAN parent device or connection UUID" msgstr "Батьківський пристрій MACVLAN або UUID з'єднання" -#: ../clients/common/nm-meta-setting-desc.c:6333 +#: ../clients/common/nm-meta-setting-desc.c:6339 msgid "Tap [no]" msgstr "Tap [типово ні]" -#: ../clients/common/nm-meta-setting-desc.c:6400 -#: ../clients/common/nm-meta-setting-desc.c:7496 +#: ../clients/common/nm-meta-setting-desc.c:6406 +#: ../clients/common/nm-meta-setting-desc.c:7502 #: ../clients/tui/nmt-page-wifi.c:203 msgid "SSID" msgstr "SSID" -#: ../clients/common/nm-meta-setting-desc.c:6409 +#: ../clients/common/nm-meta-setting-desc.c:6415 msgid "OLPC Mesh channel [1]" msgstr "Канал OLPC Mesh [типово 1]" -#: ../clients/common/nm-meta-setting-desc.c:6418 +#: ../clients/common/nm-meta-setting-desc.c:6424 msgid "DHCP anycast MAC address [none]" msgstr "MAC-адреса довільного надсилання (anycast) DHCP [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:6583 +#: ../clients/common/nm-meta-setting-desc.c:6589 msgid "PPPoE parent device" msgstr "Батьківський пристрій PPPoE" -#: ../clients/common/nm-meta-setting-desc.c:6589 +#: ../clients/common/nm-meta-setting-desc.c:6595 msgid "Service [none]" msgstr "Служба [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:6596 +#: ../clients/common/nm-meta-setting-desc.c:6602 msgid "PPPoE username" msgstr "Користувач PPPoE" -#: ../clients/common/nm-meta-setting-desc.c:6632 +#: ../clients/common/nm-meta-setting-desc.c:6638 msgid "Browser only [no]" msgstr "Лише навігатор [типово «ні»]" -#: ../clients/common/nm-meta-setting-desc.c:6638 +#: ../clients/common/nm-meta-setting-desc.c:6644 msgid "PAC URL" msgstr "Адреса PAC" -#: ../clients/common/nm-meta-setting-desc.c:6644 +#: ../clients/common/nm-meta-setting-desc.c:6650 msgid "PAC script" msgstr "Скрипт PAC" -#: ../clients/common/nm-meta-setting-desc.c:6768 -#: ../clients/common/nm-meta-setting-desc.c:6956 +#: ../clients/common/nm-meta-setting-desc.c:6774 +#: ../clients/common/nm-meta-setting-desc.c:6962 msgid "Team JSON configuration [none]" msgstr "Налаштування JSON команди [немає]" -#: ../clients/common/nm-meta-setting-desc.c:7059 +#: ../clients/common/nm-meta-setting-desc.c:7065 msgid "User ID [none]" msgstr "Ідентифікатор користувача [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7065 +#: ../clients/common/nm-meta-setting-desc.c:7071 msgid "Group ID [none]" msgstr "Ідентифікатор групи [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7071 +#: ../clients/common/nm-meta-setting-desc.c:7077 msgid "Enable PI [no]" msgstr "Увімкнути PI [типово ні]" -#: ../clients/common/nm-meta-setting-desc.c:7077 +#: ../clients/common/nm-meta-setting-desc.c:7083 msgid "Enable VNET header [no]" msgstr "Увімкнути заголовок VNET [типово ні]" -#: ../clients/common/nm-meta-setting-desc.c:7083 +#: ../clients/common/nm-meta-setting-desc.c:7089 msgid "Enable multi queue [no]" msgstr "Увімкнути декілька черг [типово ні]" -#: ../clients/common/nm-meta-setting-desc.c:7096 +#: ../clients/common/nm-meta-setting-desc.c:7102 msgid "veth peer" msgstr "вузол veth" -#: ../clients/common/nm-meta-setting-desc.c:7109 +#: ../clients/common/nm-meta-setting-desc.c:7115 msgid "VLAN parent device or connection UUID" msgstr "Батьківський пристрій VLAN або UUID з'єднання" -#: ../clients/common/nm-meta-setting-desc.c:7116 +#: ../clients/common/nm-meta-setting-desc.c:7122 msgid "VLAN ID (<0-4094>)" msgstr "Ід. VLAN (<0-4094>)" -#: ../clients/common/nm-meta-setting-desc.c:7122 +#: ../clients/common/nm-meta-setting-desc.c:7128 msgid "VLAN flags (<0-7>) [none]" msgstr "Прапорці VLAN (<0-7>) [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7131 +#: ../clients/common/nm-meta-setting-desc.c:7137 msgid "Ingress priority maps [none]" msgstr "Відображення пріоритетності вхідного доступу [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7141 +#: ../clients/common/nm-meta-setting-desc.c:7147 msgid "Egress priority maps [none]" msgstr "Відображення пріоритетності вихідного доступу [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7209 +#: ../clients/common/nm-meta-setting-desc.c:7215 msgid "Table [0]" msgstr "Таблиця [0]" -#: ../clients/common/nm-meta-setting-desc.c:7229 +#: ../clients/common/nm-meta-setting-desc.c:7235 msgid "VXLAN ID" msgstr "Ід. VXLAN" -#: ../clients/common/nm-meta-setting-desc.c:7235 +#: ../clients/common/nm-meta-setting-desc.c:7241 msgid "Local address [none]" msgstr "Локальна адреса [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7247 +#: ../clients/common/nm-meta-setting-desc.c:7253 msgid "Minimum source port [0]" msgstr "Мінімальний порт джерела [0]" -#: ../clients/common/nm-meta-setting-desc.c:7253 +#: ../clients/common/nm-meta-setting-desc.c:7259 msgid "Maximum source port [0]" msgstr "Максимальний порт джерела [0]" -#: ../clients/common/nm-meta-setting-desc.c:7259 +#: ../clients/common/nm-meta-setting-desc.c:7265 msgid "Destination port [8472]" msgstr "Порт призначення [типово 8472]" -#: ../clients/common/nm-meta-setting-desc.c:7299 +#: ../clients/common/nm-meta-setting-desc.c:7305 msgid "Peer" msgstr "Вузол" -#: ../clients/common/nm-meta-setting-desc.c:7329 +#: ../clients/common/nm-meta-setting-desc.c:7335 msgid "WiMAX NSP name" msgstr "Назва NSP WiMAX" -#: ../clients/common/nm-meta-setting-desc.c:7366 -#: ../clients/common/nm-meta-setting-desc.c:7547 +#: ../clients/common/nm-meta-setting-desc.c:7372 +#: ../clients/common/nm-meta-setting-desc.c:7553 msgid "Cloned MAC [none]" msgstr "Клонований MAC [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7399 +#: ../clients/common/nm-meta-setting-desc.c:7405 msgid "" "Enter a list of subchannels (comma or space separated).\n" "\n" @@ -5776,7 +5775,7 @@ msgstr "" "\n" "Приклад: 0.0.0e20 0.0.0e21 0.0.0e22\n" -#: ../clients/common/nm-meta-setting-desc.c:7724 +#: ../clients/common/nm-meta-setting-desc.c:7730 msgid "" "Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, " "and 2 or passphrase.\n" @@ -5784,234 +5783,234 @@ msgstr "" "Вкажіть тип ключів WEP. Можливі значення: 0 або unknown (невідомо), 1 або " "key (ключ) та 2 або passphrase (пароль).\n" -#: ../clients/common/nm-meta-setting-desc.c:7783 +#: ../clients/common/nm-meta-setting-desc.c:7789 msgid "Short address (<0x0000-0xffff>)" msgstr "Коротка адреса (<0x0000-0xffff>)" -#: ../clients/common/nm-meta-setting-desc.c:7799 +#: ../clients/common/nm-meta-setting-desc.c:7805 msgid "PAN Identifier (<0x0000-0xffff>)" msgstr "Ідентифікатор PAN (<0x0000-0xffff>)" -#: ../clients/common/nm-meta-setting-desc.c:7814 +#: ../clients/common/nm-meta-setting-desc.c:7820 msgid "Page ()" msgstr "Сторінка ()" -#: ../clients/common/nm-meta-setting-desc.c:7828 +#: ../clients/common/nm-meta-setting-desc.c:7834 msgid "Channel ()" msgstr "Канал ()" #. *************************************************************************** -#: ../clients/common/nm-meta-setting-desc.c:7963 +#: ../clients/common/nm-meta-setting-desc.c:7969 msgid "6LOWPAN settings" msgstr "Параметри 6LOWPAN" -#: ../clients/common/nm-meta-setting-desc.c:7964 +#: ../clients/common/nm-meta-setting-desc.c:7970 msgid "802-1x settings" msgstr "Параметри 802-1x" -#: ../clients/common/nm-meta-setting-desc.c:7965 -#: ../src/devices/adsl/nm-device-adsl.c:117 +#: ../clients/common/nm-meta-setting-desc.c:7971 +#: ../src/core/devices/adsl/nm-device-adsl.c:117 msgid "ADSL connection" msgstr "З'єднання ADSL" -#: ../clients/common/nm-meta-setting-desc.c:7966 +#: ../clients/common/nm-meta-setting-desc.c:7972 msgid "bluetooth connection" msgstr "з'єднання bluetooth" -#: ../clients/common/nm-meta-setting-desc.c:7967 +#: ../clients/common/nm-meta-setting-desc.c:7973 msgid "Bond device" msgstr "Пристрій Bond" -#: ../clients/common/nm-meta-setting-desc.c:7968 +#: ../clients/common/nm-meta-setting-desc.c:7974 msgid "Bridge device" msgstr "Пристрій містка" -#: ../clients/common/nm-meta-setting-desc.c:7969 +#: ../clients/common/nm-meta-setting-desc.c:7975 msgid "Bridge port" msgstr "Порт містка" -#: ../clients/common/nm-meta-setting-desc.c:7970 +#: ../clients/common/nm-meta-setting-desc.c:7976 msgid "CDMA mobile broadband connection" msgstr "мобільне широкосмугове з'єднання CDMA" -#: ../clients/common/nm-meta-setting-desc.c:7971 +#: ../clients/common/nm-meta-setting-desc.c:7977 msgid "General settings" msgstr "Загальні параметри" -#: ../clients/common/nm-meta-setting-desc.c:7972 +#: ../clients/common/nm-meta-setting-desc.c:7978 msgid "DCB settings" msgstr "Параметри DCB" -#: ../clients/common/nm-meta-setting-desc.c:7973 +#: ../clients/common/nm-meta-setting-desc.c:7979 msgid "Dummy settings" msgstr "Фіктивні параметри" -#: ../clients/common/nm-meta-setting-desc.c:7974 +#: ../clients/common/nm-meta-setting-desc.c:7980 msgid "Ethtool settings" msgstr "Параметри Ethtool" -#: ../clients/common/nm-meta-setting-desc.c:7975 +#: ../clients/common/nm-meta-setting-desc.c:7981 msgid "Generic settings" msgstr "Загальні параметри" -#: ../clients/common/nm-meta-setting-desc.c:7976 +#: ../clients/common/nm-meta-setting-desc.c:7982 msgid "GSM mobile broadband connection" msgstr "мобільне широкосмугове з'єднання GSM" -#: ../clients/common/nm-meta-setting-desc.c:7977 +#: ../clients/common/nm-meta-setting-desc.c:7983 msgid "Hostname settings" msgstr "Параметри назви вузла" -#: ../clients/common/nm-meta-setting-desc.c:7978 -#: ../src/devices/nm-device-infiniband.c:161 +#: ../clients/common/nm-meta-setting-desc.c:7984 +#: ../src/core/devices/nm-device-infiniband.c:161 msgid "InfiniBand connection" msgstr "З'єднання InfiniBand" -#: ../clients/common/nm-meta-setting-desc.c:7979 +#: ../clients/common/nm-meta-setting-desc.c:7985 msgid "IPv4 protocol" msgstr "Протокол IPv4" -#: ../clients/common/nm-meta-setting-desc.c:7980 +#: ../clients/common/nm-meta-setting-desc.c:7986 msgid "IPv6 protocol" msgstr "Протокол IPv6" -#: ../clients/common/nm-meta-setting-desc.c:7981 +#: ../clients/common/nm-meta-setting-desc.c:7987 msgid "IP-tunnel settings" msgstr "Параметри IP-тунелювання" -#: ../clients/common/nm-meta-setting-desc.c:7982 +#: ../clients/common/nm-meta-setting-desc.c:7988 msgid "MACsec connection" msgstr "З'єднання MACsec" -#: ../clients/common/nm-meta-setting-desc.c:7983 +#: ../clients/common/nm-meta-setting-desc.c:7989 msgid "macvlan connection" msgstr "З'єднання MACVLAN" -#: ../clients/common/nm-meta-setting-desc.c:7984 +#: ../clients/common/nm-meta-setting-desc.c:7990 msgid "Match" msgstr "Відповідність" -#: ../clients/common/nm-meta-setting-desc.c:7985 +#: ../clients/common/nm-meta-setting-desc.c:7991 msgid "OLPC Mesh connection" msgstr "З'єднання OLPC Mesh" -#: ../clients/common/nm-meta-setting-desc.c:7986 +#: ../clients/common/nm-meta-setting-desc.c:7992 msgid "Open vSwitch bridge settings" msgstr "Параметри містка Open vSwitch" -#: ../clients/common/nm-meta-setting-desc.c:7987 +#: ../clients/common/nm-meta-setting-desc.c:7993 msgid "Open vSwitch DPDK interface settings" msgstr "Параметри інтерфейсу Open vSwitch DPDK" -#: ../clients/common/nm-meta-setting-desc.c:7988 +#: ../clients/common/nm-meta-setting-desc.c:7994 msgid "OVS External IDs" msgstr "Зовнішні ідентифікатори OVS" -#: ../clients/common/nm-meta-setting-desc.c:7989 +#: ../clients/common/nm-meta-setting-desc.c:7995 msgid "Open vSwitch interface settings" msgstr "Параметри інтерфейсу Open vSwitch" -#: ../clients/common/nm-meta-setting-desc.c:7990 +#: ../clients/common/nm-meta-setting-desc.c:7996 msgid "Open vSwitch patch interface settings" msgstr "Параметри інтерфейсу латок Open vSwitch" -#: ../clients/common/nm-meta-setting-desc.c:7991 +#: ../clients/common/nm-meta-setting-desc.c:7997 msgid "Open vSwitch port settings" msgstr "Параметри портів Open vSwitch" -#: ../clients/common/nm-meta-setting-desc.c:7992 +#: ../clients/common/nm-meta-setting-desc.c:7998 msgid "PPP settings" msgstr "Параметри PPP" -#: ../clients/common/nm-meta-setting-desc.c:7993 +#: ../clients/common/nm-meta-setting-desc.c:7999 msgid "PPPoE" msgstr "PPPoE" -#: ../clients/common/nm-meta-setting-desc.c:7994 +#: ../clients/common/nm-meta-setting-desc.c:8000 msgid "Proxy" msgstr "Проксі" -#: ../clients/common/nm-meta-setting-desc.c:7995 +#: ../clients/common/nm-meta-setting-desc.c:8001 msgid "Serial settings" msgstr "Параметри послідовного з'єднання" -#: ../clients/common/nm-meta-setting-desc.c:7996 +#: ../clients/common/nm-meta-setting-desc.c:8002 msgid "SR-IOV settings" msgstr "Параметри SR-IOV" -#: ../clients/common/nm-meta-setting-desc.c:7997 +#: ../clients/common/nm-meta-setting-desc.c:8003 msgid "Traffic controls" msgstr "Засоби керування обміном даними" -#: ../clients/common/nm-meta-setting-desc.c:7998 +#: ../clients/common/nm-meta-setting-desc.c:8004 msgid "Team device" msgstr "Пристрій Team" -#: ../clients/common/nm-meta-setting-desc.c:7999 +#: ../clients/common/nm-meta-setting-desc.c:8005 msgid "Team port" msgstr "Порт Team" -#: ../clients/common/nm-meta-setting-desc.c:8000 +#: ../clients/common/nm-meta-setting-desc.c:8006 msgid "Tun device" msgstr "Пристрій TUN" -#: ../clients/common/nm-meta-setting-desc.c:8001 +#: ../clients/common/nm-meta-setting-desc.c:8007 msgid "User settings" msgstr "Параметри користувача" -#: ../clients/common/nm-meta-setting-desc.c:8002 -#: ../src/devices/nm-device-veth.c:138 +#: ../clients/common/nm-meta-setting-desc.c:8008 +#: ../src/core/devices/nm-device-ethernet.c:1611 msgid "Veth connection" msgstr "З'єднання veth" -#: ../clients/common/nm-meta-setting-desc.c:8003 -#: ../src/devices/nm-device-vlan.c:400 +#: ../clients/common/nm-meta-setting-desc.c:8009 +#: ../src/core/devices/nm-device-vlan.c:400 msgid "VLAN connection" msgstr "З'єднання VLAN" -#: ../clients/common/nm-meta-setting-desc.c:8004 ../src/nm-manager.c:5866 +#: ../clients/common/nm-meta-setting-desc.c:8010 ../src/core/nm-manager.c:5867 msgid "VPN connection" msgstr "З'єднання VPN" -#: ../clients/common/nm-meta-setting-desc.c:8005 -#: ../src/devices/nm-device-vrf.c:181 +#: ../clients/common/nm-meta-setting-desc.c:8011 +#: ../src/core/devices/nm-device-vrf.c:181 msgid "VRF connection" msgstr "З'єднання VRF" -#: ../clients/common/nm-meta-setting-desc.c:8006 -#: ../src/devices/nm-device-vxlan.c:382 +#: ../clients/common/nm-meta-setting-desc.c:8012 +#: ../src/core/devices/nm-device-vxlan.c:382 msgid "VXLAN connection" msgstr "З'єднання VXLAN" -#: ../clients/common/nm-meta-setting-desc.c:8007 +#: ../clients/common/nm-meta-setting-desc.c:8013 msgid "Wi-Fi P2P connection" msgstr "З'єднання P2P Wi-Fi" -#: ../clients/common/nm-meta-setting-desc.c:8008 +#: ../clients/common/nm-meta-setting-desc.c:8014 msgid "WiMAX connection" msgstr "З'єднання WiMAX" -#: ../clients/common/nm-meta-setting-desc.c:8009 +#: ../clients/common/nm-meta-setting-desc.c:8015 msgid "Wired Ethernet" msgstr "Дротовий Ethernet" -#: ../clients/common/nm-meta-setting-desc.c:8010 +#: ../clients/common/nm-meta-setting-desc.c:8016 msgid "WireGuard VPN settings" msgstr "Параметри VPN WireGuard" -#: ../clients/common/nm-meta-setting-desc.c:8011 +#: ../clients/common/nm-meta-setting-desc.c:8017 msgid "Wi-Fi connection" msgstr "З'єднання Wi-Fi" -#: ../clients/common/nm-meta-setting-desc.c:8012 +#: ../clients/common/nm-meta-setting-desc.c:8018 msgid "Wi-Fi security settings" msgstr "Параметри захисту Wi-Fi" -#: ../clients/common/nm-meta-setting-desc.c:8013 +#: ../clients/common/nm-meta-setting-desc.c:8019 msgid "WPAN settings" msgstr "Параметри WPAN" -#: ../clients/common/nm-meta-setting-desc.c:8413 +#: ../clients/common/nm-meta-setting-desc.c:8419 msgid "name" msgstr "назва" @@ -7109,33 +7108,34 @@ msgstr "" #: ../clients/common/settings-docs.h.in:70 msgid "" -"Specifies the allowed \"phase 2\" inner non-EAP authentication method when " -"an EAP method that uses an inner TLS tunnel is specified in the \"eap\" " -"property. Recognized non-EAP \"phase 2\" methods are \"pap\", \"chap\", " -"\"mschap\", \"mschapv2\", \"gtc\", \"otp\", \"md5\", and \"tls\". Each " -"\"phase 2\" inner method requires specific parameters for successful " -"authentication; see the wpa_supplicant documentation for more details." +"Specifies the allowed \"phase 2\" inner authentication method when an EAP " +"method that uses an inner TLS tunnel is specified in the \"eap\" property. " +"For TTLS this property selects one of the supported non-EAP inner methods: " +"\"pap\", \"chap\", \"mschap\", \"mschapv2\" while \"phase2-autheap\" selects " +"an EAP inner method. For PEAP this selects an inner EAP method, one of: " +"\"gtc\", \"otp\", \"md5\" and \"tls\". Each \"phase 2\" inner method " +"requires specific parameters for successful authentication; see the " +"wpa_supplicant documentation for more details. Both \"phase2-auth\" and " +"\"phase2-autheap\" cannot be specified." msgstr "" -"Визначає дозволені способи внутрішнього непов'язаного із EAP розпізнавання, " +"Визначає дозволені способи внутрішнього розпізнавання, " "якщо у властивості «eap» вказано спосіб EAP, який використовує внутрішній " -"тунель TLS. Відомими програмі способами «phase 2» без EAP є «pap», «chap», " -"«mschap», «mschapv2», «gtc», «otp», «md5» і «tls». Для успішного " +"тунель TLS. Для TLS ця властивість вибирає один із не пов'язаних із EAP методів «phase 2» є «pap», «chap», " +"«mschap», «mschapv2», а «phase2-autheap» вибирає внутрішній метод EAP. Для PEAP цей параметр вибирає внутрішній метод EAP, один із таких варіантів: «gtc», «otp», «md5» і «tls». Для успішного " "розпізнавання для кожного з внутрішніх способів «phase 2» слід вказати " "специфічні параметри. Докладніший опис параметрів можна знайти у " -"документації з wpa_supplicant." +"документації з wpa_supplicant. Не можна одночасно вказувати «phase2-auth» і «phase2-autheap»." #: ../clients/common/settings-docs.h.in:71 msgid "" "Specifies the allowed \"phase 2\" inner EAP-based authentication method when " -"an EAP method that uses an inner TLS tunnel is specified in the \"eap\" " -"property. Recognized EAP-based \"phase 2\" methods are \"md5\", " -"\"mschapv2\", \"otp\", \"gtc\", and \"tls\". Each \"phase 2\" inner method " -"requires specific parameters for successful authentication; see the " -"wpa_supplicant documentation for more details." +"TTLS is specified in the \"eap\" property. Recognized EAP-based \"phase 2\" " +"methods are \"md5\", \"mschapv2\", \"otp\", \"gtc\", and \"tls\". Each " +"\"phase 2\" inner method requires specific parameters for successful " +"authentication; see the wpa_supplicant documentation for more details." msgstr "" "Визначає дозволені способи внутрішнього розпізнавання на основі EAP, якщо у " -"властивості «eap» вказано спосіб EAP, який використовує внутрішній тунель " -"TLS. Відомими програмі способами «phase 2» на основі EAP є «md5», " +"властивості «eap» вказано TTLS. Відомими програмі способами «phase 2» на основі EAP є «md5», " "«mschapv2», «otp», «gtc» і «tls». Для успішного розпізнавання для кожного з " "внутрішніх способів «phase 2» слід вказати специфічні параметри. Докладніший " "опис параметрів можна знайти у документації з wpa_supplicant." @@ -8735,7 +8735,7 @@ msgid "" "doesn't have the default route. When set to NM_TERNARY_DEFAULT (-1), the " "value from global configuration is used. If the property doesn't have a " "value in the global configuration, NetworkManager assumes the value to be " -"NM_TERNARY_TRUE (1)." +"NM_TERNARY_FALSE (0)." msgstr "" "Якщо встановити значення NM_TERNARY_TRUE (1), NetworkManager намагатиметься " "отримати назву вузла за допомогою DHCPv4/DHCPv6 або зворотного пошуку DNS на " @@ -8745,7 +8745,7 @@ msgstr "" "типового маршруту. Якщо встановити значення NM_TERNARY_DEFAULT (-1), буде " "використано значення із загальних налаштувань. Якщо у властивості немає " "значення у загальних налаштуваннях, NetworkManager припускає значення " -"NM_TERNARY_TRUE (1)." +"NM_TERNARY_FALSE (0)." #: ../clients/common/settings-docs.h.in:209 msgid "" @@ -8971,30 +8971,29 @@ msgid "" msgstr "" "Рядок, надісланий до сервера DHCP для ідентифікації локального комп'ютера, " "який сервер DHCP може використовувати для налаштовування надання послуг і " -"параметрів DHCP. Якщо властивість є шістнадцятковим рядком («aa:bb:cc»), його" -" буде оброблено як двійковий ідентифікатор клієнта, а перший байт вважається " -"значенням поля «type», відповідно до RFC 2132, розділ 9.14, а інші байти " -"можуть бути апаратною адресою (наприклад, «01:xx:xx:xx:xx:xx:xx», де 1 є " -"типом ARP Ethernet, а решта є MAC-адресою). Якщо властивість не є " +"параметрів DHCP. Якщо властивість є шістнадцятковим рядком («aa:bb:cc»), " +"його буде оброблено як двійковий ідентифікатор клієнта, а перший байт " +"вважається значенням поля «type», відповідно до RFC 2132, розділ 9.14, а " +"інші байти можуть бути апаратною адресою (наприклад, «01:xx:xx:xx:xx:xx:xx», " +"де 1 є типом ARP Ethernet, а решта є MAC-адресою). Якщо властивість не є " "шістнадцятковим рядком, він вважається ідентифікатором клієнта без апаратної " "адреси, а для поля «type» встановлюється значення 0. Передбачено підтримку " "особливих значень «mac» та «perm-mac», використання яких призводить до " "використання поточної або сталої адреси MAC пристрою для створення " -"ідентифікатора клієнта із типом ethernet (01). Якщо буде використано" -" спеціальне значення «ipv6-duid», як сумісний із RFC4361 ідентифікатор" -" клієнта буде використано DUID з властивості «ipv6.dhcp-duid». Як IAID буде" -" використано «ipv4.dhcp-iaid». Якщо це значення не встановлено, буде" -" використано резервне значення «ipv6.dhcp-iaid». Якщо буде використано " +"ідентифікатора клієнта із типом ethernet (01). Якщо буде використано " +"спеціальне значення «ipv6-duid», як сумісний із RFC4361 ідентифікатор " +"клієнта буде використано DUID з властивості «ipv6.dhcp-duid». Як IAID буде " +"використано «ipv4.dhcp-iaid». Якщо це значення не встановлено, буде " +"використано резервне значення «ipv6.dhcp-iaid». Якщо буде використано " "спеціальне значення «duid», буде створено сумісний із RFC4361 ідентифікатор " -"клієнта на основі «ipv4.dhcp-iaid» і використано DUID, який створено" -" хешуванням /etc/machine-id. " -"Передбачено підтримку спеціального значення «stable» для створення " -"ідентифікатора клієнта типу 0 на основі stable-id (див. connection.stable-" -"id) та власного ключа вузла. Якщо ви встановили stable-id, ймовірно, варто " -"включити специфікатор «${DEVICE}» або «${MAC}» для отримання власного ключа " -"пристрою. Якщо значення не встановлено, буде використано загальне типове " -"налаштоване значення. Якщо і це значення не налаштовано, типове значення " -"залежатиме від додатка DHCP." +"клієнта на основі «ipv4.dhcp-iaid» і використано DUID, який створено " +"хешуванням /etc/machine-id. Передбачено підтримку спеціального значення " +"«stable» для створення ідентифікатора клієнта типу 0 на основі stable-id " +"(див. connection.stable-id) та власного ключа вузла. Якщо ви встановили " +"stable-id, ймовірно, варто включити специфікатор «${DEVICE}» або «${MAC}» " +"для отримання власного ключа пристрою. Якщо значення не встановлено, буде " +"використано загальне типове налаштоване значення. Якщо і це значення не " +"налаштовано, типове значення залежатиме від додатка DHCP." #: ../clients/common/settings-docs.h.in:231 msgid "" @@ -9165,7 +9164,8 @@ msgid "" "request\", \"single-request-reopen\", \"timeout\", \"trust-ad\", \"use-vc\". " "The \"trust-ad\" setting is only honored if the profile contributes name " "servers to resolv.conf, and if all contributing profiles have \"trust-ad\" " -"enabled." +"enabled. When using a caching DNS plugin (dnsmasq or systemd-resolved in " +"NetworkManager.conf) then \"edns0\" and \"trust-ad\" are automatically added." msgstr "" "Масив параметрів DNS, який описано на сторінці підручника (man 5) resolv." "conf. NULL означає, що параметри не встановлено і NetworkManager слід " @@ -9176,7 +9176,7 @@ msgstr "" "reload», «no-tld-query», «rotate», «single-request», «single-request-" "reopen», «timeout», «trust-ad», «use-vc». Варіант «trust-ad» буде взято до " "уваги, лише якщо профіль вказує сервери назв у resolv.conf і для всіх " -"відповідних профілів увімкнено «trust-ad»." +"відповідних профілів увімкнено «trust-ad». Якщо використано додаток DNS із кешуванням (dnsmasq або systemd-resolved у NetworkManager.conf), «edns0» і «trust-ad» буде додано автоматично." #: ../clients/common/settings-docs.h.in:241 #: ../clients/common/settings-docs.h.in:264 @@ -10896,7 +10896,7 @@ msgstr "З'єднання DSL %d" #: ../clients/tui/nm-editor-utils.c:180 ../libnm-core/nm-connection.c:2696 #: ../libnm/nm-device.c:1675 -#: ../src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5467 +#: ../src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5467 msgid "Bond" msgstr "Прив'язка" @@ -10907,7 +10907,7 @@ msgstr "Прив'язане з'єднання %d" #: ../clients/tui/nm-editor-utils.c:189 ../libnm-core/nm-connection.c:2700 #: ../libnm/nm-device.c:1679 -#: ../src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5875 +#: ../src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5875 msgid "Bridge" msgstr "Місток" @@ -10918,7 +10918,7 @@ msgstr "З'єднання містка %d" #: ../clients/tui/nm-editor-utils.c:198 ../libnm-core/nm-connection.c:2698 #: ../libnm/nm-device.c:1677 -#: ../src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5538 +#: ../src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5538 msgid "Team" msgstr "Команда" @@ -12131,242 +12131,237 @@ msgstr "IP-тунель" msgid "Method returned type '%s', but expected '%s'" msgstr "Методом повернуто тип «%s», хоча мав бути «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile-utils.c:174 +#: ../libnm-core/nm-keyfile-utils.c:174 #, c-format msgid "Value cannot be interpreted as a list of numbers." msgstr "Значення не може бути оброблено як список чисел." -#: ../libnm-core/nm-keyfile/nm-keyfile-utils.c:303 +#: ../libnm-core/nm-keyfile-utils.c:303 #, c-format msgid "value is not an integer in range [%lld, %lld]" msgstr "значення не є цілим числом у діапазоні [%lld, %lld]" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:269 +#: ../libnm-core/nm-keyfile.c:269 msgid "ignoring missing number" msgstr "ігноруємо пропущене число" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:281 +#: ../libnm-core/nm-keyfile.c:281 #, c-format msgid "ignoring invalid number '%s'" msgstr "ігноруємо некоректне число «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:310 +#: ../libnm-core/nm-keyfile.c:310 #, c-format msgid "ignoring invalid %s address: %s" msgstr "ігноруємо некоректну адресу %s: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:356 +#: ../libnm-core/nm-keyfile.c:356 #, c-format msgid "ignoring invalid gateway '%s' for %s route" msgstr "ігноруємо некоректний шлюз «%s» для маршруту %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:378 +#: ../libnm-core/nm-keyfile.c:378 #, c-format msgid "ignoring invalid %s route: %s" msgstr "ігноруємо некоректний маршрут %s: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:556 +#: ../libnm-core/nm-keyfile.c:556 #, c-format msgid "unexpected character '%c' for address %s: '%s' (position %td)" msgstr "неочікуваний символ «%c» для адреси %s: «%s» (позиція %td)" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:572 +#: ../libnm-core/nm-keyfile.c:572 #, c-format msgid "unexpected character '%c' for %s: '%s' (position %td)" msgstr "неочікуваний символ «%c» для %s: «%s» (позиція %td)" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:587 +#: ../libnm-core/nm-keyfile.c:587 #, c-format msgid "unexpected character '%c' in prefix length for %s: '%s' (position %td)" msgstr "неочікуваний символ «%c» у префіксі довжини для %s: «%s» (позиція %td)" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:604 +#: ../libnm-core/nm-keyfile.c:604 #, c-format msgid "garbage at the end of value %s: '%s'" msgstr "зайві дані наприкінці значення %s: «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:614 +#: ../libnm-core/nm-keyfile.c:614 #, c-format msgid "deprecated semicolon at the end of value %s: '%s'" msgstr "застаріла крапка з комою наприкінці значення %s: «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:633 +#: ../libnm-core/nm-keyfile.c:633 #, c-format msgid "invalid prefix length for %s '%s', defaulting to %d" msgstr "некоректний префікс довжини для %s «%s», повертаємося до типового, %d" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:645 +#: ../libnm-core/nm-keyfile.c:645 #, c-format msgid "missing prefix length for %s '%s', defaulting to %d" msgstr "пропущено префікс довжини для %s «%s», повертаємося до типового, %d" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:988 +#: ../libnm-core/nm-keyfile.c:988 #: ../libnm-core/nm-setting-ovs-external-ids.c:320 #: ../libnm-core/nm-setting-user.c:372 #, c-format msgid "invalid value for \"%s\": %s" msgstr "некоректне значення для «%s»: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1066 +#: ../libnm-core/nm-keyfile.c:1066 #, c-format msgid "ignoring invalid DNS server IPv%c address '%s'" msgstr "ігноруємо некоректну адресу IPv%c сервера DNS «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1161 +#: ../libnm-core/nm-keyfile.c:1161 msgid "ignoring invalid MAC address" msgstr "ігноруємо некоректну MAC-адресу" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1237 +#: ../libnm-core/nm-keyfile.c:1237 #, c-format msgid "ignoring invalid bond option %s%s%s = %s%s%s: %s" msgstr "ігноруємо некоректний параметр bond %s%s%s = %s%s%s: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1427 +#: ../libnm-core/nm-keyfile.c:1427 msgid "ignoring invalid SSID" msgstr "ігноруємо некоректний SSID" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1445 +#: ../libnm-core/nm-keyfile.c:1445 msgid "ignoring invalid raw password" msgstr "ігноруємо некоректний необроблений пароль" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1586 +#: ../libnm-core/nm-keyfile.c:1586 msgid "invalid key/cert value" msgstr "некоректне значення ключа/сертифіката" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1601 +#: ../libnm-core/nm-keyfile.c:1601 #, c-format msgid "invalid key/cert value path \"%s\"" msgstr "некоректний шлях до ключа/сертифіката, «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1626 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1723 +#: ../libnm-core/nm-keyfile.c:1626 ../libnm-core/nm-keyfile.c:1723 #, c-format msgid "certificate or key file '%s' does not exist" msgstr "файла сертифіката або ключа «%s» не існує" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1639 +#: ../libnm-core/nm-keyfile.c:1639 #, c-format msgid "invalid PKCS#11 URI \"%s\"" msgstr "некоректна адреса PKCS#11 «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1685 +#: ../libnm-core/nm-keyfile.c:1685 msgid "invalid key/cert value data:;base64, is not base64" msgstr "некоректні дані значення ключа/сертифіката data:;base64, не є base64" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1698 +#: ../libnm-core/nm-keyfile.c:1698 msgid "invalid key/cert value data:;base64,file://" msgstr "некоректне значення ключа/сертифіката data:;base64,file://" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1739 +#: ../libnm-core/nm-keyfile.c:1739 msgid "invalid key/cert value is not a valid blob" msgstr "" "некоректне значення ключа/сертифіката, не є коректним значення «%s» не є " "коректним великим бінарним об'єктом" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1841 +#: ../libnm-core/nm-keyfile.c:1841 #, c-format msgid "invalid parity value '%s'" msgstr "некоректне значення парності, «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1863 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3336 +#: ../libnm-core/nm-keyfile.c:1863 ../libnm-core/nm-keyfile.c:3336 #, c-format msgid "invalid setting: %s" msgstr "некоректний параметр: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1883 +#: ../libnm-core/nm-keyfile.c:1883 #, c-format msgid "ignoring invalid team configuration: %s" msgstr "ігноруємо некоректне налаштування команди: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1966 +#: ../libnm-core/nm-keyfile.c:1966 #, c-format msgid "invalid qdisc: %s" msgstr "некоректний qdisc: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:2016 +#: ../libnm-core/nm-keyfile.c:2016 #, c-format msgid "invalid tfilter: %s" msgstr "некоректний tfilter: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3161 +#: ../libnm-core/nm-keyfile.c:3161 #, c-format msgid "error loading setting value: %s" msgstr "помилка під час завантаження значення параметра: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3192 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3204 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3223 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3235 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3247 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3309 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3321 +#: ../libnm-core/nm-keyfile.c:3192 ../libnm-core/nm-keyfile.c:3204 +#: ../libnm-core/nm-keyfile.c:3223 ../libnm-core/nm-keyfile.c:3235 +#: ../libnm-core/nm-keyfile.c:3247 ../libnm-core/nm-keyfile.c:3309 +#: ../libnm-core/nm-keyfile.c:3321 msgid "value cannot be interpreted as integer" msgstr "значення не може бути оброблено як ціле число" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3277 +#: ../libnm-core/nm-keyfile.c:3277 #, c-format msgid "ignoring invalid byte element '%u' (not between 0 and 255 inclusive)" msgstr "" "ігноруємо некоректний байтовий елемент «%u» (не у діапазоні від 0 до 255, " "включно)" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3361 +#: ../libnm-core/nm-keyfile.c:3361 #, c-format msgid "invalid setting name '%s'" msgstr "некоректна назва параметра, «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3408 +#: ../libnm-core/nm-keyfile.c:3408 #, c-format msgid "invalid key '%s.%s'" msgstr "некоректний ключ «%s.%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3424 +#: ../libnm-core/nm-keyfile.c:3424 #, c-format msgid "key '%s.%s' is not boolean" msgstr "ключ «%s.%s» не є булевим значенням" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3441 +#: ../libnm-core/nm-keyfile.c:3441 #, c-format msgid "key '%s.%s' is not a uint32" msgstr "ключ «%s.%s» не є значенням uint32" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3498 +#: ../libnm-core/nm-keyfile.c:3498 #, c-format msgid "invalid peer public key in section '%s'" msgstr "некоректний відкритий ключ вузла у розділі «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3513 +#: ../libnm-core/nm-keyfile.c:3513 #, c-format msgid "key '%s.%s' is not a valid 256 bit key in base64 encoding" msgstr "ключ «%s.%s» не є коректним 256-бітовим ключем у кодуванні base64" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3536 +#: ../libnm-core/nm-keyfile.c:3536 #, c-format msgid "key '%s.%s' is not a valid secret flag" msgstr "ключ «%s.%s» не є коректним прапорцем реєстраційних даних" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3559 +#: ../libnm-core/nm-keyfile.c:3559 #, c-format msgid "key '%s.%s' is not a integer in range 0 to 2^32" msgstr "ключ «%s.%s» не є цілими числом у діапазоні від 0 до 2^32" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3575 +#: ../libnm-core/nm-keyfile.c:3575 #, c-format msgid "key '%s.%s' is not a valid endpoint" msgstr "ключ «%s.%s» не є коректною кінцевою точкою" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3601 +#: ../libnm-core/nm-keyfile.c:3601 #, c-format msgid "key '%s.%s' has invalid allowed-ips" msgstr "для ключа «%s.%s» вказано некоректне значення allowed-ips" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3616 +#: ../libnm-core/nm-keyfile.c:3616 #, c-format msgid "peer '%s' is invalid: %s" msgstr "вузол «%s» є некоректним: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:4107 +#: ../libnm-core/nm-keyfile.c:4107 #, c-format msgid "the profile is not valid: %s" msgstr "профіль є некоректним: %s" @@ -12545,7 +12540,7 @@ msgstr "можна вмикати лише для з'єднань Ethernet" #: ../libnm-core/nm-setting-wireless.c:884 #: ../libnm-core/nm-setting-wireless.c:896 #: ../libnm-core/nm-setting-wireless.c:909 ../libnm-core/nm-setting-wpan.c:161 -#: ../libnm-core/nm-utils.c:4541 +#: ../libnm-core/nm-utils.c:4532 msgid "property is invalid" msgstr "властивість є некоректною" @@ -14012,7 +14007,7 @@ msgid "team config is not valid UTF-8" msgstr "файл налаштувань team не є коректними даними у кодуванні UTF-8" #: ../libnm-core/nm-team-utils.c:2396 -#: ../src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c:9939 +#: ../src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c:9941 #, c-format msgid "invalid json" msgstr "некоректний код JSON" @@ -14119,136 +14114,136 @@ msgstr "Підтримки архівів libtool не передбачено (% msgid "Could not find \"%s\" binary" msgstr "Не вдалося знайти виконуваний файл «%s»" -#: ../libnm-core/nm-utils.c:4492 +#: ../libnm-core/nm-utils.c:4483 msgid "unknown secret flags" msgstr "невідомі прапорці реєстраційних даних" -#: ../libnm-core/nm-utils.c:4502 +#: ../libnm-core/nm-utils.c:4493 msgid "conflicting secret flags" msgstr "конфлікт прапорців реєстраційних даних" -#: ../libnm-core/nm-utils.c:4513 +#: ../libnm-core/nm-utils.c:4504 msgid "secret flags must not be \"not-required\"" msgstr "прапорці реєстраційних даних не можуть бути «not-required»" -#: ../libnm-core/nm-utils.c:4521 +#: ../libnm-core/nm-utils.c:4512 msgid "unsupported secret flags" msgstr "непідтримувані прапорці реєстраційних даних" -#: ../libnm-core/nm-utils.c:4551 +#: ../libnm-core/nm-utils.c:4542 msgid "can't be simultaneously disabled and enabled" msgstr "не може бути одночасно вимкнено і увімкнено" -#: ../libnm-core/nm-utils.c:4559 +#: ../libnm-core/nm-utils.c:4550 msgid "WPS is required" msgstr "Потрібна WPS" -#: ../libnm-core/nm-utils.c:4627 +#: ../libnm-core/nm-utils.c:4618 #, c-format msgid "not a valid ethernet MAC address for mask at position %lld" msgstr "некоректна адреса MAC ethernet для маски у позиції %lld" -#: ../libnm-core/nm-utils.c:4646 +#: ../libnm-core/nm-utils.c:4637 #, c-format msgid "not a valid ethernet MAC address #%u at position %lld" msgstr "некоректна адреса MAC ethernet #%u у позиції %lld" -#: ../libnm-core/nm-utils.c:5301 +#: ../libnm-core/nm-utils.c:5292 msgid "not valid utf-8" msgstr "некоректні дані UTF-8" -#: ../libnm-core/nm-utils.c:5322 ../libnm-core/nm-utils.c:5375 +#: ../libnm-core/nm-utils.c:5313 ../libnm-core/nm-utils.c:5366 msgid "is not a JSON object" msgstr "не є об'єктом JSON" -#: ../libnm-core/nm-utils.c:5351 +#: ../libnm-core/nm-utils.c:5342 msgid "value is NULL" msgstr "значенням є NULL" -#: ../libnm-core/nm-utils.c:5351 +#: ../libnm-core/nm-utils.c:5342 msgid "value is empty" msgstr "порожнє значення" -#: ../libnm-core/nm-utils.c:5363 +#: ../libnm-core/nm-utils.c:5354 #, c-format msgid "invalid JSON at position %d (%s)" msgstr "некоректний код JSON на позиції %d (%s)" -#: ../libnm-core/nm-utils.c:5493 ../libnm-core/nm-utils.c:5513 +#: ../libnm-core/nm-utils.c:5484 ../libnm-core/nm-utils.c:5504 msgid "unterminated escape sequence" msgstr "незавершена екранована послідовність" -#: ../libnm-core/nm-utils.c:5539 +#: ../libnm-core/nm-utils.c:5530 #, c-format msgid "unknown attribute '%s'" msgstr "невідомий атрибут «%s»" -#: ../libnm-core/nm-utils.c:5557 +#: ../libnm-core/nm-utils.c:5548 #, c-format msgid "missing key-value separator '%c' after '%s'" msgstr "пропущено роздільник пар ключ-значення «%c» після «%s»" -#: ../libnm-core/nm-utils.c:5577 +#: ../libnm-core/nm-utils.c:5568 #, c-format msgid "invalid uint32 value '%s' for attribute '%s'" msgstr "некоректне значення uint32 «%s» атрибута «%s»" -#: ../libnm-core/nm-utils.c:5591 +#: ../libnm-core/nm-utils.c:5582 #, c-format msgid "invalid int32 value '%s' for attribute '%s'" msgstr "некоректне значення int32 «%s» атрибута «%s»" -#: ../libnm-core/nm-utils.c:5604 +#: ../libnm-core/nm-utils.c:5595 #, c-format msgid "invalid uint64 value '%s' for attribute '%s'" msgstr "некоректне значення uint64 «%s» атрибута «%s»" -#: ../libnm-core/nm-utils.c:5617 +#: ../libnm-core/nm-utils.c:5608 #, c-format msgid "invalid uint8 value '%s' for attribute '%s'" msgstr "некоректне значення uint8 «%s» атрибута «%s»" -#: ../libnm-core/nm-utils.c:5631 +#: ../libnm-core/nm-utils.c:5622 #, c-format msgid "invalid boolean value '%s' for attribute '%s'" msgstr "некоректне булеве значення «%s» атрибута «%s»" -#: ../libnm-core/nm-utils.c:5645 +#: ../libnm-core/nm-utils.c:5636 #, c-format msgid "unsupported attribute '%s' of type '%s'" msgstr "непідтримуваний атрибут «%s» типу «%s»" -#: ../libnm-core/nm-utils.c:5947 +#: ../libnm-core/nm-utils.c:5938 #, c-format msgid "Bridge VLANs %d and %d are not sorted by ascending vid" msgstr "VLAN містка %d і %d не упорядковано за зростанням vid" -#: ../libnm-core/nm-utils.c:5971 +#: ../libnm-core/nm-utils.c:5962 #, c-format msgid "duplicate bridge VLAN vid %u" msgstr "дублікат містка vid VLAN %u" -#: ../libnm-core/nm-utils.c:5983 +#: ../libnm-core/nm-utils.c:5974 msgid "only one VLAN can be the PVID" msgstr "лише одна з VLAN може бути PVID" -#: ../libnm-core/nm-utils.c:6028 +#: ../libnm-core/nm-utils.c:6019 #, c-format msgid "unknown flags 0x%x" msgstr "невідомі прапорці 0x%x" -#: ../libnm-core/nm-utils.c:6040 +#: ../libnm-core/nm-utils.c:6031 msgid "" "'fqdn-no-update' and 'fqdn-serv-update' flags cannot be set at the same time" msgstr "" "не можна одночасно встановлювати прапорці «fqdn-no-update» і «fqdn-serv-" "update»" -#: ../libnm-core/nm-utils.c:6051 +#: ../libnm-core/nm-utils.c:6042 msgid "'fqdn-clear-flags' flag is incompatible with other FQDN flags" msgstr "прапорець «fqdn-clear-flags» є несумісним із іншими прапорцями FQDN" -#: ../libnm-core/nm-utils.c:6059 +#: ../libnm-core/nm-utils.c:6050 msgid "DHCPv6 does not support the E (encoded) FQDN flag" msgstr "у DHCPv6 не передбачено підтримки прапорця E (закодовано) FQDN" @@ -14815,36 +14810,36 @@ msgstr "" "Правила системи забороняють вмикання або вимикання перевірки придатності до " "з'єднання" -#: ../shared/nm-glib-aux/nm-shared-utils.c:2350 +#: ../shared/nm-glib-aux/nm-shared-utils.c:2352 #, c-format msgid "object class '%s' has no property named '%s'" msgstr "у класі об'єктів «%s» немає властивості із назвою «%s»" -#: ../shared/nm-glib-aux/nm-shared-utils.c:2359 +#: ../shared/nm-glib-aux/nm-shared-utils.c:2361 #, c-format msgid "property '%s' of object class '%s' is not writable" msgstr "властивість «%s» класу об'єктів «%s» є непридатною до запису" -#: ../shared/nm-glib-aux/nm-shared-utils.c:2368 +#: ../shared/nm-glib-aux/nm-shared-utils.c:2370 #, c-format msgid "" "construct property \"%s\" for object '%s' can't be set after construction" msgstr "" "властивість construct «%s» об'єкта «%s» не можна встановлювати після побудови" -#: ../shared/nm-glib-aux/nm-shared-utils.c:2379 +#: ../shared/nm-glib-aux/nm-shared-utils.c:2381 #, c-format msgid "'%s::%s' is not a valid property name; '%s' is not a GObject subtype" msgstr "«%s::%s» не є коректною назвою властивості; «%s» не є підтипом GObject" -#: ../shared/nm-glib-aux/nm-shared-utils.c:2392 +#: ../shared/nm-glib-aux/nm-shared-utils.c:2394 #, c-format msgid "unable to set property '%s' of type '%s' from value of type '%s'" msgstr "" "не вдалося встановити значення властивості «%s» типу «%s» на основі значення " "типу «%s»" -#: ../shared/nm-glib-aux/nm-shared-utils.c:2404 +#: ../shared/nm-glib-aux/nm-shared-utils.c:2406 #, c-format msgid "" "value \"%s\" of type '%s' is invalid or out of range for property '%s' of " @@ -14853,99 +14848,109 @@ msgstr "" "значення «%s» типу «%s» є некоректним для властивості «%s» типу «%s» або не " "належить до припустимого діапазону значень" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5152 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5204 msgid "interface name is missing" msgstr "пропущено назву інтерфейсу" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5160 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5212 msgid "interface name is too short" msgstr "назва інтерфейсу є надто короткою" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5168 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5220 msgid "interface name is reserved" msgstr "таку назву інтерфейсу зарезервовано" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5181 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5233 msgid "interface name contains an invalid character" msgstr "назва інтерфейсу містить некоректний символ" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5189 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5241 msgid "interface name is longer than 15 characters" msgstr "назва інтерфейсу є довшою за 15 символів" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5214 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5266 #, c-format msgid "'%%' is not allowed in interface names" msgstr "«%%» не можна використовувати у назвах інтерфейсів" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5226 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5278 #, c-format msgid "'%s' is not allowed as interface name" msgstr "«%s» не можна використовувати як назву інтерфейсу" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5248 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5300 msgid "" "interface name must be alphanumerical with no forward or backward slashes" msgstr "" "назва інтерфейсу має складатися з літер і цифр без початкового і " "завершального символів похилої риски" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5265 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5317 msgid "interface name must not be empty" msgstr "назва інтерфейсу не може бути порожньою" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5273 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5325 msgid "interface name must be UTF-8 encoded" msgstr "назва інтерфейсу має бути набором символів у кодуванні UTF-8" +#: ../shared/nm-log-core/nm-logging.c:251 +#, c-format +msgid "Unknown log level '%s'" +msgstr "Невідомий рівень ведення журналу, «%s»" + +#: ../shared/nm-log-core/nm-logging.c:359 +#, c-format +msgid "Unknown log domain '%s'" +msgstr "Невідомий домен ведення журналу, «%s»" + #. TRANSLATORS: the first %s is a prefix for the connection id, such #. * as "Wired Connection" or "VPN Connection". The %d is a number #. * that is combined with the first argument to create a unique #. * connection id. -#: ../src/NetworkManagerUtils.c:109 +#: ../src/core/NetworkManagerUtils.c:109 #, c-format msgctxt "connection id fallback" msgid "%s %u" msgstr "%s %u" -#: ../src/main.c:163 ../src/main.c:384 +#: ../src/core/main.c:163 ../src/core/main.c:384 #, c-format msgid "Failed to read configuration: %s\n" msgstr "Не вдалося прочитати налаштування: %s\n" -#: ../src/main.c:190 ../src/nm-iface-helper.c:406 +#: ../src/core/main.c:190 ../src/core/nm-iface-helper.c:406 msgid "Print NetworkManager version and exit" msgstr "Вивести дані щодо версії NetworkManager і завершити роботу" -#: ../src/main.c:197 ../src/nm-iface-helper.c:413 +#: ../src/core/main.c:197 ../src/core/nm-iface-helper.c:413 msgid "Don't become a daemon" msgstr "Не переходити у стан фонової служби" -#: ../src/main.c:204 ../src/nm-iface-helper.c:427 +#: ../src/core/main.c:204 ../src/core/nm-iface-helper.c:427 #, c-format msgid "Log level: one of [%s]" msgstr "Рівень докладності журналу: одне з таких значень: [%s]" -#: ../src/main.c:211 ../src/nm-iface-helper.c:434 +#: ../src/core/main.c:211 ../src/core/nm-iface-helper.c:434 #, c-format msgid "Log domains separated by ',': any combination of [%s]" msgstr "" "Список доменів для ведення журналу, відокремлених символом «,»: будь-яка " "комбінація з [%s]" -#: ../src/main.c:218 ../src/nm-iface-helper.c:441 +#: ../src/core/main.c:218 ../src/core/nm-iface-helper.c:441 msgid "Make all warnings fatal" msgstr "Вважати всі попередження помилками" -#: ../src/main.c:225 +#: ../src/core/main.c:225 msgid "Specify the location of a PID file" msgstr "Вказати розташування файла ідентифікатора процесу (PID)" -#: ../src/main.c:239 +#: ../src/core/main.c:239 msgid "Print NetworkManager configuration and exit" msgstr "Вивести дані щодо налаштувань NetworkManager і завершити роботу" -#: ../src/main.c:250 +#: ../src/core/main.c:250 msgid "" "NetworkManager monitors all network connections and automatically\n" "chooses the best connection to use. It also allows the user to\n" @@ -14958,53 +14963,54 @@ msgstr "" "з якими слід пов'язувати картки бездротового доступу на вашому\n" "комп'ютері." -#: ../src/main.c:374 ../src/main-utils.c:284 ../src/nm-iface-helper.c:585 +#: ../src/core/main.c:374 ../src/core/main-utils.c:284 +#: ../src/core/nm-iface-helper.c:585 #, c-format msgid "%s. Please use --help to see a list of valid options.\n" msgstr "" "%s. Щоб ознайомитися зі списком параметрів, скористайтеся параметром --" "help.\n" -#: ../src/main.c:407 ../src/nm-iface-helper.c:599 +#: ../src/core/main.c:407 ../src/core/nm-iface-helper.c:599 #, c-format msgid "Could not daemonize: %s [error %u]\n" msgstr "Не вдалося створити фонову службу: %s [помилка %u]\n" -#: ../src/main-utils.c:87 +#: ../src/core/main-utils.c:87 #, c-format msgid "Opening %s failed: %s\n" msgstr "Помилка під час спроби відкрити %s: %s\n" -#: ../src/main-utils.c:94 +#: ../src/core/main-utils.c:94 #, c-format msgid "Writing to %s failed: %s\n" msgstr "Помилка під час спроби запису даних до %s: %s\n" -#: ../src/main-utils.c:100 +#: ../src/core/main-utils.c:100 #, c-format msgid "Closing %s failed: %s\n" msgstr "Не вдалося завершити роботу %s: %s\n" -#: ../src/main-utils.c:140 ../src/main-utils.c:152 +#: ../src/core/main-utils.c:140 ../src/core/main-utils.c:152 #, c-format msgid "Cannot create '%s': %s" msgstr "Не вдалося створити «%s»: %s" -#: ../src/main-utils.c:207 +#: ../src/core/main-utils.c:207 #, c-format msgid "%s is already running (pid %ld)\n" msgstr "%s вже працює (pid %ld)\n" -#: ../src/main-utils.c:217 +#: ../src/core/main-utils.c:217 #, c-format msgid "You must be root to run %s!\n" msgstr "Для виконання %s потрібно перейти у режим root!\n" -#: ../src/dhcp/nm-dhcp-dhclient-utils.c:316 +#: ../src/core/dhcp/nm-dhcp-dhclient-utils.c:316 msgid "# Created by NetworkManager\n" msgstr "# Створено за допомогою NetworkManager\n" -#: ../src/dhcp/nm-dhcp-dhclient-utils.c:329 +#: ../src/core/dhcp/nm-dhcp-dhclient-utils.c:329 #, c-format msgid "" "# Merged from %s\n" @@ -15013,251 +15019,251 @@ msgstr "" "# Об'єднано з %s\n" "\n" -#: ../src/devices/bluetooth/nm-bluez-manager.c:1325 +#: ../src/core/devices/bluetooth/nm-bluez-manager.c:1325 #, c-format msgid "%s Network" msgstr "Мережа %s" -#: ../src/devices/bluetooth/nm-device-bt.c:301 +#: ../src/core/devices/bluetooth/nm-device-bt.c:301 msgid "PAN requested, but Bluetooth device does not support NAP" msgstr "" "Надіслано запит щодо PAN, але у пристрої Bluetooth не передбачено підтримки " "NAP" -#: ../src/devices/bluetooth/nm-device-bt.c:314 +#: ../src/core/devices/bluetooth/nm-device-bt.c:314 msgid "PAN connections cannot specify GSM, CDMA, or serial settings" msgstr "" "Записи з'єднання PAN не можуть вказувати параметрів GSM, CDMA або " "послідовного пристрою" -#: ../src/devices/bluetooth/nm-device-bt.c:329 +#: ../src/core/devices/bluetooth/nm-device-bt.c:329 msgid "PAN connection" msgstr "З'єднання PAN" -#: ../src/devices/bluetooth/nm-device-bt.c:336 +#: ../src/core/devices/bluetooth/nm-device-bt.c:336 msgid "DUN requested, but Bluetooth device does not support DUN" msgstr "" "Надіслано запит щодо DUN, але у пристрої Bluetooth не передбачено підтримки " "DUN" -#: ../src/devices/bluetooth/nm-device-bt.c:349 +#: ../src/core/devices/bluetooth/nm-device-bt.c:349 msgid "DUN connection must include a GSM or CDMA setting" msgstr "З'єднання DUN має включати параметр GSM або CDMA" -#: ../src/devices/bluetooth/nm-device-bt.c:360 -#: ../src/devices/wwan/nm-modem-broadband.c:821 +#: ../src/core/devices/bluetooth/nm-device-bt.c:360 +#: ../src/core/devices/wwan/nm-modem-broadband.c:821 msgid "GSM connection" msgstr "З'єднання GSM" -#: ../src/devices/bluetooth/nm-device-bt.c:362 -#: ../src/devices/wwan/nm-modem-broadband.c:846 +#: ../src/core/devices/bluetooth/nm-device-bt.c:362 +#: ../src/core/devices/wwan/nm-modem-broadband.c:846 msgid "CDMA connection" msgstr "З'єднання CDMA" -#: ../src/devices/bluetooth/nm-device-bt.c:370 +#: ../src/core/devices/bluetooth/nm-device-bt.c:370 msgid "Unknown/unhandled Bluetooth connection type" msgstr "Невідомий або непридатний тип з'єднання Bluetooth" -#: ../src/devices/bluetooth/nm-device-bt.c:395 +#: ../src/core/devices/bluetooth/nm-device-bt.c:395 msgid "connection does not match device" msgstr "з'єднання не відповідає пристрою" -#: ../src/devices/nm-device-6lowpan.c:190 +#: ../src/core/devices/nm-device-6lowpan.c:190 msgid "6LOWPAN connection" msgstr "З'єднання 6LOWPAN" -#: ../src/devices/nm-device-bond.c:89 +#: ../src/core/devices/nm-device-bond.c:89 msgid "Bond connection" msgstr "Прив'язане з'єднання" -#: ../src/devices/nm-device-bridge.c:155 +#: ../src/core/devices/nm-device-bridge.c:155 msgid "Bridge connection" msgstr "З'єднання містка" -#: ../src/devices/nm-device-dummy.c:58 +#: ../src/core/devices/nm-device-dummy.c:58 msgid "Dummy connection" msgstr "Фіктивне з'єднання" -#: ../src/devices/nm-device-ethernet.c:1621 +#: ../src/core/devices/nm-device-ethernet.c:1677 msgid "PPPoE connection" msgstr "З'єднання PPPoE" -#: ../src/devices/nm-device-ethernet.c:1621 +#: ../src/core/devices/nm-device-ethernet.c:1677 msgid "Wired connection" msgstr "Дротове з'єднання" -#: ../src/devices/nm-device-ethernet-utils.c:20 +#: ../src/core/devices/nm-device-ethernet-utils.c:20 #, c-format msgid "Wired connection %d" msgstr "Дротове з'єднання %d" -#: ../src/devices/nm-device-ip-tunnel.c:399 +#: ../src/core/devices/nm-device-ip-tunnel.c:399 msgid "IP tunnel connection" msgstr "З'єднання IP-тунель" -#: ../src/devices/nm-device-macvlan.c:389 +#: ../src/core/devices/nm-device-macvlan.c:389 msgid "MACVLAN connection" msgstr "З'єднання MACVLAN" -#: ../src/devices/nm-device-tun.c:144 +#: ../src/core/devices/nm-device-tun.c:144 msgid "TUN connection" msgstr "З'єднання TUN" -#: ../src/devices/nm-device-wpan.c:54 +#: ../src/core/devices/nm-device-wpan.c:54 msgid "WPAN connection" msgstr "З'єднання WPAN" -#: ../src/devices/team/nm-device-team.c:88 +#: ../src/core/devices/team/nm-device-team.c:88 msgid "Team connection" msgstr "Командне з'єднання" -#: ../src/devices/wifi/nm-wifi-utils.c:28 +#: ../src/core/devices/wifi/nm-wifi-utils.c:28 #, c-format msgid "%s is incompatible with static WEP keys" msgstr "%s є несумісним зі статичними ключами WEP" -#: ../src/devices/wifi/nm-wifi-utils.c:63 +#: ../src/core/devices/wifi/nm-wifi-utils.c:63 msgid "LEAP authentication requires a LEAP username" msgstr "Для розпізнавання LEAP потрібне ім'я користувача LEAP" -#: ../src/devices/wifi/nm-wifi-utils.c:75 +#: ../src/core/devices/wifi/nm-wifi-utils.c:75 msgid "LEAP username requires 'leap' authentication" msgstr "Ім'я користувача LEAP потребує розпізнавання «leap»" -#: ../src/devices/wifi/nm-wifi-utils.c:90 +#: ../src/core/devices/wifi/nm-wifi-utils.c:90 msgid "LEAP authentication requires IEEE 802.1x key management" msgstr "Розпізнавання LEAP потребує керування ключами IEEE 802.1x" -#: ../src/devices/wifi/nm-wifi-utils.c:112 +#: ../src/core/devices/wifi/nm-wifi-utils.c:112 msgid "LEAP authentication is incompatible with Ad-Hoc mode" msgstr "Розпізнавання LEAP є несумісним зі спеціальним (Ad-Hoc) режимом" -#: ../src/devices/wifi/nm-wifi-utils.c:124 +#: ../src/core/devices/wifi/nm-wifi-utils.c:124 msgid "LEAP authentication is incompatible with 802.1x setting" msgstr "Розпізнавання LEAP є несумісним із встановленням 802.1x" -#: ../src/devices/wifi/nm-wifi-utils.c:144 +#: ../src/core/devices/wifi/nm-wifi-utils.c:144 #, c-format msgid "a connection using '%s' authentication cannot use WPA key management" msgstr "" "з'єднання, де використовується розпізнавання «%s», не може використовувати " "керування ключами WPA" -#: ../src/devices/wifi/nm-wifi-utils.c:157 +#: ../src/core/devices/wifi/nm-wifi-utils.c:157 #, c-format msgid "a connection using '%s' authentication cannot specify WPA protocols" msgstr "" "з'єднання, де використовується розпізнавання «%s», не може використовувати " "специфічні протоколи WPA" -#: ../src/devices/wifi/nm-wifi-utils.c:175 -#: ../src/devices/wifi/nm-wifi-utils.c:194 +#: ../src/core/devices/wifi/nm-wifi-utils.c:175 +#: ../src/core/devices/wifi/nm-wifi-utils.c:194 #, c-format msgid "a connection using '%s' authentication cannot specify WPA ciphers" msgstr "" "з'єднання, де використовується розпізнавання «%s», не може використовувати " "специфічні шифри WPA" -#: ../src/devices/wifi/nm-wifi-utils.c:208 +#: ../src/core/devices/wifi/nm-wifi-utils.c:208 #, c-format msgid "a connection using '%s' authentication cannot specify a WPA password" msgstr "" "з'єднання, де використовується розпізнавання «%s», не може використовувати " "специфічний пароль WPA" -#: ../src/devices/wifi/nm-wifi-utils.c:241 +#: ../src/core/devices/wifi/nm-wifi-utils.c:241 msgid "Dynamic WEP requires an 802.1x setting" msgstr "Динамічний WEP потребує встановлення параметра 802.1x" -#: ../src/devices/wifi/nm-wifi-utils.c:251 -#: ../src/devices/wifi/nm-wifi-utils.c:283 +#: ../src/core/devices/wifi/nm-wifi-utils.c:251 +#: ../src/core/devices/wifi/nm-wifi-utils.c:283 msgid "Dynamic WEP requires 'open' authentication" msgstr "Динамічний WEP потребує розпізнавання «open»" -#: ../src/devices/wifi/nm-wifi-utils.c:268 +#: ../src/core/devices/wifi/nm-wifi-utils.c:268 msgid "Dynamic WEP requires 'ieee8021x' key management" msgstr "Динамічний WEP потребує керування ключами «ieee8021x»" -#: ../src/devices/wifi/nm-wifi-utils.c:319 +#: ../src/core/devices/wifi/nm-wifi-utils.c:319 msgid "WPA-PSK authentication is incompatible with 802.1x" msgstr "Розпізнавання за допомогою WPA-PSK є несумісним з 802.1x" -#: ../src/devices/wifi/nm-wifi-utils.c:329 +#: ../src/core/devices/wifi/nm-wifi-utils.c:329 msgid "WPA-PSK requires 'open' authentication" msgstr "WPA-PSK потребує розпізнавання «open»" -#: ../src/devices/wifi/nm-wifi-utils.c:343 +#: ../src/core/devices/wifi/nm-wifi-utils.c:343 msgid "Access point does not support PSK but setting requires it" msgstr "" "У точці доступу не передбачено підтримки PSK, але параметром передбачено " "таку підтримку" -#: ../src/devices/wifi/nm-wifi-utils.c:358 +#: ../src/core/devices/wifi/nm-wifi-utils.c:358 msgid "WPA Ad-Hoc authentication requires 'rsn' protocol" msgstr "Розпізнавання за спеціальним WPA потребує протоколу «rsn»" -#: ../src/devices/wifi/nm-wifi-utils.c:371 +#: ../src/core/devices/wifi/nm-wifi-utils.c:371 msgid "WPA Ad-Hoc authentication requires 'ccmp' pairwise cipher" msgstr "Розпізнавання за спеціальним WPA потребує парного шифру «ccmp»" -#: ../src/devices/wifi/nm-wifi-utils.c:384 +#: ../src/core/devices/wifi/nm-wifi-utils.c:384 msgid "WPA Ad-Hoc requires 'ccmp' group cipher" msgstr "Спеціальний (Ad-Hoc) режим WPA потребує групового шифрування «ccmp»" -#: ../src/devices/wifi/nm-wifi-utils.c:415 +#: ../src/core/devices/wifi/nm-wifi-utils.c:415 msgid "WPA-EAP authentication requires an 802.1x setting" msgstr "Розпізнавання WPA-EAP потребує параметра 802.1x" -#: ../src/devices/wifi/nm-wifi-utils.c:425 +#: ../src/core/devices/wifi/nm-wifi-utils.c:425 msgid "WPA-EAP requires 'open' authentication" msgstr "WPA-EAP потребує розпізнавання «open»" -#: ../src/devices/wifi/nm-wifi-utils.c:438 +#: ../src/core/devices/wifi/nm-wifi-utils.c:438 msgid "802.1x setting requires 'wpa-eap' key management" msgstr "Параметр 802.1x потребує керування ключами «wpa-eap»" -#: ../src/devices/wifi/nm-wifi-utils.c:452 +#: ../src/core/devices/wifi/nm-wifi-utils.c:452 msgid "Access point does not support 802.1x but setting requires it" msgstr "" "У точці доступу не передбачено підтримки 802.1x, але параметром передбачено " "таку підтримку" -#: ../src/devices/wifi/nm-wifi-utils.c:482 +#: ../src/core/devices/wifi/nm-wifi-utils.c:482 msgid "Ad-Hoc mode requires 'none' or 'wpa-psk' key management" msgstr "" "Для ситуативного режиму слід використовувати керування ключами «none» або " "«wpa-psk»" -#: ../src/devices/wifi/nm-wifi-utils.c:494 +#: ../src/core/devices/wifi/nm-wifi-utils.c:494 msgid "Ad-Hoc mode is incompatible with 802.1x security" msgstr "Спеціальний (Ad-Hoc) режим є несумісним із захистом 802.1x" -#: ../src/devices/wifi/nm-wifi-utils.c:503 +#: ../src/core/devices/wifi/nm-wifi-utils.c:503 msgid "Ad-Hoc mode is incompatible with LEAP security" msgstr "Спеціальний (Ad-Hoc) режим є несумісним із захистом LEAP" -#: ../src/devices/wifi/nm-wifi-utils.c:515 +#: ../src/core/devices/wifi/nm-wifi-utils.c:515 msgid "Ad-Hoc mode requires 'open' authentication" msgstr "Для спеціального (Ad-Hoc) режиму потрібне розпізнавання «open»" -#: ../src/devices/wifi/nm-wifi-utils.c:559 -#: ../src/devices/wifi/nm-wifi-utils.c:594 +#: ../src/core/devices/wifi/nm-wifi-utils.c:559 +#: ../src/core/devices/wifi/nm-wifi-utils.c:594 #, c-format msgid "connection does not match access point" msgstr "з'єднання не відповідає точці доступу" -#: ../src/devices/wifi/nm-wifi-utils.c:648 +#: ../src/core/devices/wifi/nm-wifi-utils.c:648 #, c-format msgid "connection does not match mesh point" msgstr "з'єднання не відповідає точці сітки" -#: ../src/devices/wifi/nm-wifi-utils.c:667 +#: ../src/core/devices/wifi/nm-wifi-utils.c:667 msgid "Access point is unencrypted but setting specifies security" msgstr "" "Обмін даними із точкою доступу є незашифрованим, але запис вказує за " "захищене з'єднання" -#: ../src/devices/wifi/nm-wifi-utils.c:758 +#: ../src/core/devices/wifi/nm-wifi-utils.c:758 msgid "" "WPA authentication is incompatible with non-EAP (original) LEAP or Dynamic " "WEP" @@ -15265,158 +15271,158 @@ msgstr "" "Розпізнавання за допомогою WPA є несумісним з LEAP без EAP (оригінальним) " "або динамічним WEP" -#: ../src/devices/wifi/nm-wifi-utils.c:771 +#: ../src/core/devices/wifi/nm-wifi-utils.c:771 msgid "WPA authentication is incompatible with Shared Key authentication" msgstr "" "Розпізнавання за допомогою WPA є несумісним із розпізнаванням за допомогою " "розповсюдженого ключа" -#: ../src/devices/wifi/nm-wifi-utils.c:854 +#: ../src/core/devices/wifi/nm-wifi-utils.c:854 msgid "Failed to determine AP security information" msgstr "Не вдалося визначити дані щодо захисту точки доступу" -#: ../src/nm-config.c:567 +#: ../src/core/nm-config.c:567 #, c-format msgid "Bad '%s' option: " msgstr "Помилковий параметр «%s»: " -#: ../src/nm-config.c:584 +#: ../src/core/nm-config.c:584 msgid "Config file location" msgstr "Розташування файла налаштувань" -#: ../src/nm-config.c:591 +#: ../src/core/nm-config.c:591 msgid "Config directory location" msgstr "Розташування каталогу налаштувань" -#: ../src/nm-config.c:598 +#: ../src/core/nm-config.c:598 msgid "System config directory location" msgstr "Розташування загальносистемного каталогу налаштувань" -#: ../src/nm-config.c:605 +#: ../src/core/nm-config.c:605 msgid "Internal config file location" msgstr "Розташування внутрішнього файла налаштувань" -#: ../src/nm-config.c:612 +#: ../src/core/nm-config.c:612 msgid "State file location" msgstr "Розташування файла стану" -#: ../src/nm-config.c:619 +#: ../src/core/nm-config.c:619 msgid "State file for no-auto-default devices" msgstr "" "Файл станів для пристроїв без автоматичних типових параметрів (no-auto-" "default)" -#: ../src/nm-config.c:626 +#: ../src/core/nm-config.c:626 msgid "List of plugins separated by ','" msgstr "Список додатків, відокремлених комами («,»)" -#: ../src/nm-config.c:633 +#: ../src/core/nm-config.c:633 msgid "Quit after initial configuration" msgstr "Вийти після початкового налаштовування" -#: ../src/nm-config.c:640 ../src/nm-iface-helper.c:420 +#: ../src/core/nm-config.c:640 ../src/core/nm-iface-helper.c:420 msgid "Don't become a daemon, and log to stderr" msgstr "" "Не переходити у стан фонової служби і записувати повідомлення журналу до " "stderr" -#: ../src/nm-config.c:649 +#: ../src/core/nm-config.c:649 msgid "An http(s) address for checking internet connectivity" msgstr "Адреса http(s) для спроб перевірки можливості встановлення з'єднання" -#: ../src/nm-config.c:656 +#: ../src/core/nm-config.c:656 msgid "The interval between connectivity checks (in seconds)" msgstr "Інтервал між перевірками можливості з'єднання (у секундах)" -#: ../src/nm-config.c:663 +#: ../src/core/nm-config.c:663 msgid "The expected start of the response" msgstr "Очікуваний початок відповіді" -#: ../src/nm-config.c:672 +#: ../src/core/nm-config.c:672 msgid "NetworkManager options" msgstr "Параметри NetworkManager" -#: ../src/nm-config.c:673 +#: ../src/core/nm-config.c:673 msgid "Show NetworkManager options" msgstr "Показати параметри NetworkManager" -#: ../src/nm-iface-helper.c:292 +#: ../src/core/nm-iface-helper.c:292 msgid "The interface to manage" msgstr "Інтерфейс для керування" -#: ../src/nm-iface-helper.c:299 +#: ../src/core/nm-iface-helper.c:299 msgid "Connection UUID" msgstr "UUID з'єднання" -#: ../src/nm-iface-helper.c:306 +#: ../src/core/nm-iface-helper.c:306 msgid "Connection Token for Stable IDs" msgstr "Жетон з'єднання для стабільних ідентифікаторів" -#: ../src/nm-iface-helper.c:313 +#: ../src/core/nm-iface-helper.c:313 msgid "Whether to manage IPv6 SLAAC" msgstr "Чи слід керувати SLAAC IPv6" -#: ../src/nm-iface-helper.c:320 +#: ../src/core/nm-iface-helper.c:320 msgid "Whether SLAAC must be successful" msgstr "Чи має бути SLAAC успішним" -#: ../src/nm-iface-helper.c:327 +#: ../src/core/nm-iface-helper.c:327 msgid "Use an IPv6 temporary privacy address" msgstr "Використовувати тимчасову приватну адресу IPv6" -#: ../src/nm-iface-helper.c:334 +#: ../src/core/nm-iface-helper.c:334 msgid "Current DHCPv4 address" msgstr "Поточна адреса DHCPv4" -#: ../src/nm-iface-helper.c:341 +#: ../src/core/nm-iface-helper.c:341 msgid "Whether DHCPv4 must be successful" msgstr "Чи має DHCPv4 бути успішним" -#: ../src/nm-iface-helper.c:348 +#: ../src/core/nm-iface-helper.c:348 msgid "Hex-encoded DHCPv4 client ID" msgstr "Закодований у шістнадцяткову форму ідентифікатор клієнта DHCPv4" -#: ../src/nm-iface-helper.c:355 +#: ../src/core/nm-iface-helper.c:355 msgid "Hostname to send to DHCP server" msgstr "Назва вузла для надсилання на сервер DHCP" -#: ../src/nm-iface-helper.c:356 +#: ../src/core/nm-iface-helper.c:356 msgid "barbar" msgstr "щосьщось" -#: ../src/nm-iface-helper.c:362 +#: ../src/core/nm-iface-helper.c:362 msgid "FQDN to send to DHCP server" msgstr "Повна назва вузла (FQDN) для надсилання на сервер DHCP" -#: ../src/nm-iface-helper.c:363 +#: ../src/core/nm-iface-helper.c:363 msgid "host.domain.org" msgstr "вузол.домен.org" -#: ../src/nm-iface-helper.c:369 +#: ../src/core/nm-iface-helper.c:369 msgid "Route priority for IPv4" msgstr "Пріоритет маршруту для IPv4" -#: ../src/nm-iface-helper.c:370 +#: ../src/core/nm-iface-helper.c:370 msgid "0" msgstr "0" -#: ../src/nm-iface-helper.c:376 +#: ../src/core/nm-iface-helper.c:376 msgid "Route priority for IPv6" msgstr "Пріоритет маршруту для IPv6" -#: ../src/nm-iface-helper.c:377 +#: ../src/core/nm-iface-helper.c:377 msgid "1024" msgstr "1024" -#: ../src/nm-iface-helper.c:383 +#: ../src/core/nm-iface-helper.c:383 msgid "Hex-encoded Interface Identifier" msgstr "Закодований у шістнадцяткове число ідентифікатор інтерфейсу" -#: ../src/nm-iface-helper.c:390 +#: ../src/core/nm-iface-helper.c:390 msgid "IPv6 SLAAC address generation mode" msgstr "Режим створення адреси SLAAC IPv6" -#: ../src/nm-iface-helper.c:397 +#: ../src/core/nm-iface-helper.c:397 msgid "" "The logging backend configuration value. See logging.backend in " "NetworkManager.conf" @@ -15424,7 +15430,7 @@ msgstr "" "Значення налаштування модуля ведення журналу. Див. logging.backend у " "NetworkManager.conf" -#: ../src/nm-iface-helper.c:451 +#: ../src/core/nm-iface-helper.c:451 msgid "" "nm-iface-helper is a small, standalone process that manages a single network " "interface." @@ -15432,39 +15438,29 @@ msgstr "" "nm-iface-helper — малий окремий процес, який керує окремим інтерфейсом " "мережі." -#: ../src/nm-iface-helper.c:562 +#: ../src/core/nm-iface-helper.c:562 #, c-format msgid "An interface name and UUID are required\n" msgstr "Потрібні назва і UUID інтерфейсу\n" -#: ../src/nm-iface-helper.c:570 +#: ../src/core/nm-iface-helper.c:570 #, c-format msgid "Failed to find interface index for %s (%s)\n" msgstr "Не вдалося знайти покажчик інтерфейсу для %s (%s)\n" -#: ../src/nm-iface-helper.c:590 +#: ../src/core/nm-iface-helper.c:590 #, c-format msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n" msgstr "" "Ігноруємо нерозпізнані домени журналювання, «%s», передані за допомогою " "командного рядка.\n" -#: ../src/nm-iface-helper.c:636 +#: ../src/core/nm-iface-helper.c:636 #, c-format msgid "(%s): Invalid IID %s\n" msgstr "(%s): некоректний IID %s\n" -#: ../src/nm-iface-helper.c:648 +#: ../src/core/nm-iface-helper.c:648 #, c-format msgid "(%s): Invalid DHCP client-id %s\n" msgstr "(%s): некоректний ідентифікатор клієнта DHCP %s\n" - -#: ../src/nm-logging.c:252 -#, c-format -msgid "Unknown log level '%s'" -msgstr "Невідомий рівень ведення журналу, «%s»" - -#: ../src/nm-logging.c:360 -#, c-format -msgid "Unknown log domain '%s'" -msgstr "Невідомий домен ведення журналу, «%s»" diff --git a/shared/meson.build b/shared/meson.build index 86a50dd..52eb6b9 100644 --- a/shared/meson.build +++ b/shared/meson.build @@ -94,14 +94,6 @@ libn_dhcp4_dep = declare_dependency( link_with: libn_dhcp4, ) -nm_version_macro_header = configure_file( - input: 'nm-version-macros.h.in', - output: '@BASENAME@', - configuration: data_conf, -) - -nm_meta_setting_source = files('nm-meta-setting.c') - nm_test_utils_impl_source = files('nm-test-utils-impl.c') nm_vpn_plugin_utils_source = files('nm-utils/nm-vpn-plugin-utils.c') @@ -114,8 +106,7 @@ libnm_std_aux = static_library( ], include_directories: top_inc, c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=0', + '-DG_LOG_DOMAIN="libnm"', ], ) @@ -139,8 +130,7 @@ libnm_glib_aux = static_library( ), dependencies: glib_nm_default_dep, c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)', + '-DG_LOG_DOMAIN="libnm"', ], link_with: [ libc_siphash, @@ -161,8 +151,7 @@ libnm_udev_aux = static_library( libudev_dep, ], c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)', + '-DG_LOG_DOMAIN="libnm"', ], ) @@ -178,8 +167,7 @@ libnm_base = static_library( ), dependencies: libnm_glib_aux_dep, c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)', + '-DG_LOG_DOMAIN="libnm"', ], ) @@ -198,7 +186,6 @@ libnm_log_core = static_library( ], c_args: [ '-DG_LOG_DOMAIN="NetworkManager"', - '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)', ], ) @@ -222,7 +209,6 @@ libnm_platform = static_library( ], c_args: [ '-DG_LOG_DOMAIN="NetworkManager"', - '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)', ], ) @@ -283,8 +269,7 @@ libnm_systemd_shared = static_library( ), dependencies: glib_nm_default_dep, c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD_SHARED', + '-DG_LOG_DOMAIN="libnm"', ], ) @@ -303,8 +288,7 @@ libnm_systemd_logging_stub = static_library( sources: 'systemd/nm-logging-stub.c', dependencies: glib_nm_default_dep, c_args: [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD_SHARED', + '-DG_LOG_DOMAIN="libnm"', ], ) diff --git a/shared/nm-base/nm-base.h b/shared/nm-base/nm-base.h index 1db21ae..105d178 100644 --- a/shared/nm-base/nm-base.h +++ b/shared/nm-base/nm-base.h @@ -54,6 +54,7 @@ typedef enum { NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD, NM_ETHTOOL_ID_FEATURE_LOOPBACK, NM_ETHTOOL_ID_FEATURE_LRO, + NM_ETHTOOL_ID_FEATURE_MACSEC_HW_OFFLOAD, NM_ETHTOOL_ID_FEATURE_NTUPLE, NM_ETHTOOL_ID_FEATURE_RX, NM_ETHTOOL_ID_FEATURE_RXHASH, @@ -61,12 +62,15 @@ typedef enum { NM_ETHTOOL_ID_FEATURE_RX_ALL, NM_ETHTOOL_ID_FEATURE_RX_FCS, NM_ETHTOOL_ID_FEATURE_RX_GRO_HW, + NM_ETHTOOL_ID_FEATURE_RX_GRO_LIST, + NM_ETHTOOL_ID_FEATURE_RX_UDP_GRO_FORWARDING, NM_ETHTOOL_ID_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD, NM_ETHTOOL_ID_FEATURE_RX_VLAN_FILTER, NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_FILTER, NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_HW_PARSE, NM_ETHTOOL_ID_FEATURE_SG, NM_ETHTOOL_ID_FEATURE_TLS_HW_RECORD, + NM_ETHTOOL_ID_FEATURE_TLS_HW_RX_OFFLOAD, NM_ETHTOOL_ID_FEATURE_TLS_HW_TX_OFFLOAD, NM_ETHTOOL_ID_FEATURE_TSO, NM_ETHTOOL_ID_FEATURE_TX, @@ -80,6 +84,7 @@ typedef enum { NM_ETHTOOL_ID_FEATURE_TX_FCOE_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_GRE_CSUM_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_GRE_SEGMENTATION, + NM_ETHTOOL_ID_FEATURE_TX_GSO_LIST, NM_ETHTOOL_ID_FEATURE_TX_GSO_PARTIAL, NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST, NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION, @@ -92,6 +97,7 @@ typedef enum { NM_ETHTOOL_ID_FEATURE_TX_TCP_ECN_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_TCP_MANGLEID_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_TCP_SEGMENTATION, + NM_ETHTOOL_ID_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_UDP_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION, diff --git a/shared/nm-base/nm-ethtool-base.c b/shared/nm-base/nm-ethtool-base.c index 9934aa0..52ff287 100644 --- a/shared/nm-base/nm-ethtool-base.c +++ b/shared/nm-base/nm-ethtool-base.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-ethtool-base.h" @@ -51,6 +51,7 @@ const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1] = { ETHT_DATA(FEATURE_L2_FWD_OFFLOAD), ETHT_DATA(FEATURE_LOOPBACK), ETHT_DATA(FEATURE_LRO), + ETHT_DATA(FEATURE_MACSEC_HW_OFFLOAD), ETHT_DATA(FEATURE_NTUPLE), ETHT_DATA(FEATURE_RX), ETHT_DATA(FEATURE_RXHASH), @@ -58,12 +59,15 @@ const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1] = { ETHT_DATA(FEATURE_RX_ALL), ETHT_DATA(FEATURE_RX_FCS), ETHT_DATA(FEATURE_RX_GRO_HW), + ETHT_DATA(FEATURE_RX_GRO_LIST), + ETHT_DATA(FEATURE_RX_UDP_GRO_FORWARDING), ETHT_DATA(FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD), ETHT_DATA(FEATURE_RX_VLAN_FILTER), ETHT_DATA(FEATURE_RX_VLAN_STAG_FILTER), ETHT_DATA(FEATURE_RX_VLAN_STAG_HW_PARSE), ETHT_DATA(FEATURE_SG), ETHT_DATA(FEATURE_TLS_HW_RECORD), + ETHT_DATA(FEATURE_TLS_HW_RX_OFFLOAD), ETHT_DATA(FEATURE_TLS_HW_TX_OFFLOAD), ETHT_DATA(FEATURE_TSO), ETHT_DATA(FEATURE_TX), @@ -77,6 +81,7 @@ const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1] = { ETHT_DATA(FEATURE_TX_FCOE_SEGMENTATION), ETHT_DATA(FEATURE_TX_GRE_CSUM_SEGMENTATION), ETHT_DATA(FEATURE_TX_GRE_SEGMENTATION), + ETHT_DATA(FEATURE_TX_GSO_LIST), ETHT_DATA(FEATURE_TX_GSO_PARTIAL), ETHT_DATA(FEATURE_TX_GSO_ROBUST), ETHT_DATA(FEATURE_TX_IPXIP4_SEGMENTATION), @@ -89,6 +94,7 @@ const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1] = { ETHT_DATA(FEATURE_TX_TCP_ECN_SEGMENTATION), ETHT_DATA(FEATURE_TX_TCP_MANGLEID_SEGMENTATION), ETHT_DATA(FEATURE_TX_TCP_SEGMENTATION), + ETHT_DATA(FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION), ETHT_DATA(FEATURE_TX_UDP_SEGMENTATION), ETHT_DATA(FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION), ETHT_DATA(FEATURE_TX_UDP_TNL_SEGMENTATION), @@ -134,11 +140,14 @@ static const guint8 _by_name[_NM_ETHTOOL_ID_NUM] = { NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD, NM_ETHTOOL_ID_FEATURE_LOOPBACK, NM_ETHTOOL_ID_FEATURE_LRO, + NM_ETHTOOL_ID_FEATURE_MACSEC_HW_OFFLOAD, NM_ETHTOOL_ID_FEATURE_NTUPLE, NM_ETHTOOL_ID_FEATURE_RX, NM_ETHTOOL_ID_FEATURE_RX_ALL, NM_ETHTOOL_ID_FEATURE_RX_FCS, NM_ETHTOOL_ID_FEATURE_RX_GRO_HW, + NM_ETHTOOL_ID_FEATURE_RX_GRO_LIST, + NM_ETHTOOL_ID_FEATURE_RX_UDP_GRO_FORWARDING, NM_ETHTOOL_ID_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD, NM_ETHTOOL_ID_FEATURE_RX_VLAN_FILTER, NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_FILTER, @@ -147,6 +156,7 @@ static const guint8 _by_name[_NM_ETHTOOL_ID_NUM] = { NM_ETHTOOL_ID_FEATURE_RXVLAN, NM_ETHTOOL_ID_FEATURE_SG, NM_ETHTOOL_ID_FEATURE_TLS_HW_RECORD, + NM_ETHTOOL_ID_FEATURE_TLS_HW_RX_OFFLOAD, NM_ETHTOOL_ID_FEATURE_TLS_HW_TX_OFFLOAD, NM_ETHTOOL_ID_FEATURE_TSO, NM_ETHTOOL_ID_FEATURE_TX, @@ -159,6 +169,7 @@ static const guint8 _by_name[_NM_ETHTOOL_ID_NUM] = { NM_ETHTOOL_ID_FEATURE_TX_FCOE_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_GRE_CSUM_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_GRE_SEGMENTATION, + NM_ETHTOOL_ID_FEATURE_TX_GSO_LIST, NM_ETHTOOL_ID_FEATURE_TX_GSO_PARTIAL, NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST, NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION, @@ -171,6 +182,7 @@ static const guint8 _by_name[_NM_ETHTOOL_ID_NUM] = { NM_ETHTOOL_ID_FEATURE_TX_TCP_MANGLEID_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_TCP_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_TCP6_SEGMENTATION, + NM_ETHTOOL_ID_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_UDP_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION, NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION, diff --git a/shared/nm-base/nm-ethtool-utils-base.h b/shared/nm-base/nm-ethtool-utils-base.h index e8df3da..d422724 100644 --- a/shared/nm-base/nm-ethtool-utils-base.h +++ b/shared/nm-base/nm-ethtool-utils-base.h @@ -20,6 +20,7 @@ G_BEGIN_DECLS #define NM_ETHTOOL_OPTNAME_FEATURE_L2_FWD_OFFLOAD "feature-l2-fwd-offload" #define NM_ETHTOOL_OPTNAME_FEATURE_LOOPBACK "feature-loopback" #define NM_ETHTOOL_OPTNAME_FEATURE_LRO "feature-lro" +#define NM_ETHTOOL_OPTNAME_FEATURE_MACSEC_HW_OFFLOAD "feature-macsec-hw-offload" #define NM_ETHTOOL_OPTNAME_FEATURE_NTUPLE "feature-ntuple" #define NM_ETHTOOL_OPTNAME_FEATURE_RX "feature-rx" #define NM_ETHTOOL_OPTNAME_FEATURE_RXHASH "feature-rxhash" @@ -27,12 +28,15 @@ G_BEGIN_DECLS #define NM_ETHTOOL_OPTNAME_FEATURE_RX_ALL "feature-rx-all" #define NM_ETHTOOL_OPTNAME_FEATURE_RX_FCS "feature-rx-fcs" #define NM_ETHTOOL_OPTNAME_FEATURE_RX_GRO_HW "feature-rx-gro-hw" +#define NM_ETHTOOL_OPTNAME_FEATURE_RX_GRO_LIST "feature-rx-gro-list" +#define NM_ETHTOOL_OPTNAME_FEATURE_RX_UDP_GRO_FORWARDING "feature-rx-udp-gro-forwarding" #define NM_ETHTOOL_OPTNAME_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD "feature-rx-udp_tunnel-port-offload" #define NM_ETHTOOL_OPTNAME_FEATURE_RX_VLAN_FILTER "feature-rx-vlan-filter" #define NM_ETHTOOL_OPTNAME_FEATURE_RX_VLAN_STAG_FILTER "feature-rx-vlan-stag-filter" #define NM_ETHTOOL_OPTNAME_FEATURE_RX_VLAN_STAG_HW_PARSE "feature-rx-vlan-stag-hw-parse" #define NM_ETHTOOL_OPTNAME_FEATURE_SG "feature-sg" #define NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_RECORD "feature-tls-hw-record" +#define NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_RX_OFFLOAD "feature-tls-hw-rx-offload" #define NM_ETHTOOL_OPTNAME_FEATURE_TLS_HW_TX_OFFLOAD "feature-tls-hw-tx-offload" #define NM_ETHTOOL_OPTNAME_FEATURE_TSO "feature-tso" #define NM_ETHTOOL_OPTNAME_FEATURE_TX "feature-tx" @@ -46,6 +50,7 @@ G_BEGIN_DECLS #define NM_ETHTOOL_OPTNAME_FEATURE_TX_FCOE_SEGMENTATION "feature-tx-fcoe-segmentation" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_CSUM_SEGMENTATION "feature-tx-gre-csum-segmentation" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_SEGMENTATION "feature-tx-gre-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_LIST "feature-tx-gso-list" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_PARTIAL "feature-tx-gso-partial" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_ROBUST "feature-tx-gso-robust" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_IPXIP4_SEGMENTATION "feature-tx-ipxip4-segmentation" @@ -59,6 +64,8 @@ G_BEGIN_DECLS #define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_MANGLEID_SEGMENTATION \ "feature-tx-tcp-mangleid-segmentation" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_SEGMENTATION "feature-tx-tcp-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION \ + "feature-tx-tunnel-remcsum-segmentation" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_SEGMENTATION "feature-tx-udp-segmentation" #define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION \ "feature-tx-udp_tnl-csum-segmentation" diff --git a/shared/nm-glib-aux/nm-dbus-aux.c b/shared/nm-glib-aux/nm-dbus-aux.c index e4ba523..ec409ff 100644 --- a/shared/nm-glib-aux/nm-dbus-aux.c +++ b/shared/nm-glib-aux/nm-dbus-aux.c @@ -3,7 +3,7 @@ * Copyright (C) 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-dbus-aux.h" diff --git a/shared/nm-glib-aux/nm-dedup-multi.c b/shared/nm-glib-aux/nm-dedup-multi.c index 498e543..99da3b3 100644 --- a/shared/nm-glib-aux/nm-dedup-multi.c +++ b/shared/nm-glib-aux/nm-dedup-multi.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-dedup-multi.h" diff --git a/shared/nm-glib-aux/nm-default-glib-i18n-lib.h b/shared/nm-glib-aux/nm-default-glib-i18n-lib.h new file mode 100644 index 0000000..9393d19 --- /dev/null +++ b/shared/nm-glib-aux/nm-default-glib-i18n-lib.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_DEFAULT_GLIB_I18N_LIB_H__ +#define __NM_DEFAULT_GLIB_I18N_LIB_H__ + +/*****************************************************************************/ + +#define _NETWORKMANAGER_COMPILATION_GLIB_I18N_LIB + +#include "nm-glib-aux/nm-default-glib.h" + +#undef NETWORKMANAGER_COMPILATION +#define NETWORKMANAGER_COMPILATION \ + (NM_NETWORKMANAGER_COMPILATION_GLIB | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB) + +/*****************************************************************************/ + +#endif /* __NM_DEFAULT_GLIB_I18N_LIB_H__ */ diff --git a/shared/nm-glib-aux/nm-default-glib-i18n-prog.h b/shared/nm-glib-aux/nm-default-glib-i18n-prog.h new file mode 100644 index 0000000..0abe807 --- /dev/null +++ b/shared/nm-glib-aux/nm-default-glib-i18n-prog.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_DEFAULT_GLIB_I18N_PROG_H__ +#define __NM_DEFAULT_GLIB_I18N_PROG_H__ + +/*****************************************************************************/ + +#define _NETWORKMANAGER_COMPILATION_GLIB_I18N_PROG + +#include "nm-glib-aux/nm-default-glib.h" + +#undef NETWORKMANAGER_COMPILATION +#define NETWORKMANAGER_COMPILATION \ + (NM_NETWORKMANAGER_COMPILATION_GLIB | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG) + +/*****************************************************************************/ + +#endif /* __NM_DEFAULT_GLIB_I18N_PROG_H__ */ diff --git a/shared/nm-glib-aux/nm-default-glib.h b/shared/nm-glib-aux/nm-default-glib.h new file mode 100644 index 0000000..34b23f7 --- /dev/null +++ b/shared/nm-glib-aux/nm-default-glib.h @@ -0,0 +1,75 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_DEFAULT_GLIB_H__ +#define __NM_DEFAULT_GLIB_H__ + +/*****************************************************************************/ + +#include "nm-std-aux/nm-default-std.h" + +#undef NETWORKMANAGER_COMPILATION +#define NETWORKMANAGER_COMPILATION NM_NETWORKMANAGER_COMPILATION_WITH_GLIB + +/*****************************************************************************/ + +#include + +#if defined(_NETWORKMANAGER_COMPILATION_GLIB_I18N_PROG) + #if defined(_NETWORKMANAGER_COMPILATION_GLIB_I18N_LIB) + #error Cannot define _NETWORKMANAGER_COMPILATION_GLIB_I18N_LIB and _NETWORKMANAGER_COMPILATION_GLIB_I18N_PROG together + #endif + #undef _NETWORKMANAGER_COMPILATION_GLIB_I18N_PROG + #include +#elif defined(_NETWORKMANAGER_COMPILATION_GLIB_I18N_LIB) + #undef _NETWORKMANAGER_COMPILATION_GLIB_I18N_LIB + #include +#endif + +/*****************************************************************************/ + +#if NM_MORE_ASSERTS == 0 + #ifndef G_DISABLE_CAST_CHECKS + /* Unless compiling with G_DISABLE_CAST_CHECKS, glib performs type checking + * during G_VARIANT_TYPE() via g_variant_type_checked_(). This is not necessary + * because commonly this cast is needed during something like + * + * g_variant_builder_init (&props, G_VARIANT_TYPE ("a{sv}")); + * + * Note that in if the variant type would be invalid, the check still + * wouldn't make the buggy code magically work. Instead of passing a + * bogus type string (bad), it would pass %NULL to g_variant_builder_init() + * (also bad). + * + * Also, a function like g_variant_builder_init() already validates + * the input type via something like + * + * g_return_if_fail (g_variant_type_is_container (type)); + * + * So, by having G_VARIANT_TYPE() also validate the type, we validate + * twice, whereas the first validation is rather pointless because it + * doesn't prevent the function to be called with invalid arguments. + * + * Just patch G_VARIANT_TYPE() to perform no check. + */ + #undef G_VARIANT_TYPE + #define G_VARIANT_TYPE(type_string) ((const GVariantType *) (type_string)) + #endif +#endif + +/*****************************************************************************/ + +#include "nm-gassert-patch.h" + +#include "nm-std-aux/nm-std-aux.h" +#include "nm-std-aux/nm-std-utils.h" +#include "nm-glib-aux/nm-macros-internal.h" +#include "nm-glib-aux/nm-shared-utils.h" +#include "nm-glib-aux/nm-errno.h" +#include "nm-glib-aux/nm-hash-utils.h" + +/*****************************************************************************/ + +#endif /* __NM_DEFAULT_GLIB_H__ */ diff --git a/shared/nm-glib-aux/nm-enum-utils.c b/shared/nm-glib-aux/nm-enum-utils.c index 9b778d6..b06f2bb 100644 --- a/shared/nm-glib-aux/nm-enum-utils.c +++ b/shared/nm-glib-aux/nm-enum-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-enum-utils.h" #include "nm-str-buf.h" diff --git a/shared/nm-glib-aux/nm-errno.c b/shared/nm-glib-aux/nm-errno.c index 37e884c..668606c 100644 --- a/shared/nm-glib-aux/nm-errno.c +++ b/shared/nm-glib-aux/nm-errno.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-errno.h" diff --git a/shared/nm-glib-aux/nm-gassert-patch.h b/shared/nm-glib-aux/nm-gassert-patch.h new file mode 100644 index 0000000..bac8697 --- /dev/null +++ b/shared/nm-glib-aux/nm-gassert-patch.h @@ -0,0 +1,76 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_GASSERT_PATCH_H__ +#define __NM_GASSERT_PATCH_H__ + +/*****************************************************************************/ + +#if NM_MORE_ASSERTS == 0 + +/* glib assertions (g_return_*(), g_assert*()) contain a textual representation + * of the checked statement. This part of the assertion blows up the size of the + * binary. Unless we compile a debug-build with NM_MORE_ASSERTS, drop these + * parts. Note that the failed assertion still prints the file and line where the + * assertion fails. That shall suffice. */ + +static inline void +_nm_g_return_if_fail_warning(const char *log_domain, const char *file, int line) +{ + char file_buf[256 + 15]; + + g_snprintf(file_buf, sizeof(file_buf), "((%s:%d))", file, line); + g_return_if_fail_warning(log_domain, file_buf, ""); +} + + #define g_return_if_fail_warning(log_domain, pretty_function, expression) \ + _nm_g_return_if_fail_warning(log_domain, __FILE__, __LINE__) + + #define g_assertion_message_expr(domain, file, line, func, expr) \ + g_assertion_message_expr(domain, file, line, "", (expr) ? "" : NULL) + + #undef g_return_val_if_reached + #define g_return_val_if_reached(val) \ + G_STMT_START \ + { \ + g_log(G_LOG_DOMAIN, \ + G_LOG_LEVEL_CRITICAL, \ + "file %s: line %d (%s): should not be reached", \ + __FILE__, \ + __LINE__, \ + ""); \ + return (val); \ + } \ + G_STMT_END + + #undef g_return_if_reached + #define g_return_if_reached() \ + G_STMT_START \ + { \ + g_log(G_LOG_DOMAIN, \ + G_LOG_LEVEL_CRITICAL, \ + "file %s: line %d (%s): should not be reached", \ + __FILE__, \ + __LINE__, \ + ""); \ + return; \ + } \ + G_STMT_END +#endif + +/*****************************************************************************/ + +#if NM_MORE_ASSERTS == 0 + #define NM_ASSERT_G_RETURN_EXPR(expr) "" + #define NM_ASSERT_NO_MSG 1 + +#else + #define NM_ASSERT_G_RETURN_EXPR(expr) "" expr "" + #define NM_ASSERT_NO_MSG 0 +#endif + +/*****************************************************************************/ + +#endif /* __NM_GASSERT_PATCH_H__ */ diff --git a/shared/nm-glib-aux/nm-hash-utils.c b/shared/nm-glib-aux/nm-hash-utils.c index ec10184..29349b1 100644 --- a/shared/nm-glib-aux/nm-hash-utils.c +++ b/shared/nm-glib-aux/nm-hash-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-hash-utils.h" diff --git a/shared/nm-glib-aux/nm-io-utils.c b/shared/nm-glib-aux/nm-io-utils.c index 3ccdcd8..429591a 100644 --- a/shared/nm-glib-aux/nm-io-utils.c +++ b/shared/nm-glib-aux/nm-io-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-io-utils.h" diff --git a/shared/nm-glib-aux/nm-json-aux.c b/shared/nm-glib-aux/nm-json-aux.c index 2fa8ee8..97ee606 100644 --- a/shared/nm-glib-aux/nm-json-aux.c +++ b/shared/nm-glib-aux/nm-json-aux.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 - 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-json-aux.h" diff --git a/shared/nm-glib-aux/nm-keyfile-aux.c b/shared/nm-glib-aux/nm-keyfile-aux.c index 7a3ab95..b596271 100644 --- a/shared/nm-glib-aux/nm-keyfile-aux.c +++ b/shared/nm-glib-aux/nm-keyfile-aux.c @@ -3,7 +3,7 @@ * Copyright (C) 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-keyfile-aux.h" diff --git a/shared/nm-glib-aux/nm-logging-base.c b/shared/nm-glib-aux/nm-logging-base.c index 5e11d7e..66b591b 100644 --- a/shared/nm-glib-aux/nm-logging-base.c +++ b/shared/nm-glib-aux/nm-logging-base.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-logging-base.h" diff --git a/shared/nm-glib-aux/nm-random-utils.c b/shared/nm-glib-aux/nm-random-utils.c index 2ab38e4..c95d368 100644 --- a/shared/nm-glib-aux/nm-random-utils.c +++ b/shared/nm-glib-aux/nm-random-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-random-utils.h" diff --git a/shared/nm-glib-aux/nm-ref-string.c b/shared/nm-glib-aux/nm-ref-string.c index aa76582..902f1c8 100644 --- a/shared/nm-glib-aux/nm-ref-string.c +++ b/shared/nm-glib-aux/nm-ref-string.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-ref-string.h" diff --git a/shared/nm-glib-aux/nm-secret-utils.c b/shared/nm-glib-aux/nm-secret-utils.c index d5dd5f8..8188b50 100644 --- a/shared/nm-glib-aux/nm-secret-utils.c +++ b/shared/nm-glib-aux/nm-secret-utils.c @@ -4,7 +4,7 @@ * Copyright (C) 2015 - 2019 Jason A. Donenfeld . All Rights Reserved. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-secret-utils.h" diff --git a/shared/nm-glib-aux/nm-shared-utils.c b/shared/nm-glib-aux/nm-shared-utils.c index 8e3f187..3215a33 100644 --- a/shared/nm-glib-aux/nm-shared-utils.c +++ b/shared/nm-glib-aux/nm-shared-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-shared-utils.h" @@ -786,27 +786,27 @@ nm_utils_ip6_address_same_prefix_cmp(const struct in6_addr *addr_a, return 0; } -/** - * _nm_utils_ip4_get_default_prefix: - * @ip: an IPv4 address (in network byte order) - * - * When the Internet was originally set up, various ranges of IP addresses were - * segmented into three network classes: A, B, and C. This function will return - * a prefix that is associated with the IP address specified defining where it - * falls in the predefined classes. - * - * Returns: the default class prefix for the given IP - **/ -/* The function is originally from ipcalc.c of Red Hat's initscripts. */ +/*****************************************************************************/ + guint32 -_nm_utils_ip4_get_default_prefix(guint32 ip) +_nm_utils_ip4_get_default_prefix0(in_addr_t ip) { - if (((ntohl(ip) & 0xFF000000) >> 24) <= 127) - return 8; /* Class A - 255.0.0.0 */ - else if (((ntohl(ip) & 0xFF000000) >> 24) <= 191) - return 16; /* Class B - 255.255.0.0 */ + /* The function is originally from ipcalc.c of Red Hat's initscripts. */ + switch (ntohl(ip) >> 24) { + case 0 ... 127: + return 8; /* Class A */ + case 128 ... 191: + return 16; /* Class B */ + case 192 ... 223: + return 24; /* Class C */ + } + return 0; +} - return 24; /* Class C - 255.255.255.0 */ +guint32 +_nm_utils_ip4_get_default_prefix(in_addr_t ip) +{ + return _nm_utils_ip4_get_default_prefix0(ip) ?: 24; } gboolean diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h index c432b12..7d33045 100644 --- a/shared/nm-glib-aux/nm-shared-utils.h +++ b/shared/nm-glib-aux/nm-shared-utils.h @@ -699,7 +699,8 @@ nm_utils_escaped_tokens_options_escape_val(const char *val, char **out_to_free) /*****************************************************************************/ guint32 _nm_utils_ip4_prefix_to_netmask(guint32 prefix); -guint32 _nm_utils_ip4_get_default_prefix(guint32 ip); +guint32 _nm_utils_ip4_get_default_prefix0(in_addr_t ip); +guint32 _nm_utils_ip4_get_default_prefix(in_addr_t ip); gconstpointer nm_utils_ipx_address_clear_host_address(int family, gpointer dst, gconstpointer src, guint8 plen); diff --git a/shared/nm-glib-aux/nm-str-buf.h b/shared/nm-glib-aux/nm-str-buf.h index 6edd451..cb0d3fb 100644 --- a/shared/nm-glib-aux/nm-str-buf.h +++ b/shared/nm-glib-aux/nm-str-buf.h @@ -292,8 +292,10 @@ nm_str_buf_append_c_len(NMStrBuf *strbuf, char ch, gsize len) } } -static inline void -nm_str_buf_reset(NMStrBuf *strbuf, const char *str) +/*****************************************************************************/ + +static inline NMStrBuf * +nm_str_buf_reset(NMStrBuf *strbuf) { _nm_str_buf_assert(strbuf); @@ -305,8 +307,7 @@ nm_str_buf_reset(NMStrBuf *strbuf, const char *str) strbuf->_priv_len = 0; } - if (str) - nm_str_buf_append(strbuf, str); + return strbuf; } /*****************************************************************************/ diff --git a/shared/nm-glib-aux/nm-time-utils.c b/shared/nm-glib-aux/nm-time-utils.c index 44e6b7b..df98176 100644 --- a/shared/nm-glib-aux/nm-time-utils.c +++ b/shared/nm-glib-aux/nm-time-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-time-utils.h" diff --git a/shared/nm-glib-aux/tests/meson.build b/shared/nm-glib-aux/tests/meson.build index d1f23ee..464f4e7 100644 --- a/shared/nm-glib-aux/tests/meson.build +++ b/shared/nm-glib-aux/tests/meson.build @@ -4,8 +4,7 @@ exe = executable( 'test-shared-general', 'test-shared-general.c', c_args: [ - '-DNETWORKMANAGER_COMPILATION_TEST', - '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)', + '-DG_LOG_DOMAIN="test"', ], dependencies: libnm_glib_aux_dep, link_with: libnm_systemd_logging_stub, @@ -23,8 +22,7 @@ if jansson_dep.found() 'test-json-aux', 'test-json-aux.c', c_args: [ - '-DNETWORKMANAGER_COMPILATION_TEST', - '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)', + '-DG_LOG_DOMAIN="test"', ], dependencies: [ libnm_glib_aux_dep, diff --git a/shared/nm-glib-aux/tests/test-json-aux.c b/shared/nm-glib-aux/tests/test-json-aux.c index 9275e67..b07d673 100644 --- a/shared/nm-glib-aux/tests/test-json-aux.c +++ b/shared/nm-glib-aux/tests/test-json-aux.c @@ -1,8 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#define NM_TEST_UTILS_NO_LIBNM 1 - -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-prog.h" #include diff --git a/shared/nm-glib-aux/tests/test-shared-general.c b/shared/nm-glib-aux/tests/test-shared-general.c index d0fdedd..f42c6fb 100644 --- a/shared/nm-glib-aux/tests/test-shared-general.c +++ b/shared/nm-glib-aux/tests/test-shared-general.c @@ -3,9 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#define NM_TEST_UTILS_NO_LIBNM 1 - -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-prog.h" #include "nm-std-aux/unaligned.h" #include "nm-glib-aux/nm-random-utils.h" diff --git a/shared/nm-log-core/nm-logging.c b/shared/nm-log-core/nm-logging.c index 495d5ac..cf3c3a8 100644 --- a/shared/nm-log-core/nm-logging.c +++ b/shared/nm-log-core/nm-logging.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-logging.h" diff --git a/shared/nm-platform/nm-netlink.c b/shared/nm-platform/nm-netlink.c index f9ebd1b..7a6d7e0 100644 --- a/shared/nm-platform/nm-netlink.c +++ b/shared/nm-platform/nm-netlink.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-netlink.h" diff --git a/shared/nm-platform/nm-platform-utils.c b/shared/nm-platform/nm-platform-utils.c index 59e4a24..c1c5b1a 100644 --- a/shared/nm-platform/nm-platform-utils.c +++ b/shared/nm-platform/nm-platform-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-platform-utils.h" @@ -468,14 +468,18 @@ static const NMEthtoolFeatureInfo _ethtool_feature_infos[_NM_ETHTOOL_ID_FEATURE_ ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_HW_TC_OFFLOAD, "hw-tc-offload"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD, "l2-fwd-offload"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_LOOPBACK, "loopback"), + ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_MACSEC_HW_OFFLOAD, "macsec-hw-offload"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_ALL, "rx-all"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_FCS, "rx-fcs"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_GRO_HW, "rx-gro-hw"), + ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_GRO_LIST, "rx-gro-list"), + ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_UDP_GRO_FORWARDING, "rx-udp-gro-forwarding"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD, "rx-udp_tunnel-port-offload"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_VLAN_FILTER, "rx-vlan-filter"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_FILTER, "rx-vlan-stag-filter"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_HW_PARSE, "rx-vlan-stag-hw-parse"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TLS_HW_RECORD, "tls-hw-record"), + ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TLS_HW_RX_OFFLOAD, "tls-hw-rx-offload"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TLS_HW_TX_OFFLOAD, "tls-hw-tx-offload"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_FCOE_CRC, "tx-checksum-fcoe-crc"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IPV4, "tx-checksum-ipv4"), @@ -486,6 +490,7 @@ static const NMEthtoolFeatureInfo _ethtool_feature_infos[_NM_ETHTOOL_ID_FEATURE_ ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_FCOE_SEGMENTATION, "tx-fcoe-segmentation"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_GRE_CSUM_SEGMENTATION, "tx-gre-csum-segmentation"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_GRE_SEGMENTATION, "tx-gre-segmentation"), + ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_GSO_LIST, "tx-gso-list"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_GSO_PARTIAL, "tx-gso-partial"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST, "tx-gso-robust"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION, "tx-ipxip4-segmentation"), @@ -498,6 +503,8 @@ static const NMEthtoolFeatureInfo _ethtool_feature_infos[_NM_ETHTOOL_ID_FEATURE_ ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_TCP_ECN_SEGMENTATION, "tx-tcp-ecn-segmentation"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_TCP_MANGLEID_SEGMENTATION, "tx-tcp-mangleid-segmentation"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_TCP_SEGMENTATION, "tx-tcp-segmentation"), + ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION, + "tx-tunnel-remcsum-segmentation"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_UDP_SEGMENTATION, "tx-udp-segmentation"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION, "tx-udp_tnl-csum-segmentation"), ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION, "tx-udp_tnl-segmentation"), @@ -539,8 +546,15 @@ _ASSERT_ethtool_feature_infos(void) n += inf->n_kernel_names; for (k = 0; k < inf->n_kernel_names; k++) { - g_assert(nm_utils_strv_find_first((char **) inf->kernel_names, k, inf->kernel_names[k]) - < 0); + const char *name = inf->kernel_names[k]; + + g_assert(nm_utils_strv_find_first((char **) inf->kernel_names, k, name) < 0); + + /* these offload features are only informational and cannot be set from user-space + * (NETIF_F_NEVER_CHANGE). We should not track them in _ethtool_feature_infos. */ + g_assert(!nm_streq(name, "netns-local")); + g_assert(!nm_streq(name, "tx-lockless")); + g_assert(!nm_streq(name, "vlan-challenged")); } } diff --git a/shared/nm-platform/nmp-netns.c b/shared/nm-platform/nmp-netns.c index 01aefde..c7cb617 100644 --- a/shared/nm-platform/nmp-netns.c +++ b/shared/nm-platform/nmp-netns.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nmp-netns.h" diff --git a/shared/nm-platform/tests/meson.build b/shared/nm-platform/tests/meson.build index 8d2b9c0..a8fcdbc 100644 --- a/shared/nm-platform/tests/meson.build +++ b/shared/nm-platform/tests/meson.build @@ -4,8 +4,7 @@ exe = executable( 'test-nm-platform', 'test-nm-platform.c', c_args: [ - '-DNETWORKMANAGER_COMPILATION_TEST', - '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)', + '-DG_LOG_DOMAIN="test"', ], dependencies: [ libnm_log_core_dep, diff --git a/shared/nm-platform/tests/test-nm-platform.c b/shared/nm-platform/tests/test-nm-platform.c index 0386a3a..a3e9ff1 100644 --- a/shared/nm-platform/tests/test-nm-platform.c +++ b/shared/nm-platform/tests/test-nm-platform.c @@ -1,8 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#define NM_TEST_UTILS_NO_LIBNM 1 - -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-prog.h" #include "nm-log-core/nm-logging.h" #include "nm-platform/nm-netlink.h" diff --git a/shared/nm-std-aux/nm-default-std.h b/shared/nm-std-aux/nm-default-std.h new file mode 100644 index 0000000..fe16d35 --- /dev/null +++ b/shared/nm-std-aux/nm-default-std.h @@ -0,0 +1,102 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_DEFAULT_STD_H__ +#define __NM_DEFAULT_STD_H__ + +#include "nm-networkmanager-compilation.h" + +#ifdef NETWORKMANAGER_COMPILATION + #error Dont define NETWORKMANAGER_COMPILATION +#endif + +#ifndef G_LOG_DOMAIN + #error Define G_LOG_DOMAIN +#endif + +/*****************************************************************************/ + +#define NETWORKMANAGER_COMPILATION 0 + +/*****************************************************************************/ + +/* always include these headers for our internal source files. */ + +#ifndef ___CONFIG_H__ + #define ___CONFIG_H__ + #include +#endif + +#include "config-extra.h" + +/* for internal compilation we don't want the deprecation macros + * to be in effect. Define the widest range of versions to effectively + * disable deprecation checks */ +#define NM_VERSION_MIN_REQUIRED NM_VERSION_0_9_8 + +#ifndef NM_MORE_ASSERTS + #define NM_MORE_ASSERTS 0 +#endif + +#if NM_MORE_ASSERTS == 0 + /* The cast macros like NM_TYPE() are implemented via G_TYPE_CHECK_INSTANCE_CAST() + * and _G_TYPE_CIC(). The latter, by default performs runtime checks of the type + * by calling g_type_check_instance_cast(). + * This check has a certain overhead without being helpful. + * + * Example 1: + * static void foo (NMType *obj) + * { + * access_obj_without_check (obj); + * } + * foo ((NMType *) obj); + * // There is no runtime check and passing an invalid pointer + * // leads to a crash. + * + * Example 2: + * static void foo (NMType *obj) + * { + * access_obj_without_check (obj); + * } + * foo (NM_TYPE (obj)); + * // There is a runtime check which prints a g_warning(), but that doesn't + * // avoid the crash as NM_TYPE() cannot do anything then passing on the + * // invalid pointer. + * + * Example 3: + * static void foo (NMType *obj) + * { + * g_return_if_fail (NM_IS_TYPE (obj)); + * access_obj_without_check (obj); + * } + * foo ((NMType *) obj); + * // There is a runtime check which prints a g_critical() which also avoids + * // the crash. That is actually helpful to catch bugs and avoid crashes. + * + * Example 4: + * static void foo (NMType *obj) + * { + * g_return_if_fail (NM_IS_TYPE (obj)); + * access_obj_without_check (obj); + * } + * foo (NM_TYPE (obj)); + * // The runtime check is performed twice, with printing a g_warning() and + * // a g_critical() and avoiding the crash. + * + * Example 3 is how it should be done. Type checks in NM_TYPE() are pointless. + * Disable them for our production builds. + */ + #ifndef G_DISABLE_CAST_CHECKS + #define G_DISABLE_CAST_CHECKS + #endif +#endif + +/*****************************************************************************/ + +#include + +/*****************************************************************************/ + +#endif /* __NM_DEFAULT_STD_H__ */ diff --git a/shared/nm-std-aux/nm-networkmanager-compilation.h b/shared/nm-std-aux/nm-networkmanager-compilation.h new file mode 100644 index 0000000..025a158 --- /dev/null +++ b/shared/nm-std-aux/nm-networkmanager-compilation.h @@ -0,0 +1,54 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_NETWORKMANAGER_COMPILATION_H__ +#define __NM_NETWORKMANAGER_COMPILATION_H__ + +#define NM_NETWORKMANAGER_COMPILATION_WITH_GLIB (1 << 0) +#define NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB (1 << 1) +#define NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG (1 << 2) +#define NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM (1 << 3) +#define NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE (1 << 4) +#define NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE (1 << 5) +#define NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL (1 << 6) +#define NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE (1 << 7) +#define NM_NETWORKMANAGER_COMPILATION_WITH_DAEMON (1 << 10) +#define NM_NETWORKMANAGER_COMPILATION_WITH_SYSTEMD (1 << 11) + +#define NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE \ + (0 | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB \ + | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB \ + | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE \ + | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE \ + | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL) + +#define NM_NETWORKMANAGER_COMPILATION_LIBNM \ + (0 | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB \ + | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM \ + | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE \ + | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE \ + | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL) + +#define NM_NETWORKMANAGER_COMPILATION_CLIENT \ + (0 | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB \ + | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG \ + | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE) + +#define NM_NETWORKMANAGER_COMPILATION_DAEMON \ + (0 | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB \ + | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG \ + | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE \ + | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL \ + | NM_NETWORKMANAGER_COMPILATION_WITH_DAEMON) + +#define NM_NETWORKMANAGER_COMPILATION_SYSTEMD_SHARED \ + (0 | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB | NM_NETWORKMANAGER_COMPILATION_WITH_SYSTEMD) + +#define NM_NETWORKMANAGER_COMPILATION_SYSTEMD \ + (0 | NM_NETWORKMANAGER_COMPILATION_DAEMON | NM_NETWORKMANAGER_COMPILATION_SYSTEMD_SHARED) + +#define NM_NETWORKMANAGER_COMPILATION_GLIB (0 | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB) + +#endif /* __NM_NETWORKMANAGER_COMPILATION_H__ */ diff --git a/shared/nm-std-aux/nm-std-utils.c b/shared/nm-std-aux/nm-std-utils.c index 8c76237..18692b1 100644 --- a/shared/nm-std-aux/nm-std-utils.c +++ b/shared/nm-std-aux/nm-std-utils.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "nm-default-std.h" #include "nm-std-utils.h" diff --git a/shared/nm-test-utils-impl.c b/shared/nm-test-utils-impl.c index 36ef190..f8f98d8 100644 --- a/shared/nm-test-utils-impl.c +++ b/shared/nm-test-utils-impl.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include diff --git a/shared/nm-udev-aux/nm-udev-utils.c b/shared/nm-udev-aux/nm-udev-utils.c index f7e8e6d..0b941df 100644 --- a/shared/nm-udev-aux/nm-udev-utils.c +++ b/shared/nm-udev-aux/nm-udev-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib-i18n-lib.h" #include "nm-udev-utils.h" diff --git a/shared/nm-utils/nm-compat.c b/shared/nm-utils/nm-compat.c index 62e6ea3..dad4822 100644 --- a/shared/nm-utils/nm-compat.c +++ b/shared/nm-utils/nm-compat.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-libnm.h" #include "nm-compat.h" diff --git a/shared/nm-utils/nm-test-utils.h b/shared/nm-utils/nm-test-utils.h index 66d5ae2..6b41c11 100644 --- a/shared/nm-utils/nm-test-utils.h +++ b/shared/nm-utils/nm-test-utils.h @@ -6,10 +6,6 @@ #ifndef __NM_TEST_UTILS_H__ #define __NM_TEST_UTILS_H__ -#if defined(NETWORKMANAGER_COMPILATION) && !defined(NETWORKMANAGER_COMPILATION_TEST) - #error Need to mark the compilation with NETWORKMANAGER_COMPILATION_TEST. -#endif - /******************************************************************************* * HOWTO run tests. * @@ -84,8 +80,6 @@ * *******************************************************************************/ -#include "nm-default.h" - #if defined(NM_ASSERT_NO_MSG) && NM_ASSERT_NO_MSG #undef g_return_if_fail_warning #undef g_assertion_message_expr @@ -98,10 +92,6 @@ #include #include -#ifndef NM_TEST_UTILS_NO_LIBNM - #include "nm-utils.h" -#endif - /*****************************************************************************/ #define NMTST_G_RETURN_MSG_S(expr) "*: assertion '" NM_ASSERT_G_RETURN_EXPR(expr) "' failed" @@ -1011,6 +1001,23 @@ nmtst_rand_perm(GRand *rand, void *dst, const void *src, gsize elmt_size, gsize return dst; } +static inline const char ** +nmtst_rand_perm_strv(const char *const *strv) +{ + const char **res; + gsize n; + + if (!strv) + return NULL; + + /* this returns a (scrambled) SHALLOW copy of the strv array! */ + + n = NM_PTRARRAY_LEN(strv); + res = (const char **) (nm_utils_strv_dup(strv, n, FALSE) ?: g_new0(char *, 1)); + nmtst_rand_perm(NULL, res, res, sizeof(char *), n); + return res; +} + static inline GSList * nmtst_rand_perm_gslist(GRand *rand, GSList *list) { @@ -2772,4 +2779,29 @@ nmtst_keyfile_get_num_keys(GKeyFile *keyfile, const char *group_name) /*****************************************************************************/ +#if defined(NM_SETTING_IP_CONFIG_H) && defined(__NM_SHARED_UTILS_H__) + +static inline NMIPAddress * +nmtst_ip_address_new(int addr_family, const char *str) +{ + NMIPAddr addr; + int plen; + GError * error = NULL; + NMIPAddress *a; + + if (!nm_utils_parse_inaddr_prefix_bin(addr_family, str, &addr_family, &addr, &plen)) + g_assert_not_reached(); + + if (plen == -1) + plen = addr_family == AF_INET ? 32 : 128; + + a = nm_ip_address_new_binary(addr_family, &addr, plen, &error); + nmtst_assert_success(a, error); + return a; +} + +#endif + +/*****************************************************************************/ + #endif /* __NM_TEST_UTILS_H__ */ diff --git a/shared/nm-utils/nm-vpn-plugin-utils.c b/shared/nm-utils/nm-vpn-plugin-utils.c index 6a057e8..89285ec 100644 --- a/shared/nm-utils/nm-vpn-plugin-utils.c +++ b/shared/nm-utils/nm-vpn-plugin-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2016, 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "nm-vpn-plugin-utils.h" diff --git a/shared/systemd/nm-default-systemd-shared.h b/shared/systemd/nm-default-systemd-shared.h new file mode 100644 index 0000000..bc0e6c4 --- /dev/null +++ b/shared/systemd/nm-default-systemd-shared.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_DEFAULT_SYSTEMD_SHARED_H__ +#define __NM_DEFAULT_SYSTEMD_SHARED_H__ + +/*****************************************************************************/ + +#include "nm-glib-aux/nm-default-glib.h" + +#undef NETWORKMANAGER_COMPILATION +#define NETWORKMANAGER_COMPILATION NM_NETWORKMANAGER_COMPILATION_SYSTEMD_SHARED + +/*****************************************************************************/ + +#endif /* __NM_DEFAULT_SYSTEMD_SHARED_H__ */ diff --git a/shared/systemd/nm-logging-stub.c b/shared/systemd/nm-logging-stub.c index b875e61..8db90cd 100644 --- a/shared/systemd/nm-logging-stub.c +++ b/shared/systemd/nm-logging-stub.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "shared/systemd/nm-default-systemd-shared.h" #include "nm-glib-aux/nm-logging-fwd.h" diff --git a/shared/systemd/nm-sd-utils-shared.c b/shared/systemd/nm-sd-utils-shared.c index 5585485..f0504aa 100644 --- a/shared/systemd/nm-sd-utils-shared.c +++ b/shared/systemd/nm-sd-utils-shared.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "shared/systemd/nm-default-systemd-shared.h" #include "nm-sd-utils-shared.h" @@ -93,6 +93,24 @@ nm_sd_hostname_is_valid(const char *s, bool allow_trailing_dot) : (ValidHostnameFlags) 0); } +char * +nm_sd_dns_name_normalize(const char *s) +{ + nm_auto_free char *n = NULL; + int r; + + r = dns_name_normalize(s, 0, &n); + if (r < 0) + return NULL; + + nm_assert(n); + + /* usually we try not to mix malloc/g_malloc and free/g_free. In practice, + * they are the same. So here we return a buffer allocated with malloc(), + * and the caller should free it with g_free(). */ + return g_steal_pointer(&n); +} + /*****************************************************************************/ static gboolean diff --git a/shared/systemd/nm-sd-utils-shared.h b/shared/systemd/nm-sd-utils-shared.h index b4a1b18..45089c0 100644 --- a/shared/systemd/nm-sd-utils-shared.h +++ b/shared/systemd/nm-sd-utils-shared.h @@ -28,6 +28,8 @@ nm_sd_dns_name_to_wire_format(const char *domain, guint8 *buffer, size_t len, gb int nm_sd_dns_name_is_valid(const char *s); gboolean nm_sd_hostname_is_valid(const char *s, bool allow_trailing_dot); +char *nm_sd_dns_name_normalize(const char *s); + /*****************************************************************************/ gboolean nm_sd_http_url_is_valid_https(const char *url); diff --git a/shared/systemd/sd-adapt-shared/nm-sd-adapt-shared.h b/shared/systemd/sd-adapt-shared/nm-sd-adapt-shared.h index 41cfb1c..b094ce4 100644 --- a/shared/systemd/sd-adapt-shared/nm-sd-adapt-shared.h +++ b/shared/systemd/sd-adapt-shared/nm-sd-adapt-shared.h @@ -6,7 +6,7 @@ #ifndef __NM_SD_ADAPT_SHARED_H__ #define __NM_SD_ADAPT_SHARED_H__ -#include "nm-default.h" +#include "shared/systemd/nm-default-systemd-shared.h" #include "nm-glib-aux/nm-logging-fwd.h" diff --git a/shared/systemd/src/basic/fs-util.c b/shared/systemd/src/basic/fs-util.c index 094dd63..2ed9ee0 100644 --- a/shared/systemd/src/basic/fs-util.c +++ b/shared/systemd/src/basic/fs-util.c @@ -945,7 +945,7 @@ int chase_symlinks(const char *path, const char *original_root, unsigned flags, /* Preserve the trailing slash */ if (flags & CHASE_TRAIL_SLASH) - if (!strextend(&done, "/", NULL)) + if (!strextend(&done, "/")) return -ENOMEM; break; @@ -1016,7 +1016,7 @@ int chase_symlinks(const char *path, const char *original_root, unsigned flags, if (streq_ptr(done, "/")) *done = '\0'; - if (!strextend(&done, first, todo, NULL)) + if (!strextend(&done, first, todo)) return -ENOMEM; exists = false; @@ -1109,7 +1109,7 @@ int chase_symlinks(const char *path, const char *original_root, unsigned flags, if (streq(done, "/")) *done = '\0'; - if (!strextend(&done, first, NULL)) + if (!strextend(&done, first)) return -ENOMEM; } diff --git a/shared/systemd/src/basic/stat-util.c b/shared/systemd/src/basic/stat-util.c index 925f82b..a988009 100644 --- a/shared/systemd/src/basic/stat-util.c +++ b/shared/systemd/src/basic/stat-util.c @@ -231,13 +231,12 @@ int fd_is_network_fs(int fd) { } int path_is_temporary_fs(const char *path) { - _cleanup_close_ int fd = -1; + struct statfs s; - fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_PATH); - if (fd < 0) + if (statfs(path, &s) < 0) return -errno; - return fd_is_temporary_fs(fd); + return is_temporary_fs(&s); } #endif /* NM_IGNORED */ diff --git a/shared/systemd/src/basic/string-util.c b/shared/systemd/src/basic/string-util.c index 9e7a027..744a360 100644 --- a/shared/systemd/src/basic/string-util.c +++ b/shared/systemd/src/basic/string-util.c @@ -798,10 +798,10 @@ char *strip_tab_ansi(char **ibuf, size_t *_isz, size_t highlight[2]) { return *ibuf; } -char *strextend_with_separator(char **x, const char *separator, ...) { - bool need_separator; +char *strextend_with_separator_internal(char **x, const char *separator, ...) { size_t f, l, l_separator; - char *r, *p; + bool need_separator; + char *nr, *p; va_list ap; assert(x); @@ -825,7 +825,7 @@ char *strextend_with_separator(char **x, const char *separator, ...) { if (need_separator) n += l_separator; - if (n > ((size_t) -1) - l) { + if (n >= SIZE_MAX - l) { va_end(ap); return NULL; } @@ -837,11 +837,12 @@ char *strextend_with_separator(char **x, const char *separator, ...) { need_separator = !isempty(*x); - r = realloc(*x, l+1); - if (!r) + nr = realloc(*x, GREEDY_ALLOC_ROUND_UP(l+1)); + if (!nr) return NULL; - p = r + f; + *x = nr; + p = nr + f; va_start(ap, separator); for (;;) { @@ -860,12 +861,11 @@ char *strextend_with_separator(char **x, const char *separator, ...) { } va_end(ap); - assert(p == r + l); + assert(p == nr + l); *p = 0; - *x = r; - return r + l; + return p; } #endif /* NM_IGNORED */ diff --git a/shared/systemd/src/basic/string-util.h b/shared/systemd/src/basic/string-util.h index fdd3ce7..593cf04 100644 --- a/shared/systemd/src/basic/string-util.h +++ b/shared/systemd/src/basic/string-util.h @@ -189,9 +189,10 @@ char *strreplace(const char *text, const char *old_string, const char *new_strin char *strip_tab_ansi(char **ibuf, size_t *_isz, size_t highlight[2]); -char *strextend_with_separator(char **x, const char *separator, ...) _sentinel_; +char *strextend_with_separator_internal(char **x, const char *separator, ...) _sentinel_; -#define strextend(x, ...) strextend_with_separator(x, NULL, __VA_ARGS__) +#define strextend_with_separator(x, separator, ...) strextend_with_separator_internal(x, separator, __VA_ARGS__, NULL) +#define strextend(x, ...) strextend_with_separator_internal(x, NULL, __VA_ARGS__, NULL) char *strrep(const char *s, unsigned n); diff --git a/src/core/NetworkManagerUtils.c b/src/core/NetworkManagerUtils.c index d55df95..5407221 100644 --- a/src/core/NetworkManagerUtils.c +++ b/src/core/NetworkManagerUtils.c @@ -4,7 +4,7 @@ * Copyright (C) 2005 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "NetworkManagerUtils.h" diff --git a/src/core/devices/adsl/nm-atm-manager.c b/src/core/devices/adsl/nm-atm-manager.c index eab723d..9be9b5c 100644 --- a/src/core/devices/adsl/nm-atm-manager.c +++ b/src/core/devices/adsl/nm-atm-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2009 - 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/devices/adsl/nm-device-adsl.c b/src/core/devices/adsl/nm-device-adsl.c index 29a73ba..34c062a 100644 --- a/src/core/devices/adsl/nm-device-adsl.c +++ b/src/core/devices/adsl/nm-device-adsl.c @@ -3,7 +3,7 @@ * Pantelis Koukousoulas */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-adsl.h" diff --git a/src/core/devices/bluetooth/nm-bluez-manager.c b/src/core/devices/bluetooth/nm-bluez-manager.c index 3343b6e..dd998d2 100644 --- a/src/core/devices/bluetooth/nm-bluez-manager.c +++ b/src/core/devices/bluetooth/nm-bluez-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-bluez-manager.h" diff --git a/src/core/devices/bluetooth/nm-bluez5-dun.c b/src/core/devices/bluetooth/nm-bluez5-dun.c index d803b74..e29884d 100644 --- a/src/core/devices/bluetooth/nm-bluez5-dun.c +++ b/src/core/devices/bluetooth/nm-bluez5-dun.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/devices/bluetooth/nm-bt-error.c b/src/core/devices/bluetooth/nm-bt-error.c index ed09147..2e49eb7 100644 --- a/src/core/devices/bluetooth/nm-bt-error.c +++ b/src/core/devices/bluetooth/nm-bt-error.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-bt-error.h" diff --git a/src/core/devices/bluetooth/nm-device-bt.c b/src/core/devices/bluetooth/nm-device-bt.c index 0515d29..c07be2d 100644 --- a/src/core/devices/bluetooth/nm-device-bt.c +++ b/src/core/devices/bluetooth/nm-device-bt.c @@ -3,7 +3,7 @@ * Copyright (C) 2009 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-bt.h" diff --git a/src/core/devices/bluetooth/tests/nm-bt-test.c b/src/core/devices/bluetooth/tests/nm-bt-test.c index 546c06a..0fc8aa8 100644 --- a/src/core/devices/bluetooth/tests/nm-bt-test.c +++ b/src/core/devices/bluetooth/tests/nm-bt-test.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/devices/nm-acd-manager.c b/src/core/devices/nm-acd-manager.c index 82b7146..b95f90f 100644 --- a/src/core/devices/nm-acd-manager.c +++ b/src/core/devices/nm-acd-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-acd-manager.h" diff --git a/src/core/devices/nm-device-6lowpan.c b/src/core/devices/nm-device-6lowpan.c index 7c0be59..fe116dd 100644 --- a/src/core/devices/nm-device-6lowpan.c +++ b/src/core/devices/nm-device-6lowpan.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-6lowpan.h" diff --git a/src/core/devices/nm-device-bond.c b/src/core/devices/nm-device-bond.c index 5671a42..f68c080 100644 --- a/src/core/devices/nm-device-bond.c +++ b/src/core/devices/nm-device-bond.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-bond.h" diff --git a/src/core/devices/nm-device-bridge.c b/src/core/devices/nm-device-bridge.c index 6557558..c919d85 100644 --- a/src/core/devices/nm-device-bridge.c +++ b/src/core/devices/nm-device-bridge.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 - 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-bridge.h" diff --git a/src/core/devices/nm-device-dummy.c b/src/core/devices/nm-device-dummy.c index 5ec0b7f..13cfd3b 100644 --- a/src/core/devices/nm-device-dummy.c +++ b/src/core/devices/nm-device-dummy.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-dummy.h" diff --git a/src/core/devices/nm-device-ethernet-utils.c b/src/core/devices/nm-device-ethernet-utils.c index 50da267..a36d12b 100644 --- a/src/core/devices/nm-device-ethernet-utils.c +++ b/src/core/devices/nm-device-ethernet-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-ethernet-utils.h" diff --git a/src/core/devices/nm-device-ethernet.c b/src/core/devices/nm-device-ethernet.c index 1c6c300..4442886 100644 --- a/src/core/devices/nm-device-ethernet.c +++ b/src/core/devices/nm-device-ethernet.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-ethernet.h" diff --git a/src/core/devices/nm-device-factory.c b/src/core/devices/nm-device-factory.c index 7034202..81124a8 100644 --- a/src/core/devices/nm-device-factory.c +++ b/src/core/devices/nm-device-factory.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-factory.h" diff --git a/src/core/devices/nm-device-generic.c b/src/core/devices/nm-device-generic.c index 17ff407..a319666 100644 --- a/src/core/devices/nm-device-generic.c +++ b/src/core/devices/nm-device-generic.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-generic.h" diff --git a/src/core/devices/nm-device-infiniband.c b/src/core/devices/nm-device-infiniband.c index af1a49b..f54ffcf 100644 --- a/src/core/devices/nm-device-infiniband.c +++ b/src/core/devices/nm-device-infiniband.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-infiniband.h" diff --git a/src/core/devices/nm-device-ip-tunnel.c b/src/core/devices/nm-device-ip-tunnel.c index 9124c44..da6afb3 100644 --- a/src/core/devices/nm-device-ip-tunnel.c +++ b/src/core/devices/nm-device-ip-tunnel.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-ip-tunnel.h" diff --git a/src/core/devices/nm-device-macsec.c b/src/core/devices/nm-device-macsec.c index 390cc6d..51b820a 100644 --- a/src/core/devices/nm-device-macsec.c +++ b/src/core/devices/nm-device-macsec.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-macsec.h" diff --git a/src/core/devices/nm-device-macvlan.c b/src/core/devices/nm-device-macvlan.c index 051f9d6..e8b39ed 100644 --- a/src/core/devices/nm-device-macvlan.c +++ b/src/core/devices/nm-device-macvlan.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 - 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-macvlan.h" diff --git a/src/core/devices/nm-device-ppp.c b/src/core/devices/nm-device-ppp.c index e8a2cb8..4040f2d 100644 --- a/src/core/devices/nm-device-ppp.c +++ b/src/core/devices/nm-device-ppp.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-ppp.h" diff --git a/src/core/devices/nm-device-tun.c b/src/core/devices/nm-device-tun.c index c4dd4b4..edca69e 100644 --- a/src/core/devices/nm-device-tun.c +++ b/src/core/devices/nm-device-tun.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 - 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-tun.h" diff --git a/src/core/devices/nm-device-veth.c b/src/core/devices/nm-device-veth.c index 0fc76b1..e0ba843 100644 --- a/src/core/devices/nm-device-veth.c +++ b/src/core/devices/nm-device-veth.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/devices/nm-device-vlan.c b/src/core/devices/nm-device-vlan.c index edb16ed..bfde60e 100644 --- a/src/core/devices/nm-device-vlan.c +++ b/src/core/devices/nm-device-vlan.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 - 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-vlan.h" diff --git a/src/core/devices/nm-device-vrf.c b/src/core/devices/nm-device-vrf.c index 6e672b6..4fec59b 100644 --- a/src/core/devices/nm-device-vrf.c +++ b/src/core/devices/nm-device-vrf.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-vrf.h" diff --git a/src/core/devices/nm-device-vxlan.c b/src/core/devices/nm-device-vxlan.c index 763aee9..f16a52c 100644 --- a/src/core/devices/nm-device-vxlan.c +++ b/src/core/devices/nm-device-vxlan.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 - 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-vxlan.h" diff --git a/src/core/devices/nm-device-wireguard.c b/src/core/devices/nm-device-wireguard.c index 1b10996..fd057de 100644 --- a/src/core/devices/nm-device-wireguard.c +++ b/src/core/devices/nm-device-wireguard.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Javier Arteaga */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-wireguard.h" diff --git a/src/core/devices/nm-device-wpan.c b/src/core/devices/nm-device-wpan.c index 05b48a7..2f3b16f 100644 --- a/src/core/devices/nm-device-wpan.c +++ b/src/core/devices/nm-device-wpan.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Lubomir Rintel */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-manager.h" #include "nm-device-wpan.h" diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index a2d4788..040dd0b 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device.h" @@ -9948,13 +9948,16 @@ gboolean nm_device_dhcp6_renew(NMDevice *self, gboolean release) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); + NMNDiscDHCPLevel mode; g_return_val_if_fail(priv->dhcp_data_6.client != NULL, FALSE); _LOGI(LOGD_DHCP6, "DHCPv6 lease renewal requested"); /* Terminate old DHCP instance and release the old lease */ + mode = priv->dhcp6.mode; dhcp6_cleanup(self, CLEANUP_TYPE_DECONFIGURE, release); + priv->dhcp6.mode = mode; /* Start DHCP again on the interface */ return dhcp6_start(self, FALSE); diff --git a/src/core/devices/nm-lldp-listener.c b/src/core/devices/nm-lldp-listener.c index e645b9d..c60fb3a 100644 --- a/src/core/devices/nm-lldp-listener.c +++ b/src/core/devices/nm-lldp-listener.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-lldp-listener.h" diff --git a/src/core/devices/ovs/nm-device-ovs-bridge.c b/src/core/devices/ovs/nm-device-ovs-bridge.c index 1b7035b..3ae8a48 100644 --- a/src/core/devices/ovs/nm-device-ovs-bridge.c +++ b/src/core/devices/ovs/nm-device-ovs-bridge.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-ovs-bridge.h" diff --git a/src/core/devices/ovs/nm-device-ovs-interface.c b/src/core/devices/ovs/nm-device-ovs-interface.c index b9d3d50..5d07c21 100644 --- a/src/core/devices/ovs/nm-device-ovs-interface.c +++ b/src/core/devices/ovs/nm-device-ovs-interface.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-ovs-interface.h" diff --git a/src/core/devices/ovs/nm-device-ovs-port.c b/src/core/devices/ovs/nm-device-ovs-port.c index 5f7a697..2ecb95e 100644 --- a/src/core/devices/ovs/nm-device-ovs-port.c +++ b/src/core/devices/ovs/nm-device-ovs-port.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-ovs-port.h" diff --git a/src/core/devices/ovs/nm-ovs-factory.c b/src/core/devices/ovs/nm-ovs-factory.c index d5875bc..e7af38d 100644 --- a/src/core/devices/ovs/nm-ovs-factory.c +++ b/src/core/devices/ovs/nm-ovs-factory.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-manager.h" #include "nm-ovsdb.h" diff --git a/src/core/devices/ovs/nm-ovsdb.c b/src/core/devices/ovs/nm-ovsdb.c index de54a2e..da3a798 100644 --- a/src/core/devices/ovs/nm-ovsdb.c +++ b/src/core/devices/ovs/nm-ovsdb.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-ovsdb.h" diff --git a/src/core/devices/team/nm-device-team.c b/src/core/devices/team/nm-device-team.c index 7b7a679..d2d7172 100644 --- a/src/core/devices/team/nm-device-team.c +++ b/src/core/devices/team/nm-device-team.c @@ -4,7 +4,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-team.h" diff --git a/src/core/devices/team/nm-team-factory.c b/src/core/devices/team/nm-team-factory.c index ce623e2..57b51bf 100644 --- a/src/core/devices/team/nm-team-factory.c +++ b/src/core/devices/team/nm-team-factory.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/devices/tests/test-acd.c b/src/core/devices/tests/test-acd.c index 875dfff..b0af59d 100644 --- a/src/core/devices/tests/test-acd.c +++ b/src/core/devices/tests/test-acd.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "n-acd/src/n-acd.h" diff --git a/src/core/devices/tests/test-lldp.c b/src/core/devices/tests/test-lldp.c index 04c3b5b..ef0b154 100644 --- a/src/core/devices/tests/test-lldp.c +++ b/src/core/devices/tests/test-lldp.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include @@ -812,14 +812,21 @@ _test_recv_fixture_setup(TestRecvFixture *fixture, gconstpointer user_data) link = nmtstp_assert_wait_for_link(NM_PLATFORM_GET, TEST_IFNAME, NM_LINK_TYPE_TUN, 0); } else { int s; - struct ifreq ifr = {}; + struct ifreq ifr; int r; + int try_cnt = 0; +again: + memset(&ifr, 0, sizeof(ifr)); ifr.ifr_flags = IFF_TAP | IFF_NO_PI; nm_utils_ifname_cpy(ifr.ifr_name, TEST_IFNAME); r = ioctl(fd, TUNSETIFF, &ifr); if (r != 0) { + if (errno == EPERM && try_cnt++ < 10) { + g_usleep(2); + goto again; + } g_assert_cmpint(errno, ==, 0); g_assert_cmpint(r, ==, 0); } diff --git a/src/core/devices/wifi/nm-device-iwd.c b/src/core/devices/wifi/nm-device-iwd.c index 8bfdcaa..f0de90d 100644 --- a/src/core/devices/wifi/nm-device-iwd.c +++ b/src/core/devices/wifi/nm-device-iwd.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Intel Corporation */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-iwd.h" @@ -789,7 +789,7 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * return FALSE; } } else if (!NM_IN_SET(security, - NM_IWD_NETWORK_SECURITY_NONE, + NM_IWD_NETWORK_SECURITY_OPEN, NM_IWD_NETWORK_SECURITY_PSK)) { nm_utils_error_set_literal(error, NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, @@ -798,6 +798,9 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * return FALSE; } } else if (nm_streq(mode, NM_SETTING_WIRELESS_MODE_AP)) { + NMSettingWirelessSecurity *s_wireless_sec = + nm_connection_get_setting_wireless_security(connection); + if (!(priv->capabilities & NM_WIFI_DEVICE_CAP_AP)) { nm_utils_error_set_literal(error, NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, @@ -805,13 +808,17 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * return FALSE; } - if (!NM_IN_SET(security, NM_IWD_NETWORK_SECURITY_PSK)) { + if (!NM_IN_SET(security, NM_IWD_NETWORK_SECURITY_PSK) || !s_wireless_sec + || !nm_streq0(nm_setting_wireless_security_get_key_mgmt(s_wireless_sec), "wpa-psk")) { nm_utils_error_set_literal(error, NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, "IWD backend only supports PSK authentication in AP mode"); return FALSE; } } else if (nm_streq(mode, NM_SETTING_WIRELESS_MODE_ADHOC)) { + NMSettingWirelessSecurity *s_wireless_sec = + nm_connection_get_setting_wireless_security(connection); + if (!(priv->capabilities & NM_WIFI_DEVICE_CAP_ADHOC)) { nm_utils_error_set_literal(error, NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, @@ -819,7 +826,10 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * return FALSE; } - if (!NM_IN_SET(security, NM_IWD_NETWORK_SECURITY_NONE, NM_IWD_NETWORK_SECURITY_PSK)) { + if (!NM_IN_SET(security, NM_IWD_NETWORK_SECURITY_OPEN, NM_IWD_NETWORK_SECURITY_PSK) + || (s_wireless_sec + && !nm_streq0(nm_setting_wireless_security_get_key_mgmt(s_wireless_sec), + "wpa-psk"))) { nm_utils_error_set_literal( error, NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, @@ -1272,14 +1282,14 @@ get_agent_request_network_path(GDBusMethodInvocation *invocation) const char *network_path = NULL; if (nm_streq(method_name, "RequestPassphrase")) - g_variant_get(params, "(s)", &network_path); + g_variant_get(params, "(o)", &network_path); else if (nm_streq(method_name, "RequestPrivateKeyPassphrase")) - g_variant_get(params, "(s)", &network_path); + g_variant_get(params, "(o)", &network_path); else if (nm_streq(method_name, "RequestUserNameAndPassword")) - g_variant_get(params, "(s)", &network_path); + g_variant_get(params, "(o)", &network_path); else if (nm_streq(method_name, "RequestUserPassword")) { const char *user; - g_variant_get(params, "(ss)", &network_path, &user); + g_variant_get(params, "(os)", &network_path, &user); } return network_path; @@ -1740,7 +1750,7 @@ act_check_interface(NMDeviceIwd *self) &security)) goto failed; - if (security == NM_IWD_NETWORK_SECURITY_NONE) { + if (security == NM_IWD_NETWORK_SECURITY_OPEN) { g_dbus_proxy_call(proxy, "StartOpen", g_variant_new("(s)", ssid), @@ -2234,6 +2244,7 @@ act_stage2_config(NMDevice *device, NMDeviceStateReason *out_failure_reason) if (NM_IN_STRSET(mode, NULL, NM_SETTING_WIRELESS_MODE_INFRA)) { gs_unref_object GDBusProxy *network_proxy = NULL; NMWifiAP * ap = priv->current_ap; + NMSettingWirelessSecurity * s_wireless_sec; if (!ap) { NM_SET_OUT(out_failure_reason, NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED); @@ -2335,6 +2346,15 @@ act_stage2_config(NMDevice *device, NMDeviceStateReason *out_failure_reason) if (!priv->cancellable) priv->cancellable = g_cancellable_new(); + s_wireless_sec = nm_connection_get_setting_wireless_security(connection); + if (s_wireless_sec + && nm_streq0(nm_setting_wireless_security_get_key_mgmt(s_wireless_sec), "owe")) { + _LOGI(LOGD_WIFI, + "An OWE connection is requested but IWD may connect to either an OWE " + "or unsecured network and there won't be any indication of whether " + "encryption is in use -- proceed at your own risk!"); + } + /* Call Network.Connect. No timeout because IWD already handles * timeouts. */ diff --git a/src/core/devices/wifi/nm-device-olpc-mesh.c b/src/core/devices/wifi/nm-device-olpc-mesh.c index 1554411..af83c4a 100644 --- a/src/core/devices/wifi/nm-device-olpc-mesh.c +++ b/src/core/devices/wifi/nm-device-olpc-mesh.c @@ -8,7 +8,7 @@ * Copyright (C) 2009 One Laptop per Child */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-olpc-mesh.h" diff --git a/src/core/devices/wifi/nm-device-wifi-p2p.c b/src/core/devices/wifi/nm-device-wifi-p2p.c index b2f071f..fb98760 100644 --- a/src/core/devices/wifi/nm-device-wifi-p2p.c +++ b/src/core/devices/wifi/nm-device-wifi-p2p.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-wifi-p2p.h" diff --git a/src/core/devices/wifi/nm-device-wifi.c b/src/core/devices/wifi/nm-device-wifi.c index 6375412..042d488 100644 --- a/src/core/devices/wifi/nm-device-wifi.c +++ b/src/core/devices/wifi/nm-device-wifi.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-wifi.h" @@ -1745,6 +1745,23 @@ _scan_kickoff(NMDeviceWifi *self) return; } + if (priv->scan_last_complete_msec + 200 > now_msec) { + gint32 timeout_msec = priv->scan_last_complete_msec + 200 - now_msec; + + /* after a scan just completed, it is ratelimited for another 200 msec. This is in + * addition to our rate limiting above (where scanning can take longer than our rate limit + * duration). + * + * This gives the device a chance to autoconnect. Also, if a scanning just completed, + * we want to back off a bit before starting again. */ + _LOGT_scan("kickoff: don't scan (rate limited for another %d.%03d sec after previous scan)", + timeout_msec / 1000, + timeout_msec % 1000); + nm_clear_g_source(&priv->scan_kickoff_timeout_id); + priv->scan_kickoff_timeout_id = g_timeout_add(timeout_msec, _scan_kickoff_timeout_cb, self); + return; + } + if (priv->scan_explicit_requested) { if (!priv->scan_explicit_allowed) { _LOGT_scan("kickoff: don't scan (explicit scan requested but not allowed)"); diff --git a/src/core/devices/wifi/nm-iwd-manager.c b/src/core/devices/wifi/nm-iwd-manager.c index 5ded8e1..b4b019d 100644 --- a/src/core/devices/wifi/nm-iwd-manager.c +++ b/src/core/devices/wifi/nm-iwd-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Intel Corporation */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-iwd-manager.h" @@ -533,7 +533,7 @@ mirror_connection(NMIwdManager * self, switch (id->security) { case NM_IWD_NETWORK_SECURITY_WEP: - case NM_IWD_NETWORK_SECURITY_NONE: + case NM_IWD_NETWORK_SECURITY_OPEN: case NM_IWD_NETWORK_SECURITY_PSK: break; case NM_IWD_NETWORK_SECURITY_8021X: @@ -615,34 +615,34 @@ mirror_connection(NMIwdManager * self, connection = nm_simple_connection_new(); - setting = NM_SETTING(g_object_new(NM_TYPE_SETTING_CONNECTION, - NM_SETTING_CONNECTION_TYPE, - NM_SETTING_WIRELESS_SETTING_NAME, - NM_SETTING_CONNECTION_ID, - id->name, - NM_SETTING_CONNECTION_UUID, - nm_utils_uuid_generate_buf(uuid), - NM_SETTING_CONNECTION_AUTOCONNECT, - autoconnectable, - NULL)); + setting = g_object_new(NM_TYPE_SETTING_CONNECTION, + NM_SETTING_CONNECTION_TYPE, + NM_SETTING_WIRELESS_SETTING_NAME, + NM_SETTING_CONNECTION_ID, + id->name, + NM_SETTING_CONNECTION_UUID, + nm_utils_uuid_generate_buf(uuid), + NM_SETTING_CONNECTION_AUTOCONNECT, + autoconnectable, + NULL); nm_connection_add_setting(connection, setting); new_ssid = g_bytes_new(id->name, ssid_len); - setting = NM_SETTING(g_object_new(NM_TYPE_SETTING_WIRELESS, - NM_SETTING_WIRELESS_SSID, - new_ssid, - NM_SETTING_WIRELESS_MODE, - NM_SETTING_WIRELESS_MODE_INFRA, - NM_SETTING_WIRELESS_HIDDEN, - hidden, - NULL)); + setting = g_object_new(NM_TYPE_SETTING_WIRELESS, + NM_SETTING_WIRELESS_SSID, + new_ssid, + NM_SETTING_WIRELESS_MODE, + NM_SETTING_WIRELESS_MODE_INFRA, + NM_SETTING_WIRELESS_HIDDEN, + hidden, + NULL); nm_connection_add_setting(connection, setting); switch (id->security) { case NM_IWD_NETWORK_SECURITY_WEP: key_mgmt = "none"; break; - case NM_IWD_NETWORK_SECURITY_NONE: + case NM_IWD_NETWORK_SECURITY_OPEN: key_mgmt = NULL; break; case NM_IWD_NETWORK_SECURITY_PSK: @@ -654,12 +654,12 @@ mirror_connection(NMIwdManager * self, } if (key_mgmt) { - setting = NM_SETTING(g_object_new(NM_TYPE_SETTING_WIRELESS_SECURITY, - NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, - "open", - NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, - key_mgmt, - NULL)); + setting = g_object_new(NM_TYPE_SETTING_WIRELESS_SECURITY, + NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, + "open", + NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, + key_mgmt, + NULL); nm_connection_add_setting(connection, setting); } @@ -670,12 +670,12 @@ mirror_connection(NMIwdManager * self, * NM settings. The saved values can not be used anyway because of our * use of NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW. */ - setting = NM_SETTING(g_object_new(NM_TYPE_SETTING_802_1X, - NM_SETTING_802_1X_PASSWORD_FLAGS, - NM_SETTING_SECRET_FLAG_NOT_SAVED, - NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, - NM_SETTING_SECRET_FLAG_NOT_SAVED, - NULL)); + setting = g_object_new(NM_TYPE_SETTING_802_1X, + NM_SETTING_802_1X_PASSWORD_FLAGS, + NM_SETTING_SECRET_FLAG_NOT_SAVED, + NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, + NM_SETTING_SECRET_FLAG_NOT_SAVED, + NULL); nm_setting_802_1x_add_eap_method(NM_SETTING_802_1X(setting), "external"); nm_connection_add_setting(connection, setting); } @@ -758,7 +758,7 @@ interface_added(GDBusObjectManager *object_manager, return; if (nm_streq(type_str, "open")) - security = NM_IWD_NETWORK_SECURITY_NONE; + security = NM_IWD_NETWORK_SECURITY_OPEN; else if (nm_streq(type_str, "psk")) security = NM_IWD_NETWORK_SECURITY_PSK; else if (nm_streq(type_str, "8021x")) @@ -840,7 +840,7 @@ interface_removed(GDBusObjectManager *object_manager, return; if (nm_streq(type_str, "open")) - id.security = NM_IWD_NETWORK_SECURITY_NONE; + id.security = NM_IWD_NETWORK_SECURITY_OPEN; else if (nm_streq(type_str, "psk")) id.security = NM_IWD_NETWORK_SECURITY_PSK; else if (nm_streq(type_str, "8021x")) @@ -1242,7 +1242,7 @@ nm_iwd_manager_get_ap_mirror_connection(NMIwdManager *self, NMWifiAP *ap) NMIwdManagerPrivate * priv = NM_IWD_MANAGER_GET_PRIVATE(self); KnownNetworkData * data; char name_buf[33]; - KnownNetworkId kn_id = {name_buf, NM_IWD_NETWORK_SECURITY_NONE}; + KnownNetworkId kn_id = {name_buf, NM_IWD_NETWORK_SECURITY_OPEN}; const guint8 * ssid_bytes; gsize ssid_len; NM80211ApFlags flags = nm_wifi_ap_get_flags(ap); diff --git a/src/core/devices/wifi/nm-wifi-ap.c b/src/core/devices/wifi/nm-wifi-ap.c index 4df2f35..08fa10e 100644 --- a/src/core/devices/wifi/nm-wifi-ap.c +++ b/src/core/devices/wifi/nm-wifi-ap.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-wifi-ap.h" diff --git a/src/core/devices/wifi/nm-wifi-common.c b/src/core/devices/wifi/nm-wifi-common.c index 053537a..c715c07 100644 --- a/src/core/devices/wifi/nm-wifi-common.c +++ b/src/core/devices/wifi/nm-wifi-common.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-wifi-common.h" diff --git a/src/core/devices/wifi/nm-wifi-factory.c b/src/core/devices/wifi/nm-wifi-factory.c index c4afd3f..40375e1 100644 --- a/src/core/devices/wifi/nm-wifi-factory.c +++ b/src/core/devices/wifi/nm-wifi-factory.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/devices/wifi/nm-wifi-p2p-peer.c b/src/core/devices/wifi/nm-wifi-p2p-peer.c index 01f4f9b..8488f32 100644 --- a/src/core/devices/wifi/nm-wifi-p2p-peer.c +++ b/src/core/devices/wifi/nm-wifi-p2p-peer.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-wifi-p2p-peer.h" diff --git a/src/core/devices/wifi/nm-wifi-utils.c b/src/core/devices/wifi/nm-wifi-utils.c index f0b772c..aed236c 100644 --- a/src/core/devices/wifi/nm-wifi-utils.c +++ b/src/core/devices/wifi/nm-wifi-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-wifi-utils.h" @@ -923,7 +923,7 @@ nm_wifi_connection_get_iwd_ssid_and_security(NMConnection * connection, s_wireless_sec = nm_connection_get_setting_wireless_security(connection); if (!s_wireless_sec) { - NM_SET_OUT(security, NM_IWD_NETWORK_SECURITY_NONE); + NM_SET_OUT(security, NM_IWD_NETWORK_SECURITY_OPEN); return TRUE; } @@ -932,7 +932,9 @@ nm_wifi_connection_get_iwd_ssid_and_security(NMConnection * connection, if (NM_IN_STRSET(key_mgmt, "none", "ieee8021x")) NM_SET_OUT(security, NM_IWD_NETWORK_SECURITY_WEP); - else if (nm_streq(key_mgmt, "wpa-psk")) + else if (nm_streq(key_mgmt, "owe")) + NM_SET_OUT(security, NM_IWD_NETWORK_SECURITY_OPEN); + else if (NM_IN_STRSET(key_mgmt, "wpa-psk", "sae")) NM_SET_OUT(security, NM_IWD_NETWORK_SECURITY_PSK); else if (nm_streq(key_mgmt, "wpa-eap")) NM_SET_OUT(security, NM_IWD_NETWORK_SECURITY_8021X); diff --git a/src/core/devices/wifi/nm-wifi-utils.h b/src/core/devices/wifi/nm-wifi-utils.h index 6646bca..474bea4 100644 --- a/src/core/devices/wifi/nm-wifi-utils.h +++ b/src/core/devices/wifi/nm-wifi-utils.h @@ -13,7 +13,7 @@ #include "nm-setting-8021x.h" typedef enum { - NM_IWD_NETWORK_SECURITY_NONE, + NM_IWD_NETWORK_SECURITY_OPEN, NM_IWD_NETWORK_SECURITY_WEP, NM_IWD_NETWORK_SECURITY_PSK, NM_IWD_NETWORK_SECURITY_8021X, diff --git a/src/core/devices/wifi/tests/test-devices-wifi.c b/src/core/devices/wifi/tests/test-devices-wifi.c index 3ff0963..bc0ba12 100644 --- a/src/core/devices/wifi/tests/test-devices-wifi.c +++ b/src/core/devices/wifi/tests/test-devices-wifi.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "devices/wifi/nm-wifi-utils.h" #include "devices/wifi/nm-device-wifi.h" diff --git a/src/core/devices/wwan/nm-device-modem.c b/src/core/devices/wwan/nm-device-modem.c index a715ceb..3ea89d2 100644 --- a/src/core/devices/wwan/nm-device-modem.c +++ b/src/core/devices/wwan/nm-device-modem.c @@ -3,7 +3,7 @@ * Copyright (C) 2009 - 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-device-modem.h" diff --git a/src/core/devices/wwan/nm-modem-broadband.c b/src/core/devices/wwan/nm-modem-broadband.c index d2debac..ca02880 100644 --- a/src/core/devices/wwan/nm-modem-broadband.c +++ b/src/core/devices/wwan/nm-modem-broadband.c @@ -3,7 +3,7 @@ * Copyright (C) 2012 Aleksander Morgado */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-modem-broadband.h" #include "nm-service-providers.h" diff --git a/src/core/devices/wwan/nm-modem-manager.c b/src/core/devices/wwan/nm-modem-manager.c index d05c77a..598c689 100644 --- a/src/core/devices/wwan/nm-modem-manager.c +++ b/src/core/devices/wwan/nm-modem-manager.c @@ -5,7 +5,7 @@ * Copyright (C) 2009 - 2013 Canonical Ltd. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-modem-manager.h" diff --git a/src/core/devices/wwan/nm-modem-ofono.c b/src/core/devices/wwan/nm-modem-ofono.c index ec43cd8..21734ce 100644 --- a/src/core/devices/wwan/nm-modem-ofono.c +++ b/src/core/devices/wwan/nm-modem-ofono.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 - 2016 Canonical Ltd. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-modem-ofono.h" diff --git a/src/core/devices/wwan/nm-modem.c b/src/core/devices/wwan/nm-modem.c index 4e44122..0d334fa 100644 --- a/src/core/devices/wwan/nm-modem.c +++ b/src/core/devices/wwan/nm-modem.c @@ -4,7 +4,7 @@ * Copyright (C) 2009 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-modem.h" diff --git a/src/core/devices/wwan/nm-service-providers.c b/src/core/devices/wwan/nm-service-providers.c index b918703..89add6c 100644 --- a/src/core/devices/wwan/nm-service-providers.c +++ b/src/core/devices/wwan/nm-service-providers.c @@ -6,7 +6,7 @@ * Copyright (C) 2012 Lanedo GmbH */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-service-providers.h" diff --git a/src/core/devices/wwan/nm-wwan-factory.c b/src/core/devices/wwan/nm-wwan-factory.c index 7418d7a..5d2ce2b 100644 --- a/src/core/devices/wwan/nm-wwan-factory.c +++ b/src/core/devices/wwan/nm-wwan-factory.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/devices/wwan/tests/test-service-providers.c b/src/core/devices/wwan/tests/test-service-providers.c index 2c54a76..f95cccf 100644 --- a/src/core/devices/wwan/tests/test-service-providers.c +++ b/src/core/devices/wwan/tests/test-service-providers.c @@ -3,7 +3,7 @@ * Copyright (C) 2019 Red Hat */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-service-providers.h" diff --git a/src/core/dhcp/meson.build b/src/core/dhcp/meson.build index ea0d056..1bb004c 100644 --- a/src/core/dhcp/meson.build +++ b/src/core/dhcp/meson.build @@ -1,17 +1,12 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -name = 'nm-dhcp-helper' - -c_flags = [ - '-DG_LOG_DOMAIN="@0@"'.format(name), - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_GLIB', -] - executable( - name, - name + '.c', + 'nm-dhcp-helper', + 'nm-dhcp-helper.c', dependencies: glib_nm_default_dep, - c_args: c_flags, + c_args: [ + '-DG_LOG_DOMAIN="nm-dhcp-helper"', + ], link_args: ldflags_linker_script_binary, link_depends: linker_script_binary, install: true, diff --git a/src/core/dhcp/nm-dhcp-client.c b/src/core/dhcp/nm-dhcp-client.c index 3ee8510..c38c814 100644 --- a/src/core/dhcp/nm-dhcp-client.c +++ b/src/core/dhcp/nm-dhcp-client.c @@ -3,7 +3,7 @@ * Copyright (C) 2005 - 2010 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dhcp-client.h" @@ -20,6 +20,7 @@ #include "NetworkManagerUtils.h" #include "nm-utils.h" #include "nm-dhcp-utils.h" +#include "nm-dhcp-options.h" #include "platform/nm-platform.h" #include "nm-dhcp-client-logging.h" @@ -437,8 +438,7 @@ nm_dhcp_client_set_state(NMDhcpClient *self, NMIPConfig * ip_config, GHashTable * options) { - NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE(self); - gs_free char * event_id = NULL; + NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE(self); if (NM_IN_SET(new_state, NM_DHCP_STATE_BOUND, NM_DHCP_STATE_EXTENDED)) { g_return_if_fail(NM_IS_IP_CONFIG_ADDR_FAMILY(ip_config, priv->addr_family)); @@ -462,23 +462,36 @@ nm_dhcp_client_set_state(NMDhcpClient *self, && !NM_IN_SET(new_state, NM_DHCP_STATE_BOUND, NM_DHCP_STATE_EXTENDED)) return; - if (_LOGI_ENABLED()) { + if (_LOGD_ENABLED()) { gs_free const char **keys = NULL; guint i, nkeys; keys = nm_utils_strdict_get_keys(options, TRUE, &nkeys); for (i = 0; i < nkeys; i++) { - _LOGI("option %-20s => '%s'", keys[i], (char *) g_hash_table_lookup(options, keys[i])); + _LOGD("option %-20s => '%s'", keys[i], (char *) g_hash_table_lookup(options, keys[i])); } } - if (priv->addr_family == AF_INET6) + if (_LOGT_ENABLED() && priv->addr_family == AF_INET6) { + gs_free char *event_id = NULL; + event_id = nm_dhcp_utils_get_dhcp6_event_id(options); + if (event_id) + _LOGT("event-id: \"%s\"", event_id); + } - _LOGI("state changed %s -> %s%s%s%s", - state_to_string(priv->state), - state_to_string(new_state), - NM_PRINT_FMT_QUOTED(event_id, ", event ID=\"", event_id, "\"", "")); + if (_LOGI_ENABLED()) { + const char *req_str = + NM_IS_IPv4(priv->addr_family) + ? nm_dhcp_option_request_string(AF_INET, NM_DHCP_OPTION_DHCP4_NM_IP_ADDRESS) + : nm_dhcp_option_request_string(AF_INET6, NM_DHCP_OPTION_DHCP6_NM_IP_ADDRESS); + const char *addr = nm_g_hash_table_lookup(options, req_str); + + _LOGI("state changed %s -> %s%s%s%s", + state_to_string(priv->state), + state_to_string(new_state), + NM_PRINT_FMT_QUOTED(addr, ", address=", addr, "", "")); + } priv->state = new_state; g_signal_emit(G_OBJECT(self), signals[SIGNAL_STATE_CHANGED], 0, new_state, ip_config, options); diff --git a/src/core/dhcp/nm-dhcp-dhclient-utils.c b/src/core/dhcp/nm-dhcp-dhclient-utils.c index 14a2b96..ad1e097 100644 --- a/src/core/dhcp/nm-dhcp-dhclient-utils.c +++ b/src/core/dhcp/nm-dhcp-dhclient-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dhcp-dhclient-utils.h" diff --git a/src/core/dhcp/nm-dhcp-dhclient.c b/src/core/dhcp/nm-dhcp-dhclient.c index 53d1ba7..c42a0ba 100644 --- a/src/core/dhcp/nm-dhcp-dhclient.c +++ b/src/core/dhcp/nm-dhcp-dhclient.c @@ -10,7 +10,7 @@ #include #undef _XOPEN_SOURCE -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #if WITH_DHCLIENT @@ -437,6 +437,12 @@ dhclient_start(NMDhcpClient *client, if (addr_family == AF_INET6) { g_ptr_array_add(argv, (gpointer) "-6"); + + if (prefixes > 0 && nm_streq0(mode_opt, "-S")) { + /* -S is incompatible with -P, only use the latter */ + mode_opt = NULL; + } + if (mode_opt) g_ptr_array_add(argv, (gpointer) mode_opt); while (prefixes--) diff --git a/src/core/dhcp/nm-dhcp-dhcpcanon.c b/src/core/dhcp/nm-dhcp-dhcpcanon.c index db75958..3504a04 100644 --- a/src/core/dhcp/nm-dhcp-dhcpcanon.c +++ b/src/core/dhcp/nm-dhcp-dhcpcanon.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 juga */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #if WITH_DHCPCANON diff --git a/src/core/dhcp/nm-dhcp-dhcpcd.c b/src/core/dhcp/nm-dhcp-dhcpcd.c index 4f45c3a..cf9fe5c 100644 --- a/src/core/dhcp/nm-dhcp-dhcpcd.c +++ b/src/core/dhcp/nm-dhcp-dhcpcd.c @@ -4,7 +4,7 @@ * Copyright (C) 2010 Dan Williams */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #if WITH_DHCPCD diff --git a/src/core/dhcp/nm-dhcp-helper.c b/src/core/dhcp/nm-dhcp-helper.c index 94ee181..0f98add 100644 --- a/src/core/dhcp/nm-dhcp-helper.c +++ b/src/core/dhcp/nm-dhcp-helper.c @@ -3,7 +3,7 @@ * Copyright (C) 2007 - 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib.h" #include #include diff --git a/src/core/dhcp/nm-dhcp-listener.c b/src/core/dhcp/nm-dhcp-listener.c index 279ce49..1673bbb 100644 --- a/src/core/dhcp/nm-dhcp-listener.c +++ b/src/core/dhcp/nm-dhcp-listener.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 - 2016 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dhcp-listener.h" diff --git a/src/core/dhcp/nm-dhcp-manager.c b/src/core/dhcp/nm-dhcp-manager.c index ca99122..bc114ad 100644 --- a/src/core/dhcp/nm-dhcp-manager.c +++ b/src/core/dhcp/nm-dhcp-manager.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dhcp-manager.h" diff --git a/src/core/dhcp/nm-dhcp-nettools.c b/src/core/dhcp/nm-dhcp-nettools.c index 87e17f5..116e1bd 100644 --- a/src/core/dhcp/nm-dhcp-nettools.c +++ b/src/core/dhcp/nm-dhcp-nettools.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 - 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include @@ -13,10 +13,9 @@ #include #include -#include "nm-sd-adapt-shared.h" - #include "nm-glib-aux/nm-dedup-multi.h" #include "nm-std-aux/unaligned.h" +#include "nm-glib-aux/nm-str-buf.h" #include "nm-utils.h" #include "nm-config.h" @@ -83,66 +82,39 @@ set_error_nettools(GError **error, int r, const char *message) nm_utils_error_set(error, r, "%s (code %d)", message, r); } -/*****************************************************************************/ - -#define DHCP_MAX_FQDN_LENGTH 255 - -enum { - NM_IN_ADDR_CLASS_A, - NM_IN_ADDR_CLASS_B, - NM_IN_ADDR_CLASS_C, - NM_IN_ADDR_CLASS_INVALID, -}; - -static int -in_addr_class(struct in_addr addr) +static inline int +_client_lease_query(NDhcp4ClientLease *lease, + uint8_t option, + const uint8_t ** datap, + size_t * n_datap) { - switch (ntohl(addr.s_addr) >> 24) { - case 0 ... 127: - return NM_IN_ADDR_CLASS_A; - case 128 ... 191: - return NM_IN_ADDR_CLASS_B; - case 192 ... 223: - return NM_IN_ADDR_CLASS_C; - default: - return NM_IN_ADDR_CLASS_INVALID; - } + return n_dhcp4_client_lease_query(lease, option, (guint8 **) datap, n_datap); } -static gboolean -lease_option_consume(void *out, size_t n_out, uint8_t **datap, size_t *n_datap) -{ - if (*n_datap < n_out) - return FALSE; +/*****************************************************************************/ - memcpy(out, *datap, n_out); - *datap += n_out; - *n_datap -= n_out; - return TRUE; -} +#define DHCP_MAX_FQDN_LENGTH 255 -static gboolean -lease_option_next_in_addr(struct in_addr *addrp, uint8_t **datap, size_t *n_datap) -{ - return lease_option_consume(addrp, sizeof(struct in_addr), datap, n_datap); -} +/*****************************************************************************/ static gboolean -lease_option_next_route(struct in_addr *destp, - uint8_t * plenp, - struct in_addr *gatewayp, - gboolean classless, - uint8_t ** datap, - size_t * n_datap) +lease_option_consume_route(const uint8_t **datap, + size_t * n_datap, + gboolean classless, + in_addr_t * destp, + uint8_t * plenp, + in_addr_t * gatewayp) { - struct in_addr dest = {}, gateway; - uint8_t * data = *datap; + in_addr_t dest; + in_addr_t gateway; + const uint8_t *data = *datap; size_t n_data = *n_datap; uint8_t plen; - uint8_t bytes; if (classless) { - if (!lease_option_consume(&plen, sizeof(plen), &data, &n_data)) + uint8_t bytes; + + if (!nm_dhcp_lease_data_consume(&data, &n_data, &plen, sizeof(plen))) return FALSE; if (plen > 32) @@ -150,30 +122,21 @@ lease_option_next_route(struct in_addr *destp, bytes = plen == 0 ? 0 : ((plen - 1) / 8) + 1; - if (!lease_option_consume(&dest, bytes, &data, &n_data)) + dest = 0; + if (!nm_dhcp_lease_data_consume(&data, &n_data, &dest, bytes)) return FALSE; } else { - if (!lease_option_next_in_addr(&dest, &data, &n_data)) + if (!nm_dhcp_lease_data_consume_in_addr(&data, &n_data, &dest)) return FALSE; - switch (in_addr_class(dest)) { - case NM_IN_ADDR_CLASS_A: - plen = 8; - break; - case NM_IN_ADDR_CLASS_B: - plen = 16; - break; - case NM_IN_ADDR_CLASS_C: - plen = 24; - break; - case NM_IN_ADDR_CLASS_INVALID: + plen = _nm_utils_ip4_get_default_prefix0(dest); + if (plen == 0) return FALSE; - } } - dest.s_addr = nm_utils_ip4_address_clear_host_address(dest.s_addr, plen); + dest = nm_utils_ip4_address_clear_host_address(dest, plen); - if (!lease_option_next_in_addr(&gateway, &data, &n_data)) + if (!nm_dhcp_lease_data_consume_in_addr(&data, &n_data, &gateway)) return FALSE; *destp = dest; @@ -184,170 +147,7 @@ lease_option_next_route(struct in_addr *destp, return TRUE; } -static gboolean -lease_option_print_label(GString *str, size_t n_label, uint8_t **datap, size_t *n_datap) -{ - for (size_t i = 0; i < n_label; ++i) { - uint8_t c; - - if (!lease_option_consume(&c, sizeof(c), datap, n_datap)) - return FALSE; - - switch (c) { - case 'a' ... 'z': - case 'A' ... 'Z': - case '0' ... '9': - case '-': - case '_': - g_string_append_c(str, c); - break; - case '.': - case '\\': - g_string_append_printf(str, "\\%c", c); - break; - default: - g_string_append_printf(str, "\\%3d", c); - } - } - - return TRUE; -} - -static gboolean -lease_option_print_domain_name(GString * str, - uint8_t * cache, - size_t * n_cachep, - uint8_t **datap, - size_t * n_datap) -{ - uint8_t * domain; - size_t n_domain, n_cache = *n_cachep; - uint8_t **domainp = datap; - size_t * n_domainp = n_datap; - gboolean first = TRUE; - uint8_t c; - - /* - * We are given two adjacent memory regions. The @cache contains alreday parsed - * domain names, and the @datap contains the remaining data to parse. - * - * A domain name is formed from a sequence of labels. Each label start with - * a length byte, where the two most significant bits are unset. A zero-length - * label indicates the end of the domain name. - * - * Alternatively, a label can be followed by an offset (indicated by the two - * most significant bits being set in the next byte that is read). The offset - * is an offset into the cache, where the next label of the domain name can - * be found. - * - * Note, that each time a jump to an offset is performed, the size of the - * cache shrinks, so this is guaranteed to terminate. - */ - if (cache + n_cache != *datap) - return FALSE; - - for (;;) { - if (!lease_option_consume(&c, sizeof(c), domainp, n_domainp)) - return FALSE; - - switch (c & 0xC0) { - case 0x00: /* label length */ - { - size_t n_label = c; - - if (n_label == 0) { - /* - * We reached the final label of the domain name. Adjust - * the cache to include the consumed data, and return. - */ - *n_cachep = *datap - cache; - return TRUE; - } - - if (!first) - g_string_append_c(str, '.'); - else - first = FALSE; - - if (!lease_option_print_label(str, n_label, domainp, n_domainp)) - return FALSE; - - break; - } - case 0xC0: /* back pointer */ - { - size_t offset = (c & 0x3F) << 16; - - /* - * The offset is given as two bytes (in big endian), where the - * two high bits are masked out. - */ - - if (!lease_option_consume(&c, sizeof(c), domainp, n_domainp)) - return FALSE; - - offset += c; - - if (offset >= n_cache) - return FALSE; - - domain = cache + offset; - n_domain = n_cache - offset; - n_cache = offset; - - domainp = &domain; - n_domainp = &n_domain; - - break; - } - default: - return FALSE; - } - } -} - -static gboolean -lease_get_in_addr(NDhcp4ClientLease *lease, guint8 option, struct in_addr *addrp) -{ - struct in_addr addr; - uint8_t * data; - size_t n_data; - int r; - - r = n_dhcp4_client_lease_query(lease, option, &data, &n_data); - if (r) - return FALSE; - - if (!lease_option_next_in_addr(&addr, &data, &n_data)) - return FALSE; - - if (n_data != 0) - return FALSE; - - *addrp = addr; - return TRUE; -} - -static gboolean -lease_get_u16(NDhcp4ClientLease *lease, uint8_t option, uint16_t *u16p) -{ - uint8_t *data; - size_t n_data; - uint16_t be16; - int r; - - r = n_dhcp4_client_lease_query(lease, option, &data, &n_data); - if (r) - return FALSE; - - if (n_data != sizeof(be16)) - return FALSE; - - memcpy(&be16, data, sizeof(be16)); - - *u16p = ntohs(be16); - return TRUE; -} +/*****************************************************************************/ static gboolean lease_parse_address(NDhcp4ClientLease *lease, @@ -355,15 +155,17 @@ lease_parse_address(NDhcp4ClientLease *lease, GHashTable * options, GError ** error) { - char addr_str[NM_UTILS_INET_ADDRSTRLEN]; struct in_addr a_address; - struct in_addr a_netmask; + in_addr_t a_netmask; struct in_addr a_next_server; guint32 a_plen; guint64 nettools_lifetime; guint32 a_lifetime; guint32 a_timestamp; guint64 a_expiry; + const guint8 * l_data; + gsize l_data_len; + int r; n_dhcp4_client_lease_get_yiaddr(lease, &a_address); if (a_address.s_addr == INADDR_ANY) { @@ -418,44 +220,40 @@ lease_parse_address(NDhcp4ClientLease *lease, / NM_UTILS_NSEC_PER_SEC); } - if (!lease_get_in_addr(lease, NM_DHCP_OPTION_DHCP4_SUBNET_MASK, &a_netmask)) { + r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_SUBNET_MASK, &l_data, &l_data_len); + if (r != 0 || !nm_dhcp_lease_data_parse_in_addr(l_data, l_data_len, &a_netmask)) { nm_utils_error_set_literal(error, NM_UTILS_ERROR_UNKNOWN, "could not get netmask from lease"); return FALSE; } - _nm_utils_inet4_ntop(a_address.s_addr, addr_str); - a_plen = nm_utils_ip4_netmask_to_prefix(a_netmask.s_addr); + a_plen = nm_utils_ip4_netmask_to_prefix(a_netmask); - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_NM_IP_ADDRESS, - addr_str); - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_SUBNET_MASK, - _nm_utils_inet4_ntop(a_netmask.s_addr, addr_str)); + nm_dhcp_option_add_option_in_addr(options, + AF_INET, + NM_DHCP_OPTION_DHCP4_NM_IP_ADDRESS, + a_address.s_addr); + nm_dhcp_option_add_option_in_addr(options, + AF_INET, + NM_DHCP_OPTION_DHCP4_SUBNET_MASK, + a_netmask); nm_dhcp_option_add_option_u64(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_IP_ADDRESS_LEASE_TIME, (guint64) a_lifetime); if (a_expiry != G_MAXUINT64) { - nm_dhcp_option_add_option_u64(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_NM_EXPIRY, - a_expiry); + nm_dhcp_option_add_option_u64(options, AF_INET, NM_DHCP_OPTION_DHCP4_NM_EXPIRY, a_expiry); } n_dhcp4_client_lease_get_siaddr(lease, &a_next_server); if (a_next_server.s_addr != INADDR_ANY) { - _nm_utils_inet4_ntop(a_next_server.s_addr, addr_str); - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_NM_NEXT_SERVER, - addr_str); + nm_dhcp_option_add_option_in_addr(options, + AF_INET, + NM_DHCP_OPTION_DHCP4_NM_NEXT_SERVER, + a_next_server.s_addr); } nm_ip4_config_add_address(ip4_config, @@ -476,46 +274,52 @@ static void lease_parse_address_list(NDhcp4ClientLease * lease, NMIP4Config * ip4_config, NMDhcpOptionDhcp4Options option, - GHashTable * options) + GHashTable * options, + NMStrBuf * sbuf) { - nm_auto_free_gstring GString *str = NULL; - char addr_str[NM_UTILS_INET_ADDRSTRLEN]; - struct in_addr addr; - uint8_t * data; - size_t n_data; - int r; - - r = n_dhcp4_client_lease_query(lease, option, &data, &n_data); - if (r) + const guint8 *l_data; + gsize l_data_len; + int r; + + r = _client_lease_query(lease, option, &l_data, &l_data_len); + if (r != 0) + return; + + if (l_data_len == 0 || l_data_len % 4 != 0) return; - nm_gstring_prepare(&str); + nm_str_buf_reset(sbuf); - while (lease_option_next_in_addr(&addr, &data, &n_data)) { - _nm_utils_inet4_ntop(addr.s_addr, addr_str); - g_string_append(nm_gstring_add_space_delimiter(str), addr_str); + for (; l_data_len > 0; l_data_len -= 4, l_data += 4) { + char addr_str[NM_UTILS_INET_ADDRSTRLEN]; + const in_addr_t addr = unaligned_read_ne32(l_data); + + nm_str_buf_append_required_delimiter(sbuf, ' '); + nm_str_buf_append(sbuf, _nm_utils_inet4_ntop(addr, addr_str)); switch (option) { case NM_DHCP_OPTION_DHCP4_DOMAIN_NAME_SERVER: - if (addr.s_addr == 0 || nm_ip4_addr_is_localhost(addr.s_addr)) { + if (addr == 0 || nm_ip4_addr_is_localhost(addr)) { /* Skip localhost addresses, like also networkd does. * See https://github.com/systemd/systemd/issues/4524. */ continue; } - nm_ip4_config_add_nameserver(ip4_config, addr.s_addr); + nm_ip4_config_add_nameserver(ip4_config, addr); break; case NM_DHCP_OPTION_DHCP4_NIS_SERVERS: - nm_ip4_config_add_nis_server(ip4_config, addr.s_addr); + nm_ip4_config_add_nis_server(ip4_config, addr); break; case NM_DHCP_OPTION_DHCP4_NETBIOS_NAMESERVER: - nm_ip4_config_add_wins(ip4_config, addr.s_addr); + nm_ip4_config_add_wins(ip4_config, addr); + break; + case NM_DHCP_OPTION_DHCP4_NTP_SERVER: break; default: nm_assert_not_reached(); } } - nm_dhcp_option_add_option(options, _nm_dhcp_option_dhcp4_options, option, str->str); + nm_dhcp_option_add_option(options, AF_INET, option, nm_str_buf_get_str(sbuf)); } static void @@ -523,39 +327,37 @@ lease_parse_routes(NDhcp4ClientLease *lease, NMIP4Config * ip4_config, GHashTable * options, guint32 route_table, - guint32 route_metric) + guint32 route_metric, + NMStrBuf * sbuf) { - nm_auto_free_gstring GString *str = NULL; - char dest_str[NM_UTILS_INET_ADDRSTRLEN]; - char gateway_str[NM_UTILS_INET_ADDRSTRLEN]; - const char * s; - struct in_addr dest, gateway; - uint8_t plen; - guint32 m; - gboolean has_router_from_classless = FALSE, has_classless = FALSE; - guint32 default_route_metric = route_metric; - uint8_t * data; - size_t n_data; - int r; - - r = n_dhcp4_client_lease_query(lease, - NM_DHCP_OPTION_DHCP4_CLASSLESS_STATIC_ROUTE, - &data, - &n_data); - if (!r) { - nm_gstring_prepare(&str); + char dest_str[NM_UTILS_INET_ADDRSTRLEN]; + char gateway_str[NM_UTILS_INET_ADDRSTRLEN]; + in_addr_t dest; + in_addr_t gateway; + uint8_t plen; + guint32 m; + gboolean has_router_from_classless = FALSE; + gboolean has_classless = FALSE; + guint32 default_route_metric = route_metric; + const guint8 *l_data; + gsize l_data_len; + int r; + + r = _client_lease_query(lease, + NM_DHCP_OPTION_DHCP4_CLASSLESS_STATIC_ROUTE, + &l_data, + &l_data_len); + if (r == 0) { + nm_str_buf_reset(sbuf); has_classless = TRUE; - while (lease_option_next_route(&dest, &plen, &gateway, TRUE, &data, &n_data)) { - _nm_utils_inet4_ntop(dest.s_addr, dest_str); - _nm_utils_inet4_ntop(gateway.s_addr, gateway_str); + while (lease_option_consume_route(&l_data, &l_data_len, TRUE, &dest, &plen, &gateway)) { + _nm_utils_inet4_ntop(dest, dest_str); + _nm_utils_inet4_ntop(gateway, gateway_str); - g_string_append_printf(nm_gstring_add_space_delimiter(str), - "%s/%d %s", - dest_str, - (int) plen, - gateway_str); + nm_str_buf_append_required_delimiter(sbuf, ' '); + nm_str_buf_append_printf(sbuf, "%s/%d %s", dest_str, (int) plen, gateway_str); if (plen == 0) { /* if there are multiple default routes, we add them with differing @@ -572,34 +374,32 @@ lease_parse_routes(NDhcp4ClientLease *lease, nm_ip4_config_add_route( ip4_config, &((const NMPlatformIP4Route){ - .network = dest.s_addr, + .network = dest, .plen = plen, - .gateway = gateway.s_addr, + .gateway = gateway, .rt_source = NM_IP_CONFIG_SOURCE_DHCP, .metric = m, .table_coerced = nm_platform_route_table_coerce(route_table), }), NULL); } + nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_CLASSLESS_STATIC_ROUTE, - str->str); + nm_str_buf_get_str(sbuf)); } - r = n_dhcp4_client_lease_query(lease, NM_DHCP_OPTION_DHCP4_STATIC_ROUTE, &data, &n_data); - if (!r) { - nm_gstring_prepare(&str); + r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_STATIC_ROUTE, &l_data, &l_data_len); + if (r == 0) { + nm_str_buf_reset(sbuf); - while (lease_option_next_route(&dest, &plen, &gateway, FALSE, &data, &n_data)) { - _nm_utils_inet4_ntop(dest.s_addr, dest_str); - _nm_utils_inet4_ntop(gateway.s_addr, gateway_str); + while (lease_option_consume_route(&l_data, &l_data_len, FALSE, &dest, &plen, &gateway)) { + _nm_utils_inet4_ntop(dest, dest_str); + _nm_utils_inet4_ntop(gateway, gateway_str); - g_string_append_printf(nm_gstring_add_space_delimiter(str), - "%s/%d %s", - dest_str, - (int) plen, - gateway_str); + nm_str_buf_append_required_delimiter(sbuf, ' '); + nm_str_buf_append_printf(sbuf, "%s/%d %s", dest_str, (int) plen, gateway_str); if (has_classless) { /* RFC 3443: if the DHCP server returns both a Classless Static Routes @@ -619,30 +419,31 @@ lease_parse_routes(NDhcp4ClientLease *lease, nm_ip4_config_add_route( ip4_config, &((const NMPlatformIP4Route){ - .network = dest.s_addr, + .network = dest, .plen = plen, - .gateway = gateway.s_addr, + .gateway = gateway, .rt_source = NM_IP_CONFIG_SOURCE_DHCP, .metric = route_metric, .table_coerced = nm_platform_route_table_coerce(route_table), }), NULL); } + nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_STATIC_ROUTE, - str->str); + nm_str_buf_get_str(sbuf)); } - r = n_dhcp4_client_lease_query(lease, NM_DHCP_OPTION_DHCP4_ROUTER, &data, &n_data); - if (!r) { - nm_gstring_prepare(&str); + r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_ROUTER, &l_data, &l_data_len); + if (r == 0) { + nm_str_buf_reset(sbuf); - while (lease_option_next_in_addr(&gateway, &data, &n_data)) { - s = _nm_utils_inet4_ntop(gateway.s_addr, gateway_str); - g_string_append(nm_gstring_add_space_delimiter(str), s); + while (nm_dhcp_lease_data_consume_in_addr(&l_data, &l_data_len, &gateway)) { + nm_str_buf_append_required_delimiter(sbuf, ' '); + nm_str_buf_append(sbuf, _nm_utils_inet4_ntop(gateway, gateway_str)); - if (gateway.s_addr == 0) { + if (gateway == 0) { /* silently skip 0.0.0.0 */ continue; } @@ -667,262 +468,45 @@ lease_parse_routes(NDhcp4ClientLease *lease, ip4_config, &((const NMPlatformIP4Route){ .rt_source = NM_IP_CONFIG_SOURCE_DHCP, - .gateway = gateway.s_addr, + .gateway = gateway, .table_coerced = nm_platform_route_table_coerce(route_table), .metric = m, }), NULL); } + nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_ROUTER, - str->str); - } -} - -static void -lease_parse_mtu(NDhcp4ClientLease *lease, NMIP4Config *ip4_config, GHashTable *options) -{ - uint16_t mtu; - - if (!lease_get_u16(lease, NM_DHCP_OPTION_DHCP4_INTERFACE_MTU, &mtu)) - return; - - if (mtu < 68) - return; - - nm_dhcp_option_add_option_u64(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_INTERFACE_MTU, - mtu); - nm_ip4_config_set_mtu(ip4_config, mtu, NM_IP_CONFIG_SOURCE_DHCP); -} - -static void -lease_parse_metered(NDhcp4ClientLease *lease, NMIP4Config *ip4_config, GHashTable *options) -{ - gboolean metered = FALSE; - uint8_t *data; - size_t n_data; - int r; - - r = n_dhcp4_client_lease_query(lease, NM_DHCP_OPTION_DHCP4_VENDOR_SPECIFIC, &data, &n_data); - if (r) - metered = FALSE; - else - metered = !!memmem(data, n_data, "ANDROID_METERED", NM_STRLEN("ANDROID_METERED")); - - /* TODO: expose the vendor specific option when present */ - nm_ip4_config_set_metered(ip4_config, metered); -} - -static void -lease_parse_ntps(NDhcp4ClientLease *lease, GHashTable *options) -{ - nm_auto_free_gstring GString *str = NULL; - char addr_str[NM_UTILS_INET_ADDRSTRLEN]; - struct in_addr addr; - uint8_t * data; - size_t n_data; - int r; - - r = n_dhcp4_client_lease_query(lease, NM_DHCP_OPTION_DHCP4_NTP_SERVER, &data, &n_data); - if (r) - return; - - nm_gstring_prepare(&str); - - while (lease_option_next_in_addr(&addr, &data, &n_data)) { - _nm_utils_inet4_ntop(addr.s_addr, addr_str); - g_string_append(nm_gstring_add_space_delimiter(str), addr_str); + nm_str_buf_get_str(sbuf)); } - - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_NTP_SERVER, - str->str); -} - -static void -lease_parse_hostname(NDhcp4ClientLease *lease, GHashTable *options) -{ - nm_auto_free_gstring GString *str = NULL; - uint8_t * data; - size_t n_data; - int r; - - r = n_dhcp4_client_lease_query(lease, NM_DHCP_OPTION_DHCP4_HOST_NAME, &data, &n_data); - if (r) - return; - - str = g_string_new_len((char *) data, n_data); - - if (nm_utils_is_localhost(str->str)) - return; - - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_HOST_NAME, - str->str); -} - -static void -lease_parse_domainname(NDhcp4ClientLease *lease, NMIP4Config *ip4_config, GHashTable *options) -{ - nm_auto_free_gstring GString *str = NULL; - gs_strfreev char ** domains = NULL; - uint8_t * data; - size_t n_data; - int r; - - r = n_dhcp4_client_lease_query(lease, NM_DHCP_OPTION_DHCP4_DOMAIN_NAME, &data, &n_data); - if (r) - return; - - str = g_string_new_len((char *) data, n_data); - - /* Multiple domains sometimes stuffed into option 15 "Domain Name". */ - domains = g_strsplit(str->str, " ", 0); - nm_gstring_prepare(&str); - - for (char **d = domains; *d; d++) { - if (nm_utils_is_localhost(*d)) - return; - - g_string_append(nm_gstring_add_space_delimiter(str), *d); - nm_ip4_config_add_domain(ip4_config, *d); - } - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_DOMAIN_NAME, - str->str); -} - -char ** -nm_dhcp_parse_search_list(guint8 *data, size_t n_data) -{ - GPtrArray *array = NULL; - guint8 * cache = data; - size_t n_cache = 0; - - for (;;) { - nm_auto_free_gstring GString *domain = NULL; - - nm_gstring_prepare(&domain); - - if (!lease_option_print_domain_name(domain, cache, &n_cache, &data, &n_data)) - break; - - if (!array) - array = g_ptr_array_new(); - - g_ptr_array_add(array, g_string_free(domain, FALSE)); - domain = NULL; - } - - if (array) { - g_ptr_array_add(array, NULL); - return (char **) g_ptr_array_free(array, FALSE); - } else - return NULL; } static void lease_parse_search_domains(NDhcp4ClientLease *lease, NMIP4Config *ip4_config, GHashTable *options) { - nm_auto_free_gstring GString *str = NULL; - uint8_t * data; - size_t n_data; - gs_strfreev char ** domains = NULL; - guint i; - int r; - - r = n_dhcp4_client_lease_query(lease, NM_DHCP_OPTION_DHCP4_DOMAIN_SEARCH_LIST, &data, &n_data); - if (r) - return; - - domains = nm_dhcp_parse_search_list(data, n_data); - nm_gstring_prepare(&str); - - for (i = 0; domains && domains[i]; i++) { - g_string_append(nm_gstring_add_space_delimiter(str), domains[i]); - nm_ip4_config_add_search(ip4_config, domains[i]); - } - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_DOMAIN_SEARCH_LIST, - str->str); -} - -static void -lease_parse_root_path(NDhcp4ClientLease *lease, GHashTable *options) -{ - nm_auto_free_gstring GString *str = NULL; - uint8_t * data; - size_t n_data; - int r; - - r = n_dhcp4_client_lease_query(lease, NM_DHCP_OPTION_DHCP4_ROOT_PATH, &data, &n_data); - if (r) + gs_strfreev char **domains = NULL; + const guint8 * l_data; + gsize l_data_len; + guint i; + int r; + + r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_DOMAIN_SEARCH_LIST, &l_data, &l_data_len); + if (r != 0) return; - str = g_string_new_len((char *) data, n_data); - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_ROOT_PATH, - str->str); -} - -static void -lease_parse_wpad(NDhcp4ClientLease *lease, GHashTable *options) -{ - gs_free char *wpad = NULL; - uint8_t * data; - size_t n_data; - int r; - - r = n_dhcp4_client_lease_query(lease, - NM_DHCP_OPTION_DHCP4_PRIVATE_PROXY_AUTODISCOVERY, - &data, - &n_data); - if (r) - return; - - nm_utils_buf_utf8safe_escape((char *) data, n_data, 0, &wpad); - if (wpad == NULL) - wpad = g_strndup((char *) data, n_data); - - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_PRIVATE_PROXY_AUTODISCOVERY, - wpad); -} - -static void -lease_parse_nis_domain(NDhcp4ClientLease *lease, NMIP4Config *ip4_config, GHashTable *options) -{ - gs_free char *str_free = NULL; - const char * str; - uint8_t * data; - size_t n_data; - guint i; - int r; + domains = nm_dhcp_lease_data_parse_search_list(l_data, l_data_len); - r = n_dhcp4_client_lease_query(lease, NM_DHCP_OPTION_DHCP4_NIS_DOMAIN, &data, &n_data); - if (r) + if (!domains || !domains[0]) return; - for (i = 0; i < n_data; i++) { - if (!nm_is_ascii((char) data[i])) - return; - } + for (i = 0; domains[i]; i++) + nm_ip4_config_add_search(ip4_config, domains[i]); - str = nm_strndup_a(300, (const char *) data, n_data, &str_free); - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_NIS_DOMAIN, - str); - nm_ip4_config_set_nis_domain(ip4_config, str); + nm_dhcp_option_take_option(options, + AF_INET, + NM_DHCP_OPTION_DHCP4_DOMAIN_SEARCH_LIST, + g_strjoinv(" ", domains)); } static void @@ -932,8 +516,8 @@ lease_parse_private_options(NDhcp4ClientLease *lease, GHashTable *options) for (i = NM_DHCP_OPTION_DHCP4_PRIVATE_224; i <= NM_DHCP_OPTION_DHCP4_PRIVATE_254; i++) { gs_free char *option_string = NULL; - guint8 * data; - gsize n_data; + const guint8 *l_data; + gsize l_data_len; int r; /* We manage private options 249 (private classless static route) and 252 (wpad) in a special @@ -943,15 +527,12 @@ lease_parse_private_options(NDhcp4ClientLease *lease, GHashTable *options) NM_DHCP_OPTION_DHCP4_PRIVATE_PROXY_AUTODISCOVERY)) continue; - r = n_dhcp4_client_lease_query(lease, i, &data, &n_data); + r = _client_lease_query(lease, i, &l_data, &l_data_len); if (r) continue; - option_string = nm_utils_bin2hexstr_full(data, n_data, ':', FALSE, NULL); - nm_dhcp_option_take_option(options, - _nm_dhcp_option_dhcp4_options, - i, - g_steal_pointer(&option_string)); + option_string = nm_utils_bin2hexstr_full(l_data, l_data_len, ':', FALSE, NULL); + nm_dhcp_option_take_option(options, AF_INET, i, g_steal_pointer(&option_string)); } } @@ -965,8 +546,17 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, GHashTable ** out_options, GError ** error) { + nm_auto_str_buf NMStrBuf sbuf = NM_STR_BUF_INIT(0, FALSE); gs_unref_object NMIP4Config *ip4_config = NULL; gs_unref_hashtable GHashTable *options = NULL; + const guint8 * l_data; + gsize l_data_len; + const char * v_str; + guint16 v_u16; + gboolean v_bool; + in_addr_t v_inaddr; + struct in_addr v_inaddr_s; + int r; g_return_val_if_fail(lease != NULL, NULL); @@ -976,20 +566,145 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, if (!lease_parse_address(lease, ip4_config, options, error)) return NULL; - lease_parse_routes(lease, ip4_config, options, route_table, route_metric); - lease_parse_address_list(lease, ip4_config, NM_DHCP_OPTION_DHCP4_DOMAIN_NAME_SERVER, options); - lease_parse_domainname(lease, ip4_config, options); + r = n_dhcp4_client_lease_get_server_identifier(lease, &v_inaddr_s); + if (r == 0) { + nm_dhcp_option_add_option_in_addr(options, + AF_INET, + NM_DHCP_OPTION_DHCP4_SERVER_ID, + v_inaddr_s.s_addr); + } + + r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_BROADCAST, &l_data, &l_data_len); + if (r == 0 && nm_dhcp_lease_data_parse_in_addr(l_data, l_data_len, &v_inaddr)) { + nm_dhcp_option_add_option_in_addr(options, + AF_INET, + NM_DHCP_OPTION_DHCP4_BROADCAST, + v_inaddr); + } + + lease_parse_routes(lease, ip4_config, options, route_table, route_metric, &sbuf); + + lease_parse_address_list(lease, + ip4_config, + NM_DHCP_OPTION_DHCP4_DOMAIN_NAME_SERVER, + options, + &sbuf); + + r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_DOMAIN_NAME, &l_data, &l_data_len); + if (r == 0 && nm_dhcp_lease_data_parse_cstr(l_data, l_data_len, &l_data_len)) { + gs_free const char **domains = NULL; + + nm_str_buf_reset(&sbuf); + nm_str_buf_append_len0(&sbuf, (const char *) l_data, l_data_len); + + /* Multiple domains sometimes stuffed into option 15 "Domain Name". */ + domains = nm_utils_strsplit_set(nm_str_buf_get_str(&sbuf), " "); + + nm_str_buf_reset(&sbuf); + if (domains) { + gsize i; + + for (i = 0; domains[i]; i++) { + gs_free char *s = NULL; + + s = nm_dhcp_lease_data_parse_domain_validate(domains[i]); + if (!s) + continue; + + nm_str_buf_append_required_delimiter(&sbuf, ' '); + nm_str_buf_append(&sbuf, s); + nm_ip4_config_add_domain(ip4_config, s); + } + } + + if (sbuf.len > 0) { + nm_dhcp_option_add_option(options, + AF_INET, + NM_DHCP_OPTION_DHCP4_DOMAIN_NAME, + nm_str_buf_get_str(&sbuf)); + } + } + lease_parse_search_domains(lease, ip4_config, options); - lease_parse_mtu(lease, ip4_config, options); - lease_parse_metered(lease, ip4_config, options); - - lease_parse_hostname(lease, options); - lease_parse_ntps(lease, options); - lease_parse_root_path(lease, options); - lease_parse_wpad(lease, options); - lease_parse_nis_domain(lease, ip4_config, options); - lease_parse_address_list(lease, ip4_config, NM_DHCP_OPTION_DHCP4_NIS_SERVERS, options); - lease_parse_address_list(lease, ip4_config, NM_DHCP_OPTION_DHCP4_NETBIOS_NAMESERVER, options); + + r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_INTERFACE_MTU, &l_data, &l_data_len); + if (r == 0 && nm_dhcp_lease_data_parse_mtu(l_data, l_data_len, &v_u16)) { + nm_dhcp_option_add_option_u64(options, AF_INET, NM_DHCP_OPTION_DHCP4_INTERFACE_MTU, v_u16); + nm_ip4_config_set_mtu(ip4_config, v_u16, NM_IP_CONFIG_SOURCE_DHCP); + } + + r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_VENDOR_SPECIFIC, &l_data, &l_data_len); + v_bool = + (r == 0) && memmem(l_data, l_data_len, "ANDROID_METERED", NM_STRLEN("ANDROID_METERED")); + nm_ip4_config_set_metered(ip4_config, v_bool); + + r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_HOST_NAME, &l_data, &l_data_len); + if (r == 0) { + gs_free char *s = NULL; + + if (nm_dhcp_lease_data_parse_domain(l_data, l_data_len, &s)) { + nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_HOST_NAME, s); + } + } + + lease_parse_address_list(lease, ip4_config, NM_DHCP_OPTION_DHCP4_NTP_SERVER, options, &sbuf); + + r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_ROOT_PATH, &l_data, &l_data_len); + if (r == 0 && nm_dhcp_lease_data_parse_cstr(l_data, l_data_len, &l_data_len)) { + /* https://tools.ietf.org/html/rfc2132#section-3.19 + * + * The path is formatted as a character string consisting of + * characters from the NVT ASCII character set. + * + * We still accept any character set and backslash escape it! */ + if (l_data_len == 0) { + /* "Its minimum length is 1." */ + } else { + nm_dhcp_option_add_option_utf8safe_escape(options, + AF_INET, + NM_DHCP_OPTION_DHCP4_ROOT_PATH, + l_data, + l_data_len); + } + } + + r = _client_lease_query(lease, + NM_DHCP_OPTION_DHCP4_PRIVATE_PROXY_AUTODISCOVERY, + &l_data, + &l_data_len); + if (r == 0 && nm_dhcp_lease_data_parse_cstr(l_data, l_data_len, &l_data_len)) { + /* https://tools.ietf.org/html/draft-ietf-wrec-wpad-01#section-4.4.1 + * + * We reject NUL characters inside the string (except trailing NULs). + * Otherwise, we allow any encoding and backslash-escape the result to + * UTF-8. */ + nm_dhcp_option_add_option_utf8safe_escape(options, + AF_INET, + NM_DHCP_OPTION_DHCP4_PRIVATE_PROXY_AUTODISCOVERY, + l_data, + l_data_len); + } + + r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_NIS_DOMAIN, &l_data, &l_data_len); + if (r == 0 && nm_dhcp_lease_data_parse_cstr(l_data, l_data_len, &l_data_len)) { + gs_free char *to_free = NULL; + + /* https://tools.ietf.org/html/rfc2132#section-8.1 */ + + v_str = nm_utils_buf_utf8safe_escape((char *) l_data, l_data_len, 0, &to_free); + + nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_NIS_DOMAIN, v_str); + nm_ip4_config_set_nis_domain(ip4_config, v_str); + } + + lease_parse_address_list(lease, ip4_config, NM_DHCP_OPTION_DHCP4_NIS_SERVERS, options, &sbuf); + + lease_parse_address_list(lease, + ip4_config, + NM_DHCP_OPTION_DHCP4_NETBIOS_NAMESERVER, + options, + &sbuf); + lease_parse_private_options(lease, options); NM_SET_OUT(out_options, g_steal_pointer(&options)); @@ -1001,25 +716,24 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, static void lease_save(NMDhcpNettools *self, NDhcp4ClientLease *lease, const char *lease_file) { - struct in_addr a_address; - nm_auto_free_gstring GString *new_contents = NULL; - char sbuf[NM_UTILS_INET_ADDRSTRLEN]; + struct in_addr a_address; + nm_auto_str_buf NMStrBuf sbuf = NM_STR_BUF_INIT(NM_UTILS_GET_NEXT_REALLOC_SIZE_104, FALSE); + char addr_str[NM_UTILS_INET_ADDRSTRLEN]; gs_free_error GError *error = NULL; nm_assert(lease); nm_assert(lease_file); - new_contents = g_string_new("# This is private data. Do not parse.\n"); - n_dhcp4_client_lease_get_yiaddr(lease, &a_address); if (a_address.s_addr == INADDR_ANY) return; - g_string_append_printf(new_contents, - "ADDRESS=%s\n", - _nm_utils_inet4_ntop(a_address.s_addr, sbuf)); + nm_str_buf_append(&sbuf, "# This is private data. Do not parse.\n"); + nm_str_buf_append_printf(&sbuf, + "ADDRESS=%s\n", + _nm_utils_inet4_ntop(a_address.s_addr, addr_str)); - if (!g_file_set_contents(lease_file, new_contents->str, -1, &error)) + if (!g_file_set_contents(lease_file, nm_str_buf_get_str_unsafe(&sbuf), sbuf.len, &error)) _LOGW("error saving lease to %s: %s", lease_file, error->message); } @@ -1049,7 +763,7 @@ bound4_handle(NMDhcpNettools *self, NDhcp4ClientLease *lease, gboolean extended) return; } - nm_dhcp_option_add_requests_to_options(options, _nm_dhcp_option_dhcp4_options); + nm_dhcp_option_add_requests_to_options(options, AF_INET); lease_save(self, lease, priv->lease_file); nm_dhcp_client_set_state(NM_DHCP_CLIENT(self), @@ -1127,9 +841,9 @@ dhcp4_event_handle(NMDhcpNettools *self, NDhcp4ClientEvent *event) } static gboolean -dhcp4_event_cb(int fd, GIOCondition condition, gpointer data) +dhcp4_event_cb(int fd, GIOCondition condition, gpointer user_data) { - NMDhcpNettools * self = data; + NMDhcpNettools * self = user_data; NMDhcpNettoolsPrivate *priv = NM_DHCP_NETTOOLS_GET_PRIVATE(self); NDhcp4ClientEvent * event; int r; @@ -1375,7 +1089,7 @@ ip4_start(NMDhcpClient *client, } /* Add requested options */ - for (i = 0; _nm_dhcp_option_dhcp4_options[i].name; i++) { + for (i = 0; i < (int) G_N_ELEMENTS(_nm_dhcp_option_dhcp4_options); i++) { if (_nm_dhcp_option_dhcp4_options[i].include) { nm_assert(_nm_dhcp_option_dhcp4_options[i].option_num <= 255); n_dhcp4_client_probe_config_request_option(config, diff --git a/src/core/dhcp/nm-dhcp-options.c b/src/core/dhcp/nm-dhcp-options.c index 13d8501..3537cd1 100644 --- a/src/core/dhcp/nm-dhcp-options.c +++ b/src/core/dhcp/nm-dhcp-options.c @@ -3,15 +3,17 @@ * Copyright (C) 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dhcp-options.h" -#define REQPREFIX "requested_" +#include "nm-glib-aux/nm-str-buf.h" -#define REQ(_num, _name, _include) \ - { \ - .name = REQPREFIX ""_name, .option_num = _num, .include = _include, \ +/*****************************************************************************/ + +#define REQ(_num, _name, _include) \ + { \ + .name = NM_DHCP_OPTION_REQPREFIX ""_name, .option_num = _num, .include = _include, \ } const NMDhcpOption _nm_dhcp_option_dhcp4_options[] = { @@ -167,8 +169,24 @@ const NMDhcpOption _nm_dhcp_option_dhcp4_options[] = { REQ(NM_DHCP_OPTION_DHCP4_NM_IP_ADDRESS, "ip_address", FALSE), REQ(NM_DHCP_OPTION_DHCP4_NM_EXPIRY, "expiry", FALSE), REQ(NM_DHCP_OPTION_DHCP4_NM_NEXT_SERVER, "next_server", FALSE), +}; - {0}}; +static const NMDhcpOption *const _sorted_options_4[G_N_ELEMENTS(_nm_dhcp_option_dhcp4_options)] = { +#define A(idx) (&_nm_dhcp_option_dhcp4_options[(idx)]) + A(0), A(1), A(8), A(18), A(19), A(2), A(20), A(21), A(22), A(23), A(24), A(3), + A(25), A(26), A(4), A(27), A(17), A(28), A(29), A(30), A(31), A(32), A(33), A(34), + A(35), A(5), A(36), A(6), A(37), A(38), A(39), A(40), A(9), A(41), A(42), A(43), + A(44), A(45), A(46), A(10), A(11), A(12), A(47), A(48), A(49), A(50), A(51), A(52), + A(13), A(53), A(54), A(55), A(57), A(58), A(59), A(60), A(61), A(62), A(63), A(64), + A(65), A(66), A(67), A(68), A(69), A(70), A(71), A(72), A(73), A(74), A(75), A(76), + A(77), A(78), A(79), A(80), A(81), A(82), A(83), A(84), A(85), A(86), A(87), A(56), + A(88), A(89), A(90), A(91), A(92), A(93), A(14), A(7), A(94), A(95), A(96), A(97), + A(98), A(99), A(100), A(101), A(102), A(103), A(104), A(105), A(106), A(107), A(108), A(109), + A(110), A(111), A(112), A(113), A(114), A(115), A(116), A(117), A(118), A(119), A(120), A(121), + A(122), A(123), A(124), A(125), A(126), A(127), A(128), A(129), A(130), A(131), A(132), A(133), + A(134), A(15), A(135), A(136), A(16), A(137), A(138), A(139), A(140), A(141), +#undef A +}; const NMDhcpOption _nm_dhcp_option_dhcp6_options[] = { REQ(NM_DHCP_OPTION_DHCP6_CLIENTID, "dhcp6_client_id", FALSE), @@ -194,73 +212,235 @@ const NMDhcpOption _nm_dhcp_option_dhcp6_options[] = { REQ(NM_DHCP_OPTION_DHCP6_NM_RENEW, "renew", FALSE), REQ(NM_DHCP_OPTION_DHCP6_NM_REBIND, "rebind", FALSE), REQ(NM_DHCP_OPTION_DHCP6_NM_IAID, "iaid", FALSE), +}; + +#undef REQ + +static const NMDhcpOption *const _sorted_options_6[G_N_ELEMENTS(_nm_dhcp_option_dhcp6_options)] = { +#define A(idx) (&_nm_dhcp_option_dhcp6_options[(idx)]) + A(0), + A(1), + A(2), + A(3), + A(4), + A(5), + A(6), + A(7), + A(8), + A(9), + A(10), + A(11), + A(12), + A(13), + A(14), + A(15), +#undef A +}; + +/*****************************************************************************/ + +static int +_sorted_options_generate_sort(gconstpointer pa, gconstpointer pb, gpointer user_data) +{ + const NMDhcpOption *const *a = pa; + const NMDhcpOption *const *b = pb; + + NM_CMP_DIRECT((*a)->option_num, (*b)->option_num); + return nm_assert_unreachable_val(0); +} + +static char * +_sorted_options_generate(const NMDhcpOption *base, const NMDhcpOption *const *sorted, guint n) +{ + gs_free const NMDhcpOption **sort2 = NULL; + NMStrBuf sbuf = NM_STR_BUF_INIT(0, FALSE); + guint i; + + sort2 = nm_memdup(sorted, n * sizeof(sorted[0])); + + g_qsort_with_data(sort2, n, sizeof(sort2[0]), _sorted_options_generate_sort, NULL); + + for (i = 0; i < n; i++) { + if (i > 0) + nm_str_buf_append(&sbuf, ", "); + nm_str_buf_append_printf(&sbuf, "A(%d)", (int) (sort2[i] - base)); + } + + return nm_str_buf_finalize(&sbuf, NULL); +} + +_nm_unused static void +_ASSERT_sorted(int IS_IPv4, const NMDhcpOption *const *const sorted, int n) + +{ + const NMDhcpOption *const options = + IS_IPv4 ? _nm_dhcp_option_dhcp4_options : _nm_dhcp_option_dhcp6_options; + int i; + int j; + gs_free char *sorted_msg = NULL; + + for (i = 0; i < n; i++) { + const NMDhcpOption *opt = sorted[i]; + + g_assert(opt); + g_assert(opt >= options); + g_assert(opt < &options[n]); + + for (j = 0; j < i; j++) { + const NMDhcpOption *opt2 = sorted[j]; + + if (opt == opt2) { + g_error("%s:%d: the _sorted_options_%c at [%d] (opt=%u, %s) is duplicated at " + "[%d] (SORT: %s)", + __FILE__, + __LINE__, + IS_IPv4 ? '4' : '6', + i, + opt->option_num, + opt->name, + j, + (sorted_msg = _sorted_options_generate(options, sorted, n))); + } + } - {0}}; + if (i > 0) { + const NMDhcpOption *opt2 = sorted[i - 1]; -const char * -nm_dhcp_option_request_string(const NMDhcpOption *requests, guint option) + if (opt2->option_num >= opt->option_num) { + g_error("%s:%d: the _sorted_options_%c at [%d] (opt=%u, %s) should come before " + "[%d] (opt=%u, %s) (SORT: %s)", + __FILE__, + __LINE__, + IS_IPv4 ? '4' : '6', + i, + opt->option_num, + opt->name, + i - 1, + opt2->option_num, + opt2->name, + (sorted_msg = _sorted_options_generate(options, sorted, n))); + } + } + } +} + +/*****************************************************************************/ + +const NMDhcpOption * +nm_dhcp_option_find(int addr_family, guint option) { - guint i = 0; + const int IS_IPv4 = NM_IS_IPv4(addr_family); + const NMDhcpOption *const *const sorted = IS_IPv4 ? _sorted_options_4 : _sorted_options_6; + const int n = IS_IPv4 ? G_N_ELEMENTS(_nm_dhcp_option_dhcp4_options) + : G_N_ELEMENTS(_nm_dhcp_option_dhcp6_options); + int imin = 0; + int imax = n - 1; + int imid = (n - 1) / 2; + +#if NM_MORE_ASSERTS > 10 + nm_assert(n < G_MAXINT / 2); + if (IS_IPv4 && !NM_MORE_ASSERT_ONCE(10)) { + /* already checked */ + } else if (!IS_IPv4 && !NM_MORE_ASSERT_ONCE(10)) { + /* already checked */ + } else + _ASSERT_sorted(IS_IPv4, sorted, n); +#endif + + for (;;) { + const guint o = sorted[imid]->option_num; - while (requests[i].name) { - if (requests[i].option_num == option) - return requests[i].name + NM_STRLEN(REQPREFIX); - i++; + if (G_UNLIKELY(o == option)) + return sorted[imid]; + + if (o < option) + imin = imid + 1; + else + imax = imid - 1; + + if (G_UNLIKELY(imin > imax)) + break; + + imid = (imin + imax) / 2; } /* Option should always be found */ - nm_assert_not_reached(); - return NULL; + return nm_assert_unreachable_val(NULL); } +/*****************************************************************************/ + void -nm_dhcp_option_take_option(GHashTable * options, - const NMDhcpOption *requests, - guint option, - char * value) +nm_dhcp_option_take_option(GHashTable *options, int addr_family, guint option, char *value) { - nm_assert(options); - nm_assert(requests); + nm_assert_addr_family(addr_family); nm_assert(value); nm_assert(g_utf8_validate(value, -1, NULL)); - g_hash_table_insert(options, (gpointer) nm_dhcp_option_request_string(requests, option), value); + if (!options) { + nm_assert_not_reached(); + g_free(value); + return; + } + + g_hash_table_insert(options, + (gpointer) nm_dhcp_option_request_string(addr_family, option), + value); } void -nm_dhcp_option_add_option(GHashTable * options, - const NMDhcpOption *requests, - guint option, - const char * value) +nm_dhcp_option_add_option(GHashTable *options, int addr_family, guint option, const char *value) { - if (options) - nm_dhcp_option_take_option(options, requests, option, g_strdup(value)); + nm_dhcp_option_take_option(options, addr_family, option, g_strdup(value)); } void -nm_dhcp_option_add_option_u64(GHashTable * options, - const NMDhcpOption *requests, - guint option, - guint64 value) +nm_dhcp_option_add_option_utf8safe_escape(GHashTable * options, + int addr_family, + guint option, + const guint8 *data, + gsize n_data) { - if (options) - nm_dhcp_option_take_option(options, - requests, - option, - g_strdup_printf("%" G_GUINT64_FORMAT, value)); + gs_free char *to_free = NULL; + const char * escaped; + + escaped = nm_utils_buf_utf8safe_escape((char *) data, n_data, 0, &to_free); + nm_dhcp_option_add_option(options, addr_family, option, escaped ?: ""); } void -nm_dhcp_option_add_requests_to_options(GHashTable *options, const NMDhcpOption *requests) +nm_dhcp_option_add_option_u64(GHashTable *options, int addr_family, guint option, guint64 value) { - guint i; + nm_dhcp_option_take_option(options, + addr_family, + option, + g_strdup_printf("%" G_GUINT64_FORMAT, value)); +} - if (!options) - return; +void +nm_dhcp_option_add_option_in_addr(GHashTable *options, + int addr_family, + guint option, + in_addr_t value) +{ + char sbuf[NM_UTILS_INET_ADDRSTRLEN]; + + nm_dhcp_option_add_option(options, addr_family, option, _nm_utils_inet4_ntop(value, sbuf)); +} + +void +nm_dhcp_option_add_requests_to_options(GHashTable *options, int addr_family) +{ + const int IS_IPv4 = NM_IS_IPv4(addr_family); + const NMDhcpOption *const all_options = + IS_IPv4 ? _nm_dhcp_option_dhcp4_options : _nm_dhcp_option_dhcp6_options; + int n_options = IS_IPv4 ? G_N_ELEMENTS(_nm_dhcp_option_dhcp4_options) + : G_N_ELEMENTS(_nm_dhcp_option_dhcp6_options); + int i; - for (i = 0; requests[i].name; i++) { - if (requests[i].include) - g_hash_table_insert(options, (gpointer) requests[i].name, g_strdup("1")); + for (i = 0; i < n_options; i++) { + if (all_options[i].include) + g_hash_table_insert(options, (gpointer) all_options[i].name, g_strdup("1")); } } diff --git a/src/core/dhcp/nm-dhcp-options.h b/src/core/dhcp/nm-dhcp-options.h index c2a403a..585f118 100644 --- a/src/core/dhcp/nm-dhcp-options.h +++ b/src/core/dhcp/nm-dhcp-options.h @@ -177,29 +177,50 @@ typedef enum { } NMDhcpOptionDhcp6Options; +#define NM_DHCP_OPTION_REQPREFIX "requested_" + typedef struct { const char *name; uint16_t option_num; bool include; } NMDhcpOption; -extern const NMDhcpOption _nm_dhcp_option_dhcp4_options[]; -extern const NMDhcpOption _nm_dhcp_option_dhcp6_options[]; +extern const NMDhcpOption _nm_dhcp_option_dhcp4_options[142]; +extern const NMDhcpOption _nm_dhcp_option_dhcp6_options[16]; + +static inline const char * +nm_dhcp_option_get_name(const NMDhcpOption *option) +{ + nm_assert(option); + nm_assert(option->name); + nm_assert(NM_STR_HAS_PREFIX(option->name, NM_DHCP_OPTION_REQPREFIX)); + + return &option->name[NM_STRLEN(NM_DHCP_OPTION_REQPREFIX)]; +} + +const NMDhcpOption *nm_dhcp_option_find(int addr_family, guint option); + +static inline const char * +nm_dhcp_option_request_string(int addr_family, guint option) +{ + return nm_dhcp_option_get_name(nm_dhcp_option_find(addr_family, option)); +} -const char *nm_dhcp_option_request_string(const NMDhcpOption *requests, guint option); -void nm_dhcp_option_take_option(GHashTable * options, - const NMDhcpOption *requests, - guint option, - char * value); -void nm_dhcp_option_add_option(GHashTable * options, - const NMDhcpOption *requests, - guint option, - const char * value); -void nm_dhcp_option_add_option_u64(GHashTable * options, - const NMDhcpOption *requests, - guint option, - guint64 value); -void nm_dhcp_option_add_requests_to_options(GHashTable *options, const NMDhcpOption *requests); +void nm_dhcp_option_take_option(GHashTable *options, int addr_family, guint option, char *value); +void +nm_dhcp_option_add_option(GHashTable *options, int addr_family, guint option, const char *value); +void nm_dhcp_option_add_option_utf8safe_escape(GHashTable * options, + int addr_family, + guint option, + const guint8 *data, + gsize n_data); +void nm_dhcp_option_add_option_in_addr(GHashTable *options, + int addr_family, + guint option, + in_addr_t value); +void +nm_dhcp_option_add_option_u64(GHashTable *options, int addr_family, guint option, guint64 value); +void nm_dhcp_option_add_requests_to_options(GHashTable *options, int addr_family); GHashTable *nm_dhcp_option_create_options_dict(void); #endif /* __NM_DHCP_OPTIONS_H__ */ diff --git a/src/core/dhcp/nm-dhcp-systemd.c b/src/core/dhcp/nm-dhcp-systemd.c index ea50511..b92a907 100644 --- a/src/core/dhcp/nm-dhcp-systemd.c +++ b/src/core/dhcp/nm-dhcp-systemd.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include @@ -138,32 +138,26 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, options = out_options ? nm_dhcp_option_create_options_dict() : NULL; _nm_utils_inet4_ntop(a_address.s_addr, addr_str); - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_NM_IP_ADDRESS, - addr_str); + nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_NM_IP_ADDRESS, addr_str); a_plen = nm_utils_ip4_netmask_to_prefix(a_netmask.s_addr); nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_SUBNET_MASK, _nm_utils_inet4_ntop(a_netmask.s_addr, addr_str)); nm_dhcp_option_add_option_u64(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_IP_ADDRESS_LEASE_TIME, a_lifetime); nm_dhcp_option_add_option_u64(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_NM_EXPIRY, (guint64)(ts_time + a_lifetime)); if (sd_dhcp_lease_get_next_server(lease, &a_next_server) == 0) { _nm_utils_inet4_ntop(a_next_server.s_addr, addr_str); - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_NM_NEXT_SERVER, - addr_str); + nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_NM_NEXT_SERVER, addr_str); } nm_ip4_config_add_address(ip4_config, @@ -179,18 +173,12 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, if (sd_dhcp_lease_get_server_identifier(lease, &server_id) >= 0) { _nm_utils_inet4_ntop(server_id.s_addr, addr_str); - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_SERVER_ID, - addr_str); + nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_SERVER_ID, addr_str); } if (sd_dhcp_lease_get_broadcast(lease, &broadcast) >= 0) { _nm_utils_inet4_ntop(broadcast.s_addr, addr_str); - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_BROADCAST, - addr_str); + nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_BROADCAST, addr_str); } num = sd_dhcp_lease_get_dns(lease, &addr_list); @@ -208,7 +196,7 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, nm_ip4_config_add_nameserver(ip4_config, addr_list[i].s_addr); } nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_DOMAIN_NAME_SERVER, str->str); } @@ -221,7 +209,7 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, nm_ip4_config_add_search(ip4_config, search_domains[i]); } nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_DOMAIN_SEARCH_LIST, str->str); } @@ -230,10 +218,7 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, gs_strfreev char **domains = NULL; char ** d; - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_DOMAIN_NAME, - s); + nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_DOMAIN_NAME, s); /* Multiple domains sometimes stuffed into option 15 "Domain Name". * As systemd escapes such characters, split them at \\032. */ @@ -243,10 +228,7 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, } if (sd_dhcp_lease_get_hostname(lease, &s) >= 0) { - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_HOST_NAME, - s); + nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_HOST_NAME, s); } num = sd_dhcp_lease_get_routes(lease, &routes); @@ -348,12 +330,12 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, if (str_classless && str_classless->len > 0) nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_CLASSLESS_STATIC_ROUTE, str_classless->str); if (str_static && str_static->len > 0) nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_STATIC_ROUTE, str_static->str); } @@ -400,17 +382,11 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, }), NULL); } - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_ROUTER, - str->str); + nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_ROUTER, str->str); } if (sd_dhcp_lease_get_mtu(lease, &mtu) >= 0 && mtu) { - nm_dhcp_option_add_option_u64(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_INTERFACE_MTU, - mtu); + nm_dhcp_option_add_option_u64(options, AF_INET, NM_DHCP_OPTION_DHCP4_INTERFACE_MTU, mtu); nm_ip4_config_set_mtu(ip4_config, mtu, NM_IP_CONFIG_SOURCE_DHCP); } @@ -421,38 +397,29 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, _nm_utils_inet4_ntop(addr_list[i].s_addr, addr_str); g_string_append(nm_gstring_add_space_delimiter(str), addr_str); } - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_NTP_SERVER, - str->str); + nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_NTP_SERVER, str->str); } if (sd_dhcp_lease_get_root_path(lease, &s) >= 0) { - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_ROOT_PATH, - s); + nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_ROOT_PATH, s); } if (sd_dhcp_lease_get_t1(lease, &renewal) >= 0) { nm_dhcp_option_add_option_u64(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_RENEWAL_T1_TIME, renewal); } if (sd_dhcp_lease_get_t2(lease, &rebinding) >= 0) { nm_dhcp_option_add_option_u64(options, - _nm_dhcp_option_dhcp4_options, + AF_INET, NM_DHCP_OPTION_DHCP4_REBINDING_T2_TIME, rebinding); } if (sd_dhcp_lease_get_timezone(lease, &s) >= 0) { - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_NEW_TZDB_TIMEZONE, - s); + nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_NEW_TZDB_TIMEZONE, s); } if (sd_dhcp_lease_get_vendor_specific(lease, &data, &data_len) >= 0) @@ -473,10 +440,7 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, g_free(option_string); continue; } - nm_dhcp_option_take_option(options, - _nm_dhcp_option_dhcp4_options, - private_options[i].code, - option_string); + nm_dhcp_option_take_option(options, AF_INET, private_options[i].code, option_string); } } NM_SET_OUT(out_options, g_steal_pointer(&options)); @@ -518,7 +482,7 @@ bound4_handle(NMDhcpSystemd *self, gboolean extended) return; } - nm_dhcp_option_add_requests_to_options(options, _nm_dhcp_option_dhcp4_options); + nm_dhcp_option_add_requests_to_options(options, AF_INET); dhcp_lease_save(lease, priv->lease_file); nm_dhcp_client_set_state(NM_DHCP_CLIENT(self), @@ -702,7 +666,7 @@ ip4_start(NMDhcpClient *client, } /* Add requested options */ - for (i = 0; _nm_dhcp_option_dhcp4_options[i].name; i++) { + for (i = 0; i < (int) G_N_ELEMENTS(_nm_dhcp_option_dhcp4_options); i++) { if (_nm_dhcp_option_dhcp4_options[i].include) { nm_assert(_nm_dhcp_option_dhcp4_options[i].option_num <= 255); r = sd_dhcp_client_set_request_option(sd_client, @@ -821,10 +785,7 @@ lease_to_ip6_config(NMDedupMultiIndex *multi_idx, g_string_append(nm_gstring_add_space_delimiter(str), addr_str); }; if (str->len) - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp6_options, - NM_DHCP_OPTION_DHCP6_NM_IP_ADDRESS, - str->str); + nm_dhcp_option_add_option(options, AF_INET6, NM_DHCP_OPTION_DHCP6_NM_IP_ADDRESS, str->str); if (!info_only && nm_ip6_config_get_num_addresses(ip6_config) == 0) { g_set_error_literal(error, @@ -842,10 +803,7 @@ lease_to_ip6_config(NMDedupMultiIndex *multi_idx, g_string_append(nm_gstring_add_space_delimiter(str), addr_str); nm_ip6_config_add_nameserver(ip6_config, &dns[i]); } - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp6_options, - NM_DHCP_OPTION_DHCP6_DNS_SERVERS, - str->str); + nm_dhcp_option_add_option(options, AF_INET6, NM_DHCP_OPTION_DHCP6_DNS_SERVERS, str->str); } num = sd_dhcp6_lease_get_domains(lease, &domains); @@ -855,17 +813,11 @@ lease_to_ip6_config(NMDedupMultiIndex *multi_idx, g_string_append(nm_gstring_add_space_delimiter(str), domains[i]); nm_ip6_config_add_search(ip6_config, domains[i]); } - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp6_options, - NM_DHCP_OPTION_DHCP6_DOMAIN_LIST, - str->str); + nm_dhcp_option_add_option(options, AF_INET6, NM_DHCP_OPTION_DHCP6_DOMAIN_LIST, str->str); } if (sd_dhcp6_lease_get_fqdn(lease, &s) >= 0) { - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp6_options, - NM_DHCP_OPTION_DHCP6_FQDN, - s); + nm_dhcp_option_add_option(options, AF_INET6, NM_DHCP_OPTION_DHCP6_FQDN, s); } NM_SET_OUT(out_options, g_steal_pointer(&options)); @@ -986,8 +938,11 @@ ip6_start(NMDhcpClient * client, _LOGT("dhcp-client6: set %p", sd_client); - if (nm_dhcp_client_get_info_only(client)) - sd_dhcp6_client_set_information_request(sd_client, 1); + if (nm_dhcp_client_get_info_only(client)) { + sd_dhcp6_client_set_address_request(sd_client, 0); + if (needed_prefixes == 0) + sd_dhcp6_client_set_information_request(sd_client, 1); + } r = sd_dhcp6_client_set_iaid(sd_client, nm_dhcp_client_get_iaid(client)); if (r < 0) { @@ -1017,7 +972,7 @@ ip6_start(NMDhcpClient * client, } /* Add requested options */ - for (i = 0; _nm_dhcp_option_dhcp6_options[i].name; i++) { + for (i = 0; i < (int) G_N_ELEMENTS(_nm_dhcp_option_dhcp6_options); i++) { if (_nm_dhcp_option_dhcp6_options[i].include) { r = sd_dhcp6_client_set_request_option(sd_client, _nm_dhcp_option_dhcp6_options[i].option_num); diff --git a/src/core/dhcp/nm-dhcp-utils.c b/src/core/dhcp/nm-dhcp-utils.c index ed11a6e..646411e 100644 --- a/src/core/dhcp/nm-dhcp-utils.c +++ b/src/core/dhcp/nm-dhcp-utils.c @@ -3,12 +3,15 @@ * Copyright (C) 2005 - 2010 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include +#include "nm-std-aux/unaligned.h" #include "nm-glib-aux/nm-dedup-multi.h" +#include "nm-glib-aux/nm-str-buf.h" +#include "systemd/nm-sd-utils-shared.h" #include "nm-dhcp-utils.h" #include "nm-utils.h" @@ -834,3 +837,285 @@ nm_dhcp_utils_get_dhcp6_event_id(GHashTable *lease) return g_strdup_printf("%s|%s", iaid, start); } + +/*****************************************************************************/ + +gboolean +nm_dhcp_lease_data_parse_u16(const guint8 *data, gsize n_data, uint16_t *out_val) +{ + if (n_data != 2) + return FALSE; + + *out_val = unaligned_read_be16(data); + return TRUE; +} + +gboolean +nm_dhcp_lease_data_parse_mtu(const guint8 *data, gsize n_data, uint16_t *out_val) +{ + uint16_t mtu; + + if (!nm_dhcp_lease_data_parse_u16(data, n_data, &mtu)) + return FALSE; + + if (mtu < 68) { + /* https://tools.ietf.org/html/rfc2132#section-5.1: + * + * The minimum legal value for the MTU is 68. */ + return FALSE; + } + + *out_val = mtu; + return TRUE; +} + +gboolean +nm_dhcp_lease_data_parse_cstr(const guint8 *data, gsize n_data, gsize *out_new_len) +{ + /* WARNING: this function only validates that the string does not contain + * NUL characters (and ignores trailing NULs). It does not check character + * encoding! */ + + while (n_data > 0 && data[n_data - 1] == '\0') + n_data--; + + if (n_data > 0) { + if (memchr(data, n_data, '\0')) { + /* we accept trailing NUL, but none in between. + * + * https://tools.ietf.org/html/rfc2132#section-2 + * https://github.com/systemd/systemd/issues/1337 */ + return FALSE; + } + } + + NM_SET_OUT(out_new_len, n_data); + return TRUE; +} + +char * +nm_dhcp_lease_data_parse_domain_validate(const char *str) +{ + gs_free char *s = NULL; + + s = nm_sd_dns_name_normalize(str); + if (!s) + return NULL; + + if (nm_str_is_empty(s) || (s[0] == '.' && s[1] == '\0')) { + /* root domains are not allowed. */ + return NULL; + } + + if (nm_utils_is_localhost(s)) + return NULL; + + if (!g_utf8_validate(s, -1, NULL)) { + /* the result must be valid UTF-8. */ + return NULL; + } + + return g_steal_pointer(&s); +} + +gboolean +nm_dhcp_lease_data_parse_domain(const guint8 *data, gsize n_data, char **out_val) +{ + gs_free char *str1_free = NULL; + const char * str1; + gs_free char *s = NULL; + + /* this is mostly the same as systemd's lease_parse_domain(). */ + + if (!nm_dhcp_lease_data_parse_cstr(data, n_data, &n_data)) + return FALSE; + + if (n_data == 0) { + /* empty domains are rejected. See + * https://tools.ietf.org/html/rfc2132#section-3.14 + * https://tools.ietf.org/html/rfc2132#section-3.17 + * + * Its minimum length is 1. + * + * Note that this is *after* we potentially stripped trailing NULs. + */ + return FALSE; + } + + str1 = nm_strndup_a(300, (char *) data, n_data, &str1_free); + + s = nm_dhcp_lease_data_parse_domain_validate(str1); + if (!s) + return FALSE; + + *out_val = g_steal_pointer(&s); + return TRUE; +} + +gboolean +nm_dhcp_lease_data_parse_in_addr(const guint8 *data, gsize n_data, in_addr_t *out_val) +{ + /* - option 1, https://tools.ietf.org/html/rfc2132#section-3.3 + * - option 28, https://tools.ietf.org/html/rfc2132#section-5.3 + */ + + if (n_data != 4) + return FALSE; + + *out_val = unaligned_read_ne32(data); + return TRUE; +} + +/*****************************************************************************/ + +static gboolean +lease_option_print_label(NMStrBuf *sbuf, size_t n_label, const uint8_t **datap, size_t *n_datap) +{ + gsize i; + + for (i = 0; i < n_label; ++i) { + uint8_t c = 0; + + if (!nm_dhcp_lease_data_consume(datap, n_datap, &c, sizeof(c))) + return FALSE; + + switch (c) { + case 'a' ... 'z': + case 'A' ... 'Z': + case '0' ... '9': + case '-': + case '_': + nm_str_buf_append_c(sbuf, c); + break; + case '.': + case '\\': + nm_str_buf_append_c2(sbuf, '\\', c); + break; + default: + nm_str_buf_append_printf(sbuf, "\\%3d", c); + } + } + + return TRUE; +} + +static char * +lease_option_print_domain_name(const uint8_t * cache, + size_t * n_cachep, + const uint8_t **datap, + size_t * n_datap) +{ + nm_auto_str_buf NMStrBuf sbuf = NM_STR_BUF_INIT(NM_UTILS_GET_NEXT_REALLOC_SIZE_40, FALSE); + const uint8_t * domain; + size_t n_domain; + size_t n_cache = *n_cachep; + const uint8_t ** domainp = datap; + size_t * n_domainp = n_datap; + gboolean first = TRUE; + uint8_t c; + + /* + * We are given two adjacent memory regions. The @cache contains alreday parsed + * domain names, and the @datap contains the remaining data to parse. + * + * A domain name is formed from a sequence of labels. Each label start with + * a length byte, where the two most significant bits are unset. A zero-length + * label indicates the end of the domain name. + * + * Alternatively, a label can be followed by an offset (indicated by the two + * most significant bits being set in the next byte that is read). The offset + * is an offset into the cache, where the next label of the domain name can + * be found. + * + * Note, that each time a jump to an offset is performed, the size of the + * cache shrinks, so this is guaranteed to terminate. + */ + if (cache + n_cache != *datap) + return NULL; + + for (;;) { + if (!nm_dhcp_lease_data_consume(domainp, n_domainp, &c, sizeof(c))) + return NULL; + + switch (c & 0xC0) { + case 0x00: /* label length */ + { + size_t n_label = c; + + if (n_label == 0) { + /* + * We reached the final label of the domain name. Adjust + * the cache to include the consumed data, and return. + */ + *n_cachep = *datap - cache; + return nm_str_buf_finalize(&sbuf, NULL); + } + + if (!first) + nm_str_buf_append_c(&sbuf, '.'); + else + first = FALSE; + + if (!lease_option_print_label(&sbuf, n_label, domainp, n_domainp)) + return NULL; + + break; + } + case 0xC0: /* back pointer */ + { + size_t offset = (c & 0x3F) << 16; + + /* + * The offset is given as two bytes (in big endian), where the + * two high bits are masked out. + */ + + if (!nm_dhcp_lease_data_consume(domainp, n_domainp, &c, sizeof(c))) + return NULL; + + offset += c; + + if (offset >= n_cache) + return NULL; + + domain = cache + offset; + n_domain = n_cache - offset; + n_cache = offset; + + domainp = &domain; + n_domainp = &n_domain; + + break; + } + default: + return NULL; + } + } +} + +char ** +nm_dhcp_lease_data_parse_search_list(const guint8 *data, gsize n_data) +{ + GPtrArray * array = NULL; + const guint8 *cache = data; + gsize n_cache = 0; + + for (;;) { + gs_free char *s = NULL; + + s = lease_option_print_domain_name(cache, &n_cache, &data, &n_data); + if (!s) + break; + + if (!array) + array = g_ptr_array_new(); + + g_ptr_array_add(array, g_steal_pointer(&s)); + } + + if (!array) + return NULL; + + g_ptr_array_add(array, NULL); + return (char **) g_ptr_array_free(array, FALSE); +} diff --git a/src/core/dhcp/nm-dhcp-utils.h b/src/core/dhcp/nm-dhcp-utils.h index f5bc53a..69715f9 100644 --- a/src/core/dhcp/nm-dhcp-utils.h +++ b/src/core/dhcp/nm-dhcp-utils.h @@ -36,8 +36,35 @@ gboolean nm_dhcp_utils_get_leasefile_path(int addr_family, const char *uuid, char ** out_leasefile_path); -char **nm_dhcp_parse_search_list(guint8 *data, size_t n_data); - char *nm_dhcp_utils_get_dhcp6_event_id(GHashTable *lease); +/*****************************************************************************/ + +static inline gboolean +nm_dhcp_lease_data_consume(const uint8_t **datap, size_t *n_datap, void *out, size_t n_out) +{ + if (*n_datap < n_out) + return FALSE; + + memcpy(out, *datap, n_out); + *datap += n_out; + *n_datap -= n_out; + return TRUE; +} + +static inline gboolean +nm_dhcp_lease_data_consume_in_addr(const uint8_t **datap, size_t *n_datap, in_addr_t *addrp) +{ + return nm_dhcp_lease_data_consume(datap, n_datap, addrp, sizeof(struct in_addr)); +} + +char *nm_dhcp_lease_data_parse_domain_validate(const char *str); + +gboolean nm_dhcp_lease_data_parse_u16(const guint8 *data, gsize n_data, guint16 *out_val); +gboolean nm_dhcp_lease_data_parse_mtu(const guint8 *data, gsize n_data, guint16 *out_val); +gboolean nm_dhcp_lease_data_parse_cstr(const guint8 *data, gsize n_data, gsize *out_new_len); +gboolean nm_dhcp_lease_data_parse_domain(const guint8 *data, gsize n_data, char **out_val); +gboolean nm_dhcp_lease_data_parse_in_addr(const guint8 *data, gsize n_data, in_addr_t *out_val); +char ** nm_dhcp_lease_data_parse_search_list(const guint8 *data, gsize n_data); + #endif /* __NETWORKMANAGER_DHCP_UTILS_H__ */ diff --git a/src/core/dhcp/tests/test-dhcp-dhclient.c b/src/core/dhcp/tests/test-dhcp-dhclient.c index 6b3ec7a..77626f6 100644 --- a/src/core/dhcp/tests/test-dhcp-dhclient.c +++ b/src/core/dhcp/tests/test-dhcp-dhclient.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/dhcp/tests/test-dhcp-utils.c b/src/core/dhcp/tests/test-dhcp-utils.c index dc58688..9b54e2c 100644 --- a/src/core/dhcp/tests/test-dhcp-utils.c +++ b/src/core/dhcp/tests/test-dhcp-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include @@ -13,10 +13,13 @@ #include "nm-utils.h" #include "dhcp/nm-dhcp-utils.h" +#include "dhcp/nm-dhcp-options.h" #include "platform/nm-platform.h" #include "nm-test-utils-core.h" +/*****************************************************************************/ + static NMIP4Config * _ip4_config_from_options(int ifindex, const char *iface, GHashTable *options, guint32 route_metric) { @@ -202,7 +205,7 @@ test_parse_search_list(void) char ** domains; data = (guint8[]){0x05, 'l', 'o', 'c', 'a', 'l', 0x00}; - domains = nm_dhcp_parse_search_list(data, 7); + domains = nm_dhcp_lease_data_parse_search_list(data, 7); g_assert(domains); g_assert_cmpint(g_strv_length(domains), ==, 1); g_assert_cmpstr(domains[0], ==, "local"); @@ -211,7 +214,7 @@ test_parse_search_list(void) data = (guint8[]){0x04, 't', 'e', 's', 't', 0x07, 'e', 'x', 'a', 'm', 'p', 'l', 'e', 0x03, 'c', 'o', 'm', 0x00, 0xc0, 0x05, 0x03, 'a', 'b', 'c', 0xc0, 0x0d, 0x06, 'f', 'o', 'o', 'b', 'a', 'r', 0x00}; - domains = nm_dhcp_parse_search_list(data, 34); + domains = nm_dhcp_lease_data_parse_search_list(data, 34); g_assert(domains); g_assert_cmpint(g_strv_length(domains), ==, 4); g_assert_cmpstr(domains[0], ==, "test.example.com"); @@ -226,7 +229,7 @@ test_parse_search_list(void) 'a', 'd', }; - domains = nm_dhcp_parse_search_list(data, 4); + domains = nm_dhcp_lease_data_parse_search_list(data, 4); g_assert(!domains); data = (guint8[]){ @@ -241,7 +244,7 @@ test_parse_search_list(void) 'a', 'd', }; - domains = nm_dhcp_parse_search_list(data, 10); + domains = nm_dhcp_lease_data_parse_search_list(data, 10); g_assert(domains); g_assert_cmpint(g_strv_length(domains), ==, 1); g_assert_cmpstr(domains[0], ==, "okay"); @@ -740,6 +743,46 @@ test_client_id_from_string(void) COMPARE_ID(endcolon, TRUE, endcolon, strlen(endcolon)); } +/*****************************************************************************/ + +static void +test_dhcp_opt_list(gconstpointer test_data) +{ + const gboolean IS_IPv4 = (GPOINTER_TO_INT(test_data) == 0); + const int addr_family = IS_IPv4 ? AF_INET : AF_INET6; + const NMDhcpOption *const options = + IS_IPv4 ? _nm_dhcp_option_dhcp4_options : _nm_dhcp_option_dhcp6_options; + const guint n = (IS_IPv4 ? G_N_ELEMENTS(_nm_dhcp_option_dhcp4_options) + : G_N_ELEMENTS(_nm_dhcp_option_dhcp6_options)); + guint i; + guint j; + + g_assert(options); + g_assert(n > 0); + + for (i = 0; i < n; i++) { + const NMDhcpOption *const opt = &options[i]; + + g_assert_cmpstr(opt->name, !=, NULL); + g_assert(NM_STR_HAS_PREFIX(opt->name, NM_DHCP_OPTION_REQPREFIX)); + + for (j = 0; j < i; j++) { + const NMDhcpOption *const opt2 = &options[j]; + + g_assert_cmpstr(opt->name, !=, opt2->name); + g_assert_cmpint(opt->option_num, !=, opt2->option_num); + } + } + + for (i = 0; i < n; i++) { + const NMDhcpOption *const opt = &options[i]; + + g_assert(opt == nm_dhcp_option_find(addr_family, opt->option_num)); + } +} + +/*****************************************************************************/ + NMTST_DEFINE(); int @@ -776,6 +819,8 @@ main(int argc, char **argv) g_test_add_func("/dhcp/client-id-from-string", test_client_id_from_string); g_test_add_func("/dhcp/vendor-option-metered", test_vendor_option_metered); g_test_add_func("/dhcp/parse-search-list", test_parse_search_list); + g_test_add_data_func("/dhcp/test_dhcp_opt_list/IPv4", GINT_TO_POINTER(0), test_dhcp_opt_list); + g_test_add_data_func("/dhcp/test_dhcp_opt_list/IPv6", GINT_TO_POINTER(1), test_dhcp_opt_list); return g_test_run(); } diff --git a/src/core/dns/nm-dns-dnsmasq.c b/src/core/dns/nm-dns-dnsmasq.c index 82470e0..dcff98e 100644 --- a/src/core/dns/nm-dns-dnsmasq.c +++ b/src/core/dns/nm-dns-dnsmasq.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 Dan Williams */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dns-dnsmasq.h" diff --git a/src/core/dns/nm-dns-manager.c b/src/core/dns/nm-dns-manager.c index 92f0ef3..f318b9b 100644 --- a/src/core/dns/nm-dns-manager.c +++ b/src/core/dns/nm-dns-manager.c @@ -5,7 +5,7 @@ * Copyright (C) 2005 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/dns/nm-dns-plugin.c b/src/core/dns/nm-dns-plugin.c index 3233b6f..74d4eb2 100644 --- a/src/core/dns/nm-dns-plugin.c +++ b/src/core/dns/nm-dns-plugin.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dns-plugin.h" diff --git a/src/core/dns/nm-dns-systemd-resolved.c b/src/core/dns/nm-dns-systemd-resolved.c index 3535d3d..f6e116f 100644 --- a/src/core/dns/nm-dns-systemd-resolved.c +++ b/src/core/dns/nm-dns-systemd-resolved.c @@ -4,7 +4,7 @@ * Copyright (C) 2016 Sjoerd Simons */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dns-systemd-resolved.h" diff --git a/src/core/dns/nm-dns-unbound.c b/src/core/dns/nm-dns-unbound.c index ee162c3..15df3ac 100644 --- a/src/core/dns/nm-dns-unbound.c +++ b/src/core/dns/nm-dns-unbound.c @@ -4,7 +4,7 @@ * Author: Pavel Šimerda */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dns-unbound.h" diff --git a/src/core/dnsmasq/nm-dnsmasq-manager.c b/src/core/dnsmasq/nm-dnsmasq-manager.c index 00b02a0..82c002b 100644 --- a/src/core/dnsmasq/nm-dnsmasq-manager.c +++ b/src/core/dnsmasq/nm-dnsmasq-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dnsmasq-manager.h" diff --git a/src/core/dnsmasq/nm-dnsmasq-utils.c b/src/core/dnsmasq/nm-dnsmasq-utils.c index 3bd7c93..ea23a78 100644 --- a/src/core/dnsmasq/nm-dnsmasq-utils.c +++ b/src/core/dnsmasq/nm-dnsmasq-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/dnsmasq/tests/test-dnsmasq-utils.c b/src/core/dnsmasq/tests/test-dnsmasq-utils.c index 6eadf29..4c1279f 100644 --- a/src/core/dnsmasq/tests/test-dnsmasq-utils.c +++ b/src/core/dnsmasq/tests/test-dnsmasq-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/initrd/nm-initrd-generator.c b/src/core/initrd/nm-initrd-generator.c index 654adf9..18c7258 100644 --- a/src/core/initrd/nm-initrd-generator.c +++ b/src/core/initrd/nm-initrd-generator.c @@ -3,10 +3,10 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-core-utils.h" #include "nm-core-internal.h" -#include "nm-keyfile/nm-keyfile-internal.h" +#include "nm-keyfile-internal.h" #include "nm-initrd-generator.h" #include "nm-glib-aux/nm-io-utils.h" #include "nm-config.h" diff --git a/src/core/initrd/nmi-cmdline-reader.c b/src/core/initrd/nmi-cmdline-reader.c index 662b980..d95b0f9 100644 --- a/src/core/initrd/nmi-cmdline-reader.c +++ b/src/core/initrd/nmi-cmdline-reader.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/initrd/nmi-dt-reader.c b/src/core/initrd/nmi-dt-reader.c index 5c406a4..63e4524 100644 --- a/src/core/initrd/nmi-dt-reader.c +++ b/src/core/initrd/nmi-dt-reader.c @@ -3,7 +3,7 @@ * Copyright (C) 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-initrd-generator.h" diff --git a/src/core/initrd/nmi-ibft-reader.c b/src/core/initrd/nmi-ibft-reader.c index 4080ede..9895cda 100644 --- a/src/core/initrd/nmi-ibft-reader.c +++ b/src/core/initrd/nmi-ibft-reader.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-initrd-generator.h" diff --git a/src/core/initrd/tests/meson.build b/src/core/initrd/tests/meson.build index 51650d0..e47ff79 100644 --- a/src/core/initrd/tests/meson.build +++ b/src/core/initrd/tests/meson.build @@ -1,7 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -c_flags = test_c_flags + ['-DTEST_INITRD_DIR="@0@"'.format(meson.current_source_dir())] - test_units = [ 'test-dt-reader', 'test-ibft-reader', @@ -13,7 +11,7 @@ foreach test_unit : test_units test_unit, test_unit + '.c', dependencies: libNetworkManagerTest_dep, - c_args: c_flags, + c_args: test_c_flags, link_with: libnmi_core, ) diff --git a/src/core/initrd/tests/test-cmdline-reader.c b/src/core/initrd/tests/test-cmdline-reader.c index 1dc0988..cb65cd3 100644 --- a/src/core/initrd/tests/test-cmdline-reader.c +++ b/src/core/initrd/tests/test-cmdline-reader.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include @@ -19,6 +19,8 @@ #include "nm-test-utils-core.h" +#define TEST_INITRD_DIR NM_BUILD_SRCDIR "/src/core/initrd/tests" + /*****************************************************************************/ #define _parse(ARGV, out_hostname, out_carrier_timeout_sec) \ diff --git a/src/core/initrd/tests/test-dt-reader.c b/src/core/initrd/tests/test-dt-reader.c index 982ccc3..619a4e6 100644 --- a/src/core/initrd/tests/test-dt-reader.c +++ b/src/core/initrd/tests/test-dt-reader.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include @@ -19,6 +19,10 @@ #include "nm-test-utils-core.h" +#define TEST_INITRD_DIR NM_BUILD_SRCDIR "/src/core/initrd/tests" + +/*****************************************************************************/ + static void test_read_dt_ofw(void) { diff --git a/src/core/initrd/tests/test-ibft-reader.c b/src/core/initrd/tests/test-ibft-reader.c index 320153f..1d263b9 100644 --- a/src/core/initrd/tests/test-ibft-reader.c +++ b/src/core/initrd/tests/test-ibft-reader.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include @@ -19,6 +19,10 @@ #include "nm-test-utils-core.h" +#define TEST_INITRD_DIR NM_BUILD_SRCDIR "/src/core/initrd/tests" + +/*****************************************************************************/ + static NMConnection * read_connection(const char *sysfs_dir, const char *expected_mac, GError **error) { diff --git a/src/core/main-utils.c b/src/core/main-utils.c index 357f20f..9bc497c 100644 --- a/src/core/main-utils.c +++ b/src/core/main-utils.c @@ -4,7 +4,7 @@ * Copyright (C) 2005 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/main.c b/src/core/main.c index 18a6333..9b79bcb 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -4,7 +4,7 @@ * Copyright (C) 2005 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/meson.build b/src/core/meson.build index ada4d7a..368a3e8 100644 --- a/src/core/meson.build +++ b/src/core/meson.build @@ -34,7 +34,9 @@ subdir('systemd') core_plugins = [] -daemon_c_flags = ['-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_DAEMON'] +daemon_c_flags = [ + '-DG_LOG_DOMAIN="NetworkManager"', +] platform_wifi_wext_source = files() if enable_wext @@ -75,7 +77,6 @@ libNetworkManagerBase = static_library( dependencies: [ core_default_dep, libn_dhcp4_dep, - libnm_keyfile_dep, libnm_core_dep, libnm_systemd_shared_dep, libnm_udev_aux_dep, @@ -224,7 +225,7 @@ executable( ) if enable_tests - test_c_flags = daemon_c_flags + ['-DNETWORKMANAGER_COMPILATION_TEST'] + test_c_flags = daemon_c_flags if require_root_tests test_c_flags += ['-DREQUIRE_ROOT_TESTS=1'] endif diff --git a/src/core/ndisc/nm-fake-ndisc.c b/src/core/ndisc/nm-fake-ndisc.c index 5bcdb0d..ffe07ab 100644 --- a/src/core/ndisc/nm-fake-ndisc.c +++ b/src/core/ndisc/nm-fake-ndisc.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-fake-ndisc.h" diff --git a/src/core/ndisc/nm-lndp-ndisc.c b/src/core/ndisc/nm-lndp-ndisc.c index 7abd197..f773478 100644 --- a/src/core/ndisc/nm-lndp-ndisc.c +++ b/src/core/ndisc/nm-lndp-ndisc.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-lndp-ndisc.h" @@ -474,7 +474,7 @@ dns_servers_done: gsize padding; gsize len; - nm_str_buf_reset(&sbuf, NULL); + nm_str_buf_reset(&sbuf); for (i = 0; i < rdata->dns_domains->len; i++) { const NMNDiscDNSDomain *dns_domain = diff --git a/src/core/ndisc/nm-ndisc.c b/src/core/ndisc/nm-ndisc.c index 05da8eb..a5c1b93 100644 --- a/src/core/ndisc/nm-ndisc.c +++ b/src/core/ndisc/nm-ndisc.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-ndisc.h" diff --git a/src/core/ndisc/tests/test-ndisc-fake.c b/src/core/ndisc/tests/test-ndisc-fake.c index 3c4bc1f..f201bc5 100644 --- a/src/core/ndisc/tests/test-ndisc-fake.c +++ b/src/core/ndisc/tests/test-ndisc-fake.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/ndisc/tests/test-ndisc-linux.c b/src/core/ndisc/tests/test-ndisc-linux.c index 2517e2b..9a5df60 100644 --- a/src/core/ndisc/tests/test-ndisc-linux.c +++ b/src/core/ndisc/tests/test-ndisc-linux.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/nm-act-request.c b/src/core/nm-act-request.c index 248b57b..defe3e8 100644 --- a/src/core/nm-act-request.c +++ b/src/core/nm-act-request.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-act-request.h" diff --git a/src/core/nm-active-connection.c b/src/core/nm-active-connection.c index 9049eea..3c8c472 100644 --- a/src/core/nm-active-connection.c +++ b/src/core/nm-active-connection.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-active-connection.h" diff --git a/src/core/nm-audit-manager.c b/src/core/nm-audit-manager.c index 4a67f2e..8f41947 100644 --- a/src/core/nm-audit-manager.c +++ b/src/core/nm-audit-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-audit-manager.h" diff --git a/src/core/nm-auth-manager.c b/src/core/nm-auth-manager.c index 046282c..9470838 100644 --- a/src/core/nm-auth-manager.c +++ b/src/core/nm-auth-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-auth-manager.h" diff --git a/src/core/nm-auth-utils.c b/src/core/nm-auth-utils.c index 41ddd3a..12da574 100644 --- a/src/core/nm-auth-utils.c +++ b/src/core/nm-auth-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-auth-utils.h" diff --git a/src/core/nm-checkpoint-manager.c b/src/core/nm-checkpoint-manager.c index b4c00f9..b8c9101 100644 --- a/src/core/nm-checkpoint-manager.c +++ b/src/core/nm-checkpoint-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-checkpoint-manager.h" diff --git a/src/core/nm-checkpoint.c b/src/core/nm-checkpoint.c index 0bee16e..2088c24 100644 --- a/src/core/nm-checkpoint.c +++ b/src/core/nm-checkpoint.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-checkpoint.h" diff --git a/src/core/nm-config-data.c b/src/core/nm-config-data.c index b3cd5e9..c62c677 100644 --- a/src/core/nm-config-data.c +++ b/src/core/nm-config-data.c @@ -4,15 +4,15 @@ * Copyright (C) 2013 Thomas Bechtold */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-config-data.h" #include "nm-config.h" #include "devices/nm-device.h" #include "nm-core-internal.h" -#include "nm-keyfile/nm-keyfile-internal.h" -#include "nm-keyfile/nm-keyfile-utils.h" +#include "nm-keyfile-internal.h" +#include "nm-keyfile-utils.h" /*****************************************************************************/ diff --git a/src/core/nm-config.c b/src/core/nm-config.c index 3c0c78e..5532391 100644 --- a/src/core/nm-config.c +++ b/src/core/nm-config.c @@ -4,7 +4,7 @@ * Copyright (C) 2013 Thomas Bechtold */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-config.h" @@ -14,8 +14,8 @@ #include "devices/nm-device.h" #include "NetworkManagerUtils.h" #include "nm-core-internal.h" -#include "nm-keyfile/nm-keyfile-internal.h" -#include "nm-keyfile/nm-keyfile-utils.h" +#include "nm-keyfile-internal.h" +#include "nm-keyfile-utils.h" #define DEFAULT_CONFIG_MAIN_FILE NMCONFDIR "/NetworkManager.conf" #define DEFAULT_CONFIG_DIR NMCONFDIR "/conf.d" diff --git a/src/core/nm-connectivity.c b/src/core/nm-connectivity.c index 4e38e77..f847c8f 100644 --- a/src/core/nm-connectivity.c +++ b/src/core/nm-connectivity.c @@ -5,7 +5,7 @@ * Copyright (C) 2016 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-connectivity.h" diff --git a/src/core/nm-core-utils.c b/src/core/nm-core-utils.c index 660f6f4..9075c30 100644 --- a/src/core/nm-core-utils.c +++ b/src/core/nm-core-utils.c @@ -4,7 +4,7 @@ * Copyright (C) 2005 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-core-utils.h" diff --git a/src/core/nm-core-utils.h b/src/core/nm-core-utils.h index a3f4787..5dc4d43 100644 --- a/src/core/nm-core-utils.h +++ b/src/core/nm-core-utils.h @@ -54,7 +54,7 @@ void _nm_singleton_instance_register_destruction(GObject *instance); if (G_UNLIKELY(!singleton_instance)) { \ g_assert(!(_already_created_##GETTER) || (NM_DEFINE_SINGLETON_ALLOW_MULTIPLE)); \ (_already_created_##GETTER) = TRUE; \ - singleton_instance = (g_object_new(GTYPE, ##__VA_ARGS__, NULL)); \ + singleton_instance = g_object_new(GTYPE, ##__VA_ARGS__, NULL); \ g_assert(singleton_instance); \ nm_singleton_instance_register(); \ nm_log_dbg(LOGD_CORE, \ diff --git a/src/core/nm-dbus-manager.c b/src/core/nm-dbus-manager.c index e05ae39..4f34ee5 100644 --- a/src/core/nm-dbus-manager.c +++ b/src/core/nm-dbus-manager.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dbus-manager.h" diff --git a/src/core/nm-dbus-object.c b/src/core/nm-dbus-object.c index 4f6d2af..6f294fe 100644 --- a/src/core/nm-dbus-object.c +++ b/src/core/nm-dbus-object.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dbus-object.h" diff --git a/src/core/nm-dbus-utils.c b/src/core/nm-dbus-utils.c index 40e10e2..5890bdf 100644 --- a/src/core/nm-dbus-utils.c +++ b/src/core/nm-dbus-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dbus-utils.h" diff --git a/src/core/nm-dcb.c b/src/core/nm-dcb.c index df34543..b3958ca 100644 --- a/src/core/nm-dcb.c +++ b/src/core/nm-dcb.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/nm-default-daemon.h b/src/core/nm-default-daemon.h new file mode 100644 index 0000000..65ca4b5 --- /dev/null +++ b/src/core/nm-default-daemon.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_DEFAULT_DAEMON_H__ +#define __NM_DEFAULT_DAEMON_H__ + +/*****************************************************************************/ + +#include "nm-glib-aux/nm-default-glib-i18n-prog.h" + +#undef NETWORKMANAGER_COMPILATION +#define NETWORKMANAGER_COMPILATION NM_NETWORKMANAGER_COMPILATION_DAEMON + +/*****************************************************************************/ + +#include "nm-version.h" + +#include "nm-core-types.h" +#include "nm-types.h" +#include "nm-log-core/nm-logging.h" + +/*****************************************************************************/ + +#endif /* __NM_DEFAULT_DAEMON_H__ */ diff --git a/src/core/nm-dhcp-config.c b/src/core/nm-dhcp-config.c index 390a73f..718d3c9 100644 --- a/src/core/nm-dhcp-config.c +++ b/src/core/nm-dhcp-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dhcp-config.h" diff --git a/src/core/nm-dispatcher.c b/src/core/nm-dispatcher.c index a848d41..0ab409f 100644 --- a/src/core/nm-dispatcher.c +++ b/src/core/nm-dispatcher.c @@ -4,7 +4,7 @@ * Copyright (C) 2005 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dispatcher.h" diff --git a/src/core/nm-firewall-manager.c b/src/core/nm-firewall-manager.c index ff0c1a0..8f476e5 100644 --- a/src/core/nm-firewall-manager.c +++ b/src/core/nm-firewall-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2011 - 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-firewall-manager.h" diff --git a/src/core/nm-hostname-manager.c b/src/core/nm-hostname-manager.c index ca23b97..c99c832 100644 --- a/src/core/nm-hostname-manager.c +++ b/src/core/nm-hostname-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-hostname-manager.h" diff --git a/src/core/nm-iface-helper.c b/src/core/nm-iface-helper.c index 42483cf..b6e9981 100644 --- a/src/core/nm-iface-helper.c +++ b/src/core/nm-iface-helper.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/nm-ip-config.c b/src/core/nm-ip-config.c index 040483e..2426eb4 100644 --- a/src/core/nm-ip-config.c +++ b/src/core/nm-ip-config.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-ip-config.h" diff --git a/src/core/nm-ip4-config.c b/src/core/nm-ip4-config.c index 8014549..c49dfb4 100644 --- a/src/core/nm-ip4-config.c +++ b/src/core/nm-ip4-config.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-ip4-config.h" diff --git a/src/core/nm-ip6-config.c b/src/core/nm-ip6-config.c index d48c6e3..1f7def3 100644 --- a/src/core/nm-ip6-config.c +++ b/src/core/nm-ip6-config.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-ip6-config.h" diff --git a/src/core/nm-keep-alive.c b/src/core/nm-keep-alive.c index d0cce40..197e30e 100644 --- a/src/core/nm-keep-alive.c +++ b/src/core/nm-keep-alive.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-keep-alive.h" diff --git a/src/core/nm-l3-config-data.c b/src/core/nm-l3-config-data.c index 0f689d4..5f9af7a 100644 --- a/src/core/nm-l3-config-data.c +++ b/src/core/nm-l3-config-data.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-l3-config-data.h" diff --git a/src/core/nm-l3-ipv4ll.c b/src/core/nm-l3-ipv4ll.c index edd6671..28ceb39 100644 --- a/src/core/nm-l3-ipv4ll.c +++ b/src/core/nm-l3-ipv4ll.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-l3-ipv4ll.h" diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 44023aa..839213a 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-l3cfg.h" diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c index 5e5f4e7..5a6e05a 100644 --- a/src/core/nm-manager.c +++ b/src/core/nm-manager.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-manager.h" diff --git a/src/core/nm-netns.c b/src/core/nm-netns.c index 9f62643..88ea09b 100644 --- a/src/core/nm-netns.c +++ b/src/core/nm-netns.c @@ -3,7 +3,7 @@ * Copyright (C) 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-netns.h" diff --git a/src/core/nm-pacrunner-manager.c b/src/core/nm-pacrunner-manager.c index 5055111..b58aef0 100644 --- a/src/core/nm-pacrunner-manager.c +++ b/src/core/nm-pacrunner-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 Atul Anand . */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-pacrunner-manager.h" diff --git a/src/core/nm-policy.c b/src/core/nm-policy.c index 98ff704..db4983f 100644 --- a/src/core/nm-policy.c +++ b/src/core/nm-policy.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-policy.h" diff --git a/src/core/nm-proxy-config.c b/src/core/nm-proxy-config.c index 85bd047..f41601c 100644 --- a/src/core/nm-proxy-config.c +++ b/src/core/nm-proxy-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 Atul Anand . */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-proxy-config.h" @@ -148,7 +148,7 @@ nm_proxy_config_init(NMProxyConfig *config) NMProxyConfig * nm_proxy_config_new(void) { - return NM_PROXY_CONFIG(g_object_new(NM_TYPE_PROXY_CONFIG, NULL)); + return g_object_new(NM_TYPE_PROXY_CONFIG, NULL); } static void diff --git a/src/core/nm-rfkill-manager.c b/src/core/nm-rfkill-manager.c index 8fd9dbf..f032851 100644 --- a/src/core/nm-rfkill-manager.c +++ b/src/core/nm-rfkill-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2009 - 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-rfkill-manager.h" @@ -391,7 +391,7 @@ nm_rfkill_manager_init(NMRfkillManager *self) NMRfkillManager * nm_rfkill_manager_new(void) { - return NM_RFKILL_MANAGER(g_object_new(NM_TYPE_RFKILL_MANAGER, NULL)); + return g_object_new(NM_TYPE_RFKILL_MANAGER, NULL); } static void diff --git a/src/core/nm-session-monitor.c b/src/core/nm-session-monitor.c index 8e66dbe..88de1a0 100644 --- a/src/core/nm-session-monitor.c +++ b/src/core/nm-session-monitor.c @@ -6,7 +6,7 @@ * Author: Matthias Clasen * Author: Pavel Šimerda */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-session-monitor.h" diff --git a/src/core/nm-sleep-monitor.c b/src/core/nm-sleep-monitor.c index cc3d72e..ffb4db4 100644 --- a/src/core/nm-sleep-monitor.c +++ b/src/core/nm-sleep-monitor.c @@ -4,7 +4,7 @@ * Author: Matthias Clasen */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-sleep-monitor.h" diff --git a/src/core/nm-test-utils-core.h b/src/core/nm-test-utils-core.h index 71d19cc..e655ce2 100644 --- a/src/core/nm-test-utils-core.h +++ b/src/core/nm-test-utils-core.h @@ -7,7 +7,7 @@ #define __NM_TEST_UTILS_CORE_H__ #include "NetworkManagerUtils.h" -#include "nm-keyfile/nm-keyfile-internal.h" +#include "nm-keyfile-internal.h" #define _NMTST_INSIDE_CORE 1 diff --git a/src/core/platform/nm-fake-platform.c b/src/core/platform/nm-fake-platform.c index fbd3e3f..81c9f06 100644 --- a/src/core/platform/nm-fake-platform.c +++ b/src/core/platform/nm-fake-platform.c @@ -3,7 +3,7 @@ * Copyright (C) 2012 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-fake-platform.h" diff --git a/src/core/platform/nm-linux-platform.c b/src/core/platform/nm-linux-platform.c index ae6c4f4..7bd42bb 100644 --- a/src/core/platform/nm-linux-platform.c +++ b/src/core/platform/nm-linux-platform.c @@ -3,7 +3,7 @@ * Copyright (C) 2012 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-linux-platform.h" diff --git a/src/core/platform/nm-platform.c b/src/core/platform/nm-platform.c index 6411abb..0e5f8ab 100644 --- a/src/core/platform/nm-platform.c +++ b/src/core/platform/nm-platform.c @@ -3,7 +3,7 @@ * Copyright (C) 2012 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-platform.h" diff --git a/src/core/platform/nmp-object.c b/src/core/platform/nmp-object.c index 9520013..6a26595 100644 --- a/src/core/platform/nmp-object.c +++ b/src/core/platform/nmp-object.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nmp-object.h" diff --git a/src/core/platform/nmp-rules-manager.c b/src/core/platform/nmp-rules-manager.c index ab329c9..0c617b8 100644 --- a/src/core/platform/nmp-rules-manager.c +++ b/src/core/platform/nmp-rules-manager.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nmp-rules-manager.h" diff --git a/src/core/platform/tests/monitor.c b/src/core/platform/tests/monitor.c index b67d50b..abdf2cd 100644 --- a/src/core/platform/tests/monitor.c +++ b/src/core/platform/tests/monitor.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/platform/tests/test-address.c b/src/core/platform/tests/test-address.c index b9eabbd..d4d6710 100644 --- a/src/core/platform/tests/test-address.c +++ b/src/core/platform/tests/test-address.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "test-common.h" diff --git a/src/core/platform/tests/test-cleanup.c b/src/core/platform/tests/test-cleanup.c index 2fd6a4e..b54eca3 100644 --- a/src/core/platform/tests/test-cleanup.c +++ b/src/core/platform/tests/test-cleanup.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "test-common.h" diff --git a/src/core/platform/tests/test-common.c b/src/core/platform/tests/test-common.c index 529100b..87e5329 100644 --- a/src/core/platform/tests/test-common.c +++ b/src/core/platform/tests/test-common.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "test-common.h" diff --git a/src/core/platform/tests/test-link.c b/src/core/platform/tests/test-link.c index 895b89a..3aaa375 100644 --- a/src/core/platform/tests/test-link.c +++ b/src/core/platform/tests/test-link.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/platform/tests/test-nmp-object.c b/src/core/platform/tests/test-nmp-object.c index 590f41c..310611e 100644 --- a/src/core/platform/tests/test-nmp-object.c +++ b/src/core/platform/tests/test-nmp-object.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/platform/tests/test-platform-general.c b/src/core/platform/tests/test-platform-general.c index 00671cf..b426cc6 100644 --- a/src/core/platform/tests/test-platform-general.c +++ b/src/core/platform/tests/test-platform-general.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/platform/tests/test-route.c b/src/core/platform/tests/test-route.c index 0aa94ec..4758786 100644 --- a/src/core/platform/tests/test-route.c +++ b/src/core/platform/tests/test-route.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/platform/tests/test-tc.c b/src/core/platform/tests/test-tc.c index c005b06..d15c3d7 100644 --- a/src/core/platform/tests/test-tc.c +++ b/src/core/platform/tests/test-tc.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/platform/wifi/nm-wifi-utils-nl80211.c b/src/core/platform/wifi/nm-wifi-utils-nl80211.c index aae6af1..ad06724 100644 --- a/src/core/platform/wifi/nm-wifi-utils-nl80211.c +++ b/src/core/platform/wifi/nm-wifi-utils-nl80211.c @@ -5,7 +5,7 @@ * Copyright (C) 2011 Intel Corporation. All rights reserved. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-wifi-utils-nl80211.h" diff --git a/src/core/platform/wifi/nm-wifi-utils-wext.c b/src/core/platform/wifi/nm-wifi-utils-wext.c index 2b070b5..a44fcf6 100644 --- a/src/core/platform/wifi/nm-wifi-utils-wext.c +++ b/src/core/platform/wifi/nm-wifi-utils-wext.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-wifi-utils-wext.h" diff --git a/src/core/platform/wifi/nm-wifi-utils.c b/src/core/platform/wifi/nm-wifi-utils.c index 66d6a05..49ae181 100644 --- a/src/core/platform/wifi/nm-wifi-utils.c +++ b/src/core/platform/wifi/nm-wifi-utils.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-wifi-utils.h" diff --git a/src/core/platform/wpan/nm-wpan-utils.c b/src/core/platform/wpan/nm-wpan-utils.c index 96897ae..efb1997 100644 --- a/src/core/platform/wpan/nm-wpan-utils.c +++ b/src/core/platform/wpan/nm-wpan-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-wpan-utils.h" diff --git a/src/core/ppp/meson.build b/src/core/ppp/meson.build index 991f0b3..607b471 100644 --- a/src/core/ppp/meson.build +++ b/src/core/ppp/meson.build @@ -7,7 +7,6 @@ nm_pppd_plugin = shared_module( dependencies: libnm_core_nm_default_dep, c_args: [ '-DG_LOG_DOMAIN="nm-pppd-plugin"', - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_GLIB', ], install: true, install_dir: pppd_plugin_dir, diff --git a/src/core/ppp/nm-ppp-manager-call.c b/src/core/ppp/nm-ppp-manager-call.c index b07c3df..f791e8b 100644 --- a/src/core/ppp/nm-ppp-manager-call.c +++ b/src/core/ppp/nm-ppp-manager-call.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-ppp-manager-call.h" diff --git a/src/core/ppp/nm-ppp-manager.c b/src/core/ppp/nm-ppp-manager.c index 939eca3..396a49a 100644 --- a/src/core/ppp/nm-ppp-manager.c +++ b/src/core/ppp/nm-ppp-manager.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 - 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-ppp-manager.h" diff --git a/src/core/ppp/nm-pppd-plugin.c b/src/core/ppp/nm-pppd-plugin.c index 519e637..c9016da 100644 --- a/src/core/ppp/nm-pppd-plugin.c +++ b/src/core/ppp/nm-pppd-plugin.c @@ -20,7 +20,7 @@ #include #include -#include "nm-default.h" +#include "nm-glib-aux/nm-default-glib.h" #include "nm-dbus-interface.h" diff --git a/src/core/settings/nm-agent-manager.c b/src/core/settings/nm-agent-manager.c index cd96808..7e61790 100644 --- a/src/core/settings/nm-agent-manager.c +++ b/src/core/settings/nm-agent-manager.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-agent-manager.h" diff --git a/src/core/settings/nm-secret-agent.c b/src/core/settings/nm-secret-agent.c index 7d31272..7e7c5d7 100644 --- a/src/core/settings/nm-secret-agent.c +++ b/src/core/settings/nm-secret-agent.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-secret-agent.h" diff --git a/src/core/settings/nm-settings-connection.c b/src/core/settings/nm-settings-connection.c index a5761bf..0ff0718 100644 --- a/src/core/settings/nm-settings-connection.c +++ b/src/core/settings/nm-settings-connection.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-settings-connection.h" diff --git a/src/core/settings/nm-settings-connection.h b/src/core/settings/nm-settings-connection.h index 3954fd8..7c61dbe 100644 --- a/src/core/settings/nm-settings-connection.h +++ b/src/core/settings/nm-settings-connection.h @@ -56,9 +56,9 @@ typedef enum { NM_SETTINGS_CONNECTION_UPDATE_REASON_CLEAR_AGENT_SECRETS = (1u << 5), NM_SETTINGS_CONNECTION_UPDATE_REASON_RESET_AGENT_SECRETS = (1u << 6), - /* if a profile was greated as default-wired connection for a device, then + /* if a profile was generated as default-wired connection for a device, then * when the user modifies it via D-Bus, the profile should become persisted - * to disk and it the purpose why the profile was created should be forgotten. */ + * to disk and the initial purpose the profile was created should be forgotten. */ NM_SETTINGS_CONNECTION_UPDATE_REASON_CLEAR_DEFAULT_WIRED = (1u << 7), NM_SETTINGS_CONNECTION_UPDATE_REASON_BLOCK_AUTOCONNECT = (1u << 8), diff --git a/src/core/settings/nm-settings-plugin.c b/src/core/settings/nm-settings-plugin.c index 74ae314..9e81caa 100644 --- a/src/core/settings/nm-settings-plugin.c +++ b/src/core/settings/nm-settings-plugin.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-settings-plugin.h" diff --git a/src/core/settings/nm-settings-storage.c b/src/core/settings/nm-settings-storage.c index bea440c..c56ba07 100644 --- a/src/core/settings/nm-settings-storage.c +++ b/src/core/settings/nm-settings-storage.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-settings-storage.h" diff --git a/src/core/settings/nm-settings-utils.c b/src/core/settings/nm-settings-utils.c index f6c2f60..775d039 100644 --- a/src/core/settings/nm-settings-utils.c +++ b/src/core/settings/nm-settings-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-settings-utils.h" diff --git a/src/core/settings/nm-settings.c b/src/core/settings/nm-settings.c index eda3789..3d31fb8 100644 --- a/src/core/settings/nm-settings.c +++ b/src/core/settings/nm-settings.c @@ -7,7 +7,7 @@ * Copyright (C) 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-settings.h" @@ -22,7 +22,7 @@ #include "nm-libnm-core-intern/nm-common-macros.h" #include "nm-glib-aux/nm-keyfile-aux.h" -#include "nm-keyfile/nm-keyfile-internal.h" +#include "nm-keyfile-internal.h" #include "nm-dbus-interface.h" #include "nm-connection.h" #include "nm-setting-8021x.h" diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c index b5c205c..d114db0 100644 --- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c +++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c @@ -5,7 +5,7 @@ * Copyright (C) 2007 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-ifcfg-rh-plugin.h" diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c index bce47ef..209957d 100644 --- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c +++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-ifcfg-rh-reader.h" diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.c index 3c26828..3f674de 100644 --- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.c +++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-ifcfg-rh-storage.h" diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c index 58d3e69..8da5de4 100644 --- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c +++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-ifcfg-rh-utils.h" @@ -544,6 +544,7 @@ const char *const _nm_ethtool_ifcfg_names[] = { ETHT_NAME(NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD, "l2-fwd-offload"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_LOOPBACK, "loopback"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_LRO, "lro"), + ETHT_NAME(NM_ETHTOOL_ID_FEATURE_MACSEC_HW_OFFLOAD, "macsec-hw-offload"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_NTUPLE, "ntuple"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_RX, "rx"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_RXHASH, "rxhash"), @@ -551,12 +552,15 @@ const char *const _nm_ethtool_ifcfg_names[] = { ETHT_NAME(NM_ETHTOOL_ID_FEATURE_RX_ALL, "rx-all"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_RX_FCS, "rx-fcs"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_RX_GRO_HW, "rx-gro-hw"), + ETHT_NAME(NM_ETHTOOL_ID_FEATURE_RX_GRO_LIST, "rx-gro-list"), + ETHT_NAME(NM_ETHTOOL_ID_FEATURE_RX_UDP_GRO_FORWARDING, "rx-udp-gro-forwarding"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD, "rx-udp_tunnel-port-offload"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_RX_VLAN_FILTER, "rx-vlan-filter"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_FILTER, "rx-vlan-stag-filter"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_HW_PARSE, "rx-vlan-stag-hw-parse"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_SG, "sg"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TLS_HW_RECORD, "tls-hw-record"), + ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TLS_HW_RX_OFFLOAD, "tls-hw-rx-offload"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TLS_HW_TX_OFFLOAD, "tls-hw-tx-offload"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TSO, "tso"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX, "tx"), @@ -570,6 +574,7 @@ const char *const _nm_ethtool_ifcfg_names[] = { ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_FCOE_SEGMENTATION, "tx-fcoe-segmentation"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_GRE_CSUM_SEGMENTATION, "tx-gre-csum-segmentation"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_GRE_SEGMENTATION, "tx-gre-segmentation"), + ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_GSO_LIST, "tx-gso-list"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_GSO_PARTIAL, "tx-gso-partial"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST, "tx-gso-robust"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION, "tx-ipxip4-segmentation"), @@ -582,6 +587,8 @@ const char *const _nm_ethtool_ifcfg_names[] = { ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_TCP_ECN_SEGMENTATION, "tx-tcp-ecn-segmentation"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_TCP_MANGLEID_SEGMENTATION, "tx-tcp-mangleid-segmentation"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_TCP_SEGMENTATION, "tx-tcp-segmentation"), + ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION, + "tx-tunnel-remcsum-segmentation"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_UDP_SEGMENTATION, "tx-udp-segmentation"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION, "tx-udp_tnl-csum-segmentation"), ETHT_NAME(NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION, "tx-udp_tnl-segmentation"), @@ -648,6 +655,7 @@ static NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( {"l2-fwd-offload", NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD}, {"loopback", NM_ETHTOOL_ID_FEATURE_LOOPBACK}, {"lro", NM_ETHTOOL_ID_FEATURE_LRO}, + {"macsec-hw-offload", NM_ETHTOOL_ID_FEATURE_MACSEC_HW_OFFLOAD}, {"ntuple", NM_ETHTOOL_ID_FEATURE_NTUPLE}, {"rx", NM_ETHTOOL_ID_FEATURE_RX}, {"rx-all", NM_ETHTOOL_ID_FEATURE_RX_ALL}, @@ -655,9 +663,11 @@ static NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( {"rx-fcs", NM_ETHTOOL_ID_FEATURE_RX_FCS}, {"rx-gro", NM_ETHTOOL_ID_FEATURE_GRO}, // kernel-only name {"rx-gro-hw", NM_ETHTOOL_ID_FEATURE_RX_GRO_HW}, + {"rx-gro-list", NM_ETHTOOL_ID_FEATURE_RX_GRO_LIST}, {"rx-hashing", NM_ETHTOOL_ID_FEATURE_RXHASH}, // kernel-only name {"rx-lro", NM_ETHTOOL_ID_FEATURE_LRO}, // kernel-only name {"rx-ntuple-filter", NM_ETHTOOL_ID_FEATURE_NTUPLE}, // kernel-only name + {"rx-udp-gro-forwarding", NM_ETHTOOL_ID_FEATURE_RX_UDP_GRO_FORWARDING}, {"rx-udp_tunnel-port-offload", NM_ETHTOOL_ID_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD}, {"rx-vlan-filter", NM_ETHTOOL_ID_FEATURE_RX_VLAN_FILTER}, {"rx-vlan-hw-parse", NM_ETHTOOL_ID_FEATURE_RXVLAN}, // kernel-only name @@ -667,6 +677,7 @@ static NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( {"rxvlan", NM_ETHTOOL_ID_FEATURE_RXVLAN}, {"sg", NM_ETHTOOL_ID_FEATURE_SG}, {"tls-hw-record", NM_ETHTOOL_ID_FEATURE_TLS_HW_RECORD}, + {"tls-hw-rx-offload", NM_ETHTOOL_ID_FEATURE_TLS_HW_RX_OFFLOAD}, {"tls-hw-tx-offload", NM_ETHTOOL_ID_FEATURE_TLS_HW_TX_OFFLOAD}, {"tso", NM_ETHTOOL_ID_FEATURE_TSO}, {"tx", NM_ETHTOOL_ID_FEATURE_TX}, @@ -680,6 +691,7 @@ static NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( {"tx-generic-segmentation", NM_ETHTOOL_ID_FEATURE_GSO}, // kernel-only name {"tx-gre-csum-segmentation", NM_ETHTOOL_ID_FEATURE_TX_GRE_CSUM_SEGMENTATION}, {"tx-gre-segmentation", NM_ETHTOOL_ID_FEATURE_TX_GRE_SEGMENTATION}, + {"tx-gso-list", NM_ETHTOOL_ID_FEATURE_TX_GSO_LIST}, {"tx-gso-partial", NM_ETHTOOL_ID_FEATURE_TX_GSO_PARTIAL}, {"tx-gso-robust", NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST}, {"tx-ipxip4-segmentation", NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION}, @@ -692,6 +704,7 @@ static NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( {"tx-tcp-mangleid-segmentation", NM_ETHTOOL_ID_FEATURE_TX_TCP_MANGLEID_SEGMENTATION}, {"tx-tcp-segmentation", NM_ETHTOOL_ID_FEATURE_TX_TCP_SEGMENTATION}, {"tx-tcp6-segmentation", NM_ETHTOOL_ID_FEATURE_TX_TCP6_SEGMENTATION}, + {"tx-tunnel-remcsum-segmentation", NM_ETHTOOL_ID_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION}, {"tx-udp-segmentation", NM_ETHTOOL_ID_FEATURE_TX_UDP_SEGMENTATION}, {"tx-udp_tnl-csum-segmentation", NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION}, {"tx-udp_tnl-segmentation", NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION}, diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c index a268c58..a968fce 100644 --- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c @@ -3,7 +3,7 @@ * Copyright (C) 2009 - 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-ifcfg-rh-writer.h" @@ -34,7 +34,6 @@ #include "nm-utils.h" #include "nm-core-internal.h" #include "NetworkManagerUtils.h" -#include "nm-meta-setting.h" #include "nm-base/nm-ethtool-base.h" #include "nms-ifcfg-rh-common.h" diff --git a/src/core/settings/plugins/ifcfg-rh/shvar.c b/src/core/settings/plugins/ifcfg-rh/shvar.c index 6c1cd41..386bcac 100644 --- a/src/core/settings/plugins/ifcfg-rh/shvar.c +++ b/src/core/settings/plugins/ifcfg-rh/shvar.c @@ -3,7 +3,7 @@ * Copyright (C) 1999, 2000 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "shvar.h" diff --git a/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index 10d498e..59127d0 100644 --- a/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/settings/plugins/ifupdown/nms-ifupdown-interface-parser.c b/src/core/settings/plugins/ifupdown/nms-ifupdown-interface-parser.c index c766a35..a8a9c40 100644 --- a/src/core/settings/plugins/ifupdown/nms-ifupdown-interface-parser.c +++ b/src/core/settings/plugins/ifupdown/nms-ifupdown-interface-parser.c @@ -4,7 +4,7 @@ * Copyright (C) 2004 Tom Parker */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-ifupdown-interface-parser.h" diff --git a/src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c b/src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c index 767e0da..a4974a9 100644 --- a/src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c +++ b/src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 Canonical Ltd. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-ifupdown-parser.h" diff --git a/src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.c b/src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.c index 8c22e3b..34523f8 100644 --- a/src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.c +++ b/src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.c @@ -5,7 +5,7 @@ * Copyright (C) 2009 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-ifupdown-plugin.h" diff --git a/src/core/settings/plugins/ifupdown/tests/test-ifupdown.c b/src/core/settings/plugins/ifupdown/tests/test-ifupdown.c index c3c5bb5..6e3eb0e 100644 --- a/src/core/settings/plugins/ifupdown/tests/test-ifupdown.c +++ b/src/core/settings/plugins/ifupdown/tests/test-ifupdown.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-core-internal.h" diff --git a/src/core/settings/plugins/keyfile/nms-keyfile-plugin.c b/src/core/settings/plugins/keyfile/nms-keyfile-plugin.c index 400c175..789bfc1 100644 --- a/src/core/settings/plugins/keyfile/nms-keyfile-plugin.c +++ b/src/core/settings/plugins/keyfile/nms-keyfile-plugin.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-keyfile-plugin.h" @@ -23,7 +23,7 @@ #include "nm-utils.h" #include "nm-config.h" #include "nm-core-internal.h" -#include "nm-keyfile/nm-keyfile-internal.h" +#include "nm-keyfile-internal.h" #include "systemd/nm-sd-utils-shared.h" diff --git a/src/core/settings/plugins/keyfile/nms-keyfile-reader.c b/src/core/settings/plugins/keyfile/nms-keyfile-reader.c index 6978c10..70b047f 100644 --- a/src/core/settings/plugins/keyfile/nms-keyfile-reader.c +++ b/src/core/settings/plugins/keyfile/nms-keyfile-reader.c @@ -3,13 +3,13 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-keyfile-reader.h" #include -#include "nm-keyfile/nm-keyfile-internal.h" +#include "nm-keyfile-internal.h" #include "NetworkManagerUtils.h" #include "nms-keyfile-utils.h" diff --git a/src/core/settings/plugins/keyfile/nms-keyfile-storage.c b/src/core/settings/plugins/keyfile/nms-keyfile-storage.c index 8fb9861..89be817 100644 --- a/src/core/settings/plugins/keyfile/nms-keyfile-storage.c +++ b/src/core/settings/plugins/keyfile/nms-keyfile-storage.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-keyfile-storage.h" diff --git a/src/core/settings/plugins/keyfile/nms-keyfile-utils.c b/src/core/settings/plugins/keyfile/nms-keyfile-utils.c index a62e0ae..f3dffda 100644 --- a/src/core/settings/plugins/keyfile/nms-keyfile-utils.c +++ b/src/core/settings/plugins/keyfile/nms-keyfile-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-keyfile-utils.h" @@ -11,7 +11,7 @@ #include #include "nm-glib-aux/nm-io-utils.h" -#include "nm-keyfile/nm-keyfile-internal.h" +#include "nm-keyfile-internal.h" #include "nm-utils.h" #include "nm-setting-wired.h" #include "nm-setting-wireless.h" diff --git a/src/core/settings/plugins/keyfile/nms-keyfile-writer.c b/src/core/settings/plugins/keyfile/nms-keyfile-writer.c index be1bf15..0e2c94b 100644 --- a/src/core/settings/plugins/keyfile/nms-keyfile-writer.c +++ b/src/core/settings/plugins/keyfile/nms-keyfile-writer.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 - 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nms-keyfile-writer.h" @@ -12,7 +12,7 @@ #include #include -#include "nm-keyfile/nm-keyfile-internal.h" +#include "nm-keyfile-internal.h" #include "nms-keyfile-utils.h" #include "nms-keyfile-reader.h" diff --git a/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c b/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c index 4d9c86c..348b0ed 100644 --- a/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c +++ b/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2017 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/supplicant/nm-supplicant-config.c b/src/core/supplicant/nm-supplicant-config.c index 1754bff..eab494b 100644 --- a/src/core/supplicant/nm-supplicant-config.c +++ b/src/core/supplicant/nm-supplicant-config.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-supplicant-config.h" diff --git a/src/core/supplicant/nm-supplicant-interface.c b/src/core/supplicant/nm-supplicant-interface.c index ec278c3..6d9c604 100644 --- a/src/core/supplicant/nm-supplicant-interface.c +++ b/src/core/supplicant/nm-supplicant-interface.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-supplicant-interface.h" diff --git a/src/core/supplicant/nm-supplicant-manager.c b/src/core/supplicant/nm-supplicant-manager.c index 30b15cc..3255418 100644 --- a/src/core/supplicant/nm-supplicant-manager.c +++ b/src/core/supplicant/nm-supplicant-manager.c @@ -4,7 +4,7 @@ * Copyright (C) 2007 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-supplicant-manager.h" diff --git a/src/core/supplicant/nm-supplicant-settings-verify.c b/src/core/supplicant/nm-supplicant-settings-verify.c index fe4cb1c..3f0a33e 100644 --- a/src/core/supplicant/nm-supplicant-settings-verify.c +++ b/src/core/supplicant/nm-supplicant-settings-verify.c @@ -3,7 +3,7 @@ * Copyright (C) 2006 - 2012 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-supplicant-settings-verify.h" diff --git a/src/core/supplicant/tests/test-supplicant-config.c b/src/core/supplicant/tests/test-supplicant-config.c index 1dde90b..99729c1 100644 --- a/src/core/supplicant/tests/test-supplicant-config.c +++ b/src/core/supplicant/tests/test-supplicant-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2008 - 2011 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/systemd/meson.build b/src/core/systemd/meson.build index 4f3a63e..70f6b54 100644 --- a/src/core/systemd/meson.build +++ b/src/core/systemd/meson.build @@ -45,7 +45,9 @@ libnm_systemd_core = static_library( libnm_core_dep, libnm_systemd_shared_dep, ], - c_args: '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD', + c_args: [ + '-DG_LOG_DOMAIN="NetworkManager"', + ], link_with: libc_siphash, ) diff --git a/src/core/systemd/nm-default-systemd.h b/src/core/systemd/nm-default-systemd.h new file mode 100644 index 0000000..1979d9c --- /dev/null +++ b/src/core/systemd/nm-default-systemd.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2015 Red Hat, Inc. + */ + +#ifndef __NM_DEFAULT_SYSTEMD_H__ +#define __NM_DEFAULT_SYSTEMD_H__ + +/*****************************************************************************/ + +#include "nm-default-daemon.h" + +#undef NETWORKMANAGER_COMPILATION +#define NETWORKMANAGER_COMPILATION NM_NETWORKMANAGER_COMPILATION_SYSTEMD + +/*****************************************************************************/ + +#endif /* __NM_DEFAULT_SYSTEMD_H__ */ diff --git a/src/core/systemd/nm-sd-utils-core.c b/src/core/systemd/nm-sd-utils-core.c index c7d4aad..af68603 100644 --- a/src/core/systemd/nm-sd-utils-core.c +++ b/src/core/systemd/nm-sd-utils-core.c @@ -3,7 +3,7 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/systemd/nm-default-systemd.h" #include "nm-sd-utils-core.h" diff --git a/src/core/systemd/nm-sd-utils-dhcp.c b/src/core/systemd/nm-sd-utils-dhcp.c index bafc8fc..b5aa315 100644 --- a/src/core/systemd/nm-sd-utils-dhcp.c +++ b/src/core/systemd/nm-sd-utils-dhcp.c @@ -3,7 +3,7 @@ * Copyright (C) 2019 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/systemd/nm-default-systemd.h" #include "nm-sd-utils-dhcp.h" diff --git a/src/core/systemd/nm-sd.c b/src/core/systemd/nm-sd.c index 6543321..11f3abb 100644 --- a/src/core/systemd/nm-sd.c +++ b/src/core/systemd/nm-sd.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 - 2016 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/systemd/nm-default-systemd.h" #include "nm-sd.h" diff --git a/src/core/systemd/sd-adapt-core/nm-sd-adapt-core.c b/src/core/systemd/sd-adapt-core/nm-sd-adapt-core.c index c03d4d9..9339b33 100644 --- a/src/core/systemd/sd-adapt-core/nm-sd-adapt-core.c +++ b/src/core/systemd/sd-adapt-core/nm-sd-adapt-core.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 - 2016 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/systemd/nm-default-systemd.h" #include "nm-sd-adapt-core.h" diff --git a/src/core/systemd/sd-adapt-core/nm-sd-adapt-core.h b/src/core/systemd/sd-adapt-core/nm-sd-adapt-core.h index a733291..f627d7d 100644 --- a/src/core/systemd/sd-adapt-core/nm-sd-adapt-core.h +++ b/src/core/systemd/sd-adapt-core/nm-sd-adapt-core.h @@ -6,13 +6,16 @@ #ifndef __NM_SD_ADAPT_CORE_H__ #define __NM_SD_ADAPT_CORE_H__ -#include "nm-default.h" +#include "src/core/systemd/nm-default-systemd.h" #include #include #include +#undef NETWORKMANAGER_COMPILATION #include "systemd/sd-adapt-shared/nm-sd-adapt-shared.h" +#undef NETWORKMANAGER_COMPILATION +#define NETWORKMANAGER_COMPILATION NM_NETWORKMANAGER_COMPILATION_SYSTEMD #ifndef HAVE_SYS_AUXV_H #define HAVE_SYS_AUXV_H 0 diff --git a/src/core/tests/config/nm-test-device.c b/src/core/tests/config/nm-test-device.c index c6b894d..f724b03 100644 --- a/src/core/tests/config/nm-test-device.c +++ b/src/core/tests/config/nm-test-device.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-test-device.h" diff --git a/src/core/tests/config/test-config.c b/src/core/tests/config/test-config.c index 526c713..3bb1481 100644 --- a/src/core/tests/config/test-config.c +++ b/src/core/tests/config/test-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/tests/meson.build b/src/core/tests/meson.build index f412539..994563c 100644 --- a/src/core/tests/meson.build +++ b/src/core/tests/meson.build @@ -41,8 +41,7 @@ exe = executable( libnm_systemd_shared_dep, ], c_args: [ - '-DNETWORKMANAGER_COMPILATION_TEST', - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD', + '-DG_LOG_DOMAIN="test"', ], ) diff --git a/src/core/tests/test-core-with-expect.c b/src/core/tests/test-core-with-expect.c index d9750cd..022cf8f 100644 --- a/src/core/tests/test-core-with-expect.c +++ b/src/core/tests/test-core-with-expect.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/tests/test-core.c b/src/core/tests/test-core.c index 87136dc..8698c40 100644 --- a/src/core/tests/test-core.c +++ b/src/core/tests/test-core.c @@ -3,7 +3,7 @@ * Copyright (C) 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/tests/test-dcb.c b/src/core/tests/test-dcb.c index 9ee1fda..fc591fc 100644 --- a/src/core/tests/test-dcb.c +++ b/src/core/tests/test-dcb.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-dcb.h" diff --git a/src/core/tests/test-ip4-config.c b/src/core/tests/test-ip4-config.c index 008201a..27b1d61 100644 --- a/src/core/tests/test-ip4-config.c +++ b/src/core/tests/test-ip4-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 - 2014 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include diff --git a/src/core/tests/test-ip6-config.c b/src/core/tests/test-ip6-config.c index 7ba7973..3b48fb7 100644 --- a/src/core/tests/test-ip6-config.c +++ b/src/core/tests/test-ip6-config.c @@ -3,7 +3,7 @@ * Copyright (C) 2013 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/tests/test-l3cfg.c b/src/core/tests/test-l3cfg.c index 92e596a..43132c6 100644 --- a/src/core/tests/test-l3cfg.c +++ b/src/core/tests/test-l3cfg.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-l3cfg.h" #include "nm-l3-ipv4ll.h" diff --git a/src/core/tests/test-systemd.c b/src/core/tests/test-systemd.c index aa87660..03576c1 100644 --- a/src/core/tests/test-systemd.c +++ b/src/core/tests/test-systemd.c @@ -3,7 +3,7 @@ * Copyright (C) 2016 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/systemd/nm-default-systemd.h" #include "systemd/nm-sd.h" #include "systemd/nm-sd-utils-shared.h" diff --git a/src/core/tests/test-utils.c b/src/core/tests/test-utils.c index 7750109..1d562bd 100644 --- a/src/core/tests/test-utils.c +++ b/src/core/tests/test-utils.c @@ -3,7 +3,7 @@ * Copyright (C) 2015 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include #include diff --git a/src/core/tests/test-wired-defname.c b/src/core/tests/test-wired-defname.c index 7fb8cba..f810c56 100644 --- a/src/core/tests/test-wired-defname.c +++ b/src/core/tests/test-wired-defname.c @@ -3,7 +3,7 @@ * Copyright (C) 2010 Red Hat, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-simple-connection.h" #include "nm-setting-connection.h" diff --git a/src/core/vpn/nm-vpn-connection.c b/src/core/vpn/nm-vpn-connection.c index b651349..02831b0 100644 --- a/src/core/vpn/nm-vpn-connection.c +++ b/src/core/vpn/nm-vpn-connection.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-vpn-connection.h" diff --git a/src/core/vpn/nm-vpn-manager.c b/src/core/vpn/nm-vpn-manager.c index 65f9e56..53fe58d 100644 --- a/src/core/vpn/nm-vpn-manager.c +++ b/src/core/vpn/nm-vpn-manager.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 - 2008 Novell, Inc. */ -#include "nm-default.h" +#include "src/core/nm-default-daemon.h" #include "nm-vpn-manager.h" diff --git a/tools/check-tree.sh b/tools/check-tree.sh new file mode 100755 index 0000000..cff85c3 --- /dev/null +++ b/tools/check-tree.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +set -e + +TOP_DIR="$(dirname "$0")/.." + +die() { + printf 'FAIL: %s\n' "$*" >&2 + exit 1 +} + +check_cmp() { + local a="$1" + local b="$2" + + cmp "$TOP_DIR/$a" "$TOP_DIR/$b" && return 0 + + diff "$TOP_DIR/$a" "$TOP_DIR/$b" || : + die "files \"$a\" and \"$b\" differ!" +} + +check_cmp shared/nm-base/nm-ethtool-utils-base.h libnm/nm-ethtool-utils.h +check_cmp libnm-core/nm-meta-setting-base-impl.h clients/common/nm-meta-setting-base-impl.h +check_cmp libnm-core/nm-meta-setting-base-impl.c clients/common/nm-meta-setting-base-impl.c