From 6aa6da2b080165b2d2a30db17bb19dd386a66581 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 8 Jan 2021 19:01:28 +0100 Subject: [PATCH 01/23] shared: add _nm_utils_hwaddr_aton_exact() This is the same as libnm's nm_utils_hwaddr_aton(), which however is public API. We want to use this function also without libnm(-core). Hence add the helper to "shared/nm-glib-aux". --- libnm-core/nm-utils.c | 13 ++----------- shared/nm-glib-aux/nm-shared-utils.h | 18 ++++++++++++++++++ src/platform/nm-platform-utils.c | 2 +- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index 6384e2e9a1..ab5de92a46 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -3995,16 +3995,13 @@ GByteArray * nm_utils_hwaddr_atoba(const char *asc, gsize length) { GByteArray *ba; - gsize l; g_return_val_if_fail(asc, NULL); g_return_val_if_fail(length > 0 && length <= NM_UTILS_HWADDR_LEN_MAX, NULL); ba = g_byte_array_sized_new(length); g_byte_array_set_size(ba, length); - if (!_nm_utils_hwaddr_aton(asc, ba->data, length, &l)) - goto fail; - if (length != l) + if (!_nm_utils_hwaddr_aton_exact(asc, ba->data, length)) goto fail; return ba; @@ -4029,17 +4026,11 @@ fail: guint8 * nm_utils_hwaddr_aton(const char *asc, gpointer buffer, gsize length) { - gsize l; - g_return_val_if_fail(asc, NULL); g_return_val_if_fail(buffer, NULL); g_return_val_if_fail(length > 0 && length <= NM_UTILS_HWADDR_LEN_MAX, NULL); - if (!_nm_utils_hwaddr_aton(asc, buffer, length, &l)) - return NULL; - if (length != l) - return NULL; - return buffer; + return _nm_utils_hwaddr_aton_exact(asc, buffer, length); } /** diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h index fe61459f5f..abcb20abaf 100644 --- a/shared/nm-glib-aux/nm-shared-utils.h +++ b/shared/nm-glib-aux/nm-shared-utils.h @@ -2092,6 +2092,24 @@ _nm_utils_hwaddr_aton(const char *asc, gpointer buffer, gsize buffer_length, gsi out_length); } +static inline guint8 * +_nm_utils_hwaddr_aton_exact(const char *asc, gpointer buffer, gsize buffer_length) +{ + g_return_val_if_fail(asc, NULL); + g_return_val_if_fail(buffer, NULL); + g_return_val_if_fail(buffer_length > 0, NULL); + + return nm_utils_hexstr2bin_full(asc, + FALSE, + TRUE, + FALSE, + ":-", + buffer_length, + buffer, + buffer_length, + NULL); +} + static inline const char * _nm_utils_hwaddr_ntoa(gconstpointer addr, gsize addr_len, diff --git a/src/platform/nm-platform-utils.c b/src/platform/nm-platform-utils.c index f0dfc074a7..75ac769a74 100644 --- a/src/platform/nm-platform-utils.c +++ b/src/platform/nm-platform-utils.c @@ -1439,7 +1439,7 @@ nmp_utils_ethtool_set_wake_on_lan(int ifindex, wol_info.wolopts |= WAKE_MAGIC; if (wol_password) { - if (!nm_utils_hwaddr_aton(wol_password, wol_info.sopass, ETH_ALEN)) { + if (!_nm_utils_hwaddr_aton_exact(wol_password, wol_info.sopass, ETH_ALEN)) { nm_log_dbg(LOGD_PLATFORM, "ethtool[%d]: couldn't parse Wake-on-LAN password '%s'", ifindex, From 43d48101797a2dd092893db4db89ee61737bbd62 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 8 Jan 2021 19:13:39 +0100 Subject: [PATCH 02/23] shared: move nm_utils_ifname_cpy() to "shared/nm-glib-aux" --- shared/nm-glib-aux/nm-shared-utils.c | 25 +++++++++++++++++++++++++ shared/nm-glib-aux/nm-shared-utils.h | 2 ++ src/nm-core-utils.c | 23 ----------------------- src/nm-core-utils.h | 2 -- 4 files changed, 27 insertions(+), 25 deletions(-) diff --git a/shared/nm-glib-aux/nm-shared-utils.c b/shared/nm-glib-aux/nm-shared-utils.c index 5bab4bd2f2..5f5f41ae2e 100644 --- a/shared/nm-glib-aux/nm-shared-utils.c +++ b/shared/nm-glib-aux/nm-shared-utils.c @@ -5136,6 +5136,31 @@ nm_utils_g_main_context_create_integrate_source(GMainContext *inner_context) return &ctx_src->source; } +/*****************************************************************************/ + +void +nm_utils_ifname_cpy(char *dst, const char *name) +{ + int i; + + g_return_if_fail(dst); + g_return_if_fail(name && name[0]); + + nm_assert(nm_utils_ifname_valid_kernel(name, NULL)); + + /* ensures NUL padding of the entire IFNAMSIZ buffer. */ + + for (i = 0; i < (int) IFNAMSIZ && name[i] != '\0'; i++) + dst[i] = name[i]; + + nm_assert(name[i] == '\0'); + + for (; i < (int) IFNAMSIZ; i++) + dst[i] = '\0'; +} + +/*****************************************************************************/ + gboolean nm_utils_ifname_valid_kernel(const char *name, GError **error) { diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h index abcb20abaf..a78682f6a1 100644 --- a/shared/nm-glib-aux/nm-shared-utils.h +++ b/shared/nm-glib-aux/nm-shared-utils.h @@ -2279,6 +2279,8 @@ void nm_indirect_g_free(gpointer arg); /*****************************************************************************/ +void nm_utils_ifname_cpy(char *dst, const char *name); + typedef enum { NMU_IFACE_ANY, NMU_IFACE_KERNEL, diff --git a/src/nm-core-utils.c b/src/nm-core-utils.c index 7b62968fb5..660f6f4317 100644 --- a/src/nm-core-utils.c +++ b/src/nm-core-utils.c @@ -4269,29 +4269,6 @@ nm_utils_g_value_set_strv(GValue *value, GPtrArray *strings) /*****************************************************************************/ -void -nm_utils_ifname_cpy(char *dst, const char *name) -{ - int i; - - g_return_if_fail(dst); - g_return_if_fail(name && name[0]); - - nm_assert(nm_utils_ifname_valid_kernel(name, NULL)); - - /* ensures NUL padding of the entire IFNAMSIZ buffer. */ - - for (i = 0; i < (int) IFNAMSIZ && name[i] != '\0'; i++) - dst[i] = name[i]; - - nm_assert(name[i] == '\0'); - - for (; i < (int) IFNAMSIZ; i++) - dst[i] = '\0'; -} - -/*****************************************************************************/ - /** * Takes a pair @timestamp and @duration, and returns the remaining duration based * on the new timestamp @now. diff --git a/src/nm-core-utils.h b/src/nm-core-utils.h index c90daaa683..f4fe5f673c 100644 --- a/src/nm-core-utils.h +++ b/src/nm-core-utils.h @@ -501,8 +501,6 @@ void _nm_utils_set_testing(NMUtilsTestFlags flags); void nm_utils_g_value_set_strv(GValue *value, GPtrArray *strings); -void nm_utils_ifname_cpy(char *dst, const char *name); - guint32 nm_utils_lifetime_rebase_relative_time_on_now(guint32 timestamp, guint32 duration, gint32 now); From 27f57be0764575db92b91d8f0c7c1a97259ac87e Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 7 Jan 2021 10:09:40 +0100 Subject: [PATCH 03/23] build: add missing linking with systemd-journald library These programs use sd_journal_sendv(), they thus need to link against systemd library. --- Makefile.am | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile.am b/Makefile.am index e8bd7bdfc1..edd79bed35 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2401,6 +2401,7 @@ src_libNetworkManager_la_LIBADD = \ $(GLIB_LIBS) \ $(LIBUDEV_LIBS) \ $(SYSTEMD_LOGIN_LIBS) \ + $(SYSTEMD_JOURNAL_LIBS) \ $(LIBNDP_LIBS) \ $(DL_LIBS) \ $(SELINUX_LIBS) \ @@ -2508,6 +2509,7 @@ src_nm_iface_helper_LDADD = \ shared/libndhcp4.la \ shared/libcrbtree.la \ shared/libcsiphash.la \ + $(SYSTEMD_JOURNAL_LIBS) \ $(GLIB_LIBS) \ $(LIBUDEV_LIBS) \ $(LIBNDP_LIBS) \ @@ -2558,6 +2560,7 @@ src_initrd_nm_initrd_generator_LDADD = \ shared/nm-std-aux/libnm-std-aux.la \ shared/libndhcp4.la \ shared/libcsiphash.la \ + $(SYSTEMD_JOURNAL_LIBS) \ $(GLIB_LIBS) \ $(NULL) From fd2e626b40effb354ecb363184b4dfc53f8dd3ce Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 7 Jan 2021 10:58:21 +0100 Subject: [PATCH 04/23] build: add missing dependency for config-extra.h in Makefile.am --- Makefile.am | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile.am b/Makefile.am index edd79bed35..493081373c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -114,6 +114,9 @@ $(libnm_core_lib_h_pub_mkenums): config-extra.h libnm-core/.dirstamp: config-extra.h shared/.dirstamp: config-extra.h shared/nm-glib-aux/.dirstamp: config-extra.h +shared/nm-glib-aux/tests/.dirstamp: config-extra.h +shared/nm-platform/.dirstamp: config-extra.h +shared/nm-platform/tests/.dirstamp: config-extra.h shared/nm-std-aux/.dirstamp: config-extra.h shared/nm-udev-aux/.dirstamp: config-extra.h shared/systemd/.dirstamp: config-extra.h From 63e070b180cdad9b16b3b0ad069a2eb05543d63e Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 7 Jan 2021 11:13:55 +0100 Subject: [PATCH 05/23] build/meson: cleanup build of test-systemd executable --- src/tests/meson.build | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/src/tests/meson.build b/src/tests/meson.build index 7d6d0b0a2b..6366225bce 100644 --- a/src/tests/meson.build +++ b/src/tests/meson.build @@ -29,28 +29,22 @@ foreach test_unit: test_units ) endforeach -test_unit = 'test-systemd' - -c_flags = [ - '-DNETWORKMANAGER_COMPILATION_TEST', - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD', -] - -links = [ - libnm_systemd_core, - libnm_systemd_shared, -] - exe = executable( - test_unit, - test_unit + '.c', + 'test-systemd', + 'test-systemd.c', dependencies: daemon_nm_default_dep, - c_args: c_flags, - link_with: links, + c_args: [ + '-DNETWORKMANAGER_COMPILATION_TEST', + '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD', + ], + link_with: [ + libnm_systemd_core, + libnm_systemd_shared, + ], ) test( - test_unit, + 'test-systemd', test_script, args: test_args + [exe.full_path()], ) From 05008faf6ef88a5ec75e220ff41216153bc02a2d Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 7 Jan 2021 11:27:05 +0100 Subject: [PATCH 06/23] build/meson: add libnm_systemd_core_dep dependency --- src/systemd/meson.build | 76 ++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/src/systemd/meson.build b/src/systemd/meson.build index 4dbbe13099..536dd9703f 100644 --- a/src/systemd/meson.build +++ b/src/systemd/meson.build @@ -1,33 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -sources = files( - 'src/libsystemd-network/arp-util.c', - 'src/libsystemd-network/dhcp-identifier.c', - 'src/libsystemd-network/dhcp-network.c', - 'src/libsystemd-network/dhcp-option.c', - 'src/libsystemd-network/dhcp-packet.c', - 'src/libsystemd-network/dhcp6-network.c', - 'src/libsystemd-network/dhcp6-option.c', - 'src/libsystemd-network/lldp-neighbor.c', - 'src/libsystemd-network/lldp-network.c', - 'src/libsystemd-network/network-internal.c', - 'src/libsystemd-network/sd-dhcp-client.c', - 'src/libsystemd-network/sd-dhcp-lease.c', - 'src/libsystemd-network/sd-dhcp6-client.c', - 'src/libsystemd-network/sd-dhcp6-lease.c', - 'src/libsystemd-network/sd-ipv4acd.c', - 'src/libsystemd-network/sd-ipv4ll.c', - 'src/libsystemd-network/sd-lldp.c', - 'src/libsystemd/sd-event/event-util.c', - 'src/libsystemd/sd-event/sd-event.c', - 'src/libsystemd/sd-id128/id128-util.c', - 'src/libsystemd/sd-id128/sd-id128.c', - 'nm-sd.c', - 'nm-sd-utils-core.c', - 'nm-sd-utils-dhcp.c', - 'sd-adapt-core/nm-sd-adapt-core.c', -) - incs = include_directories( 'sd-adapt-core', 'src/libsystemd-network', @@ -35,16 +7,50 @@ incs = include_directories( 'src/systemd', ) -deps = [ - daemon_nm_default_dep, - libnm_systemd_shared_dep, -] - libnm_systemd_core = static_library( 'nm-systemd-core', - sources: sources, + sources: files( + 'src/libsystemd-network/arp-util.c', + 'src/libsystemd-network/dhcp-identifier.c', + 'src/libsystemd-network/dhcp-network.c', + 'src/libsystemd-network/dhcp-option.c', + 'src/libsystemd-network/dhcp-packet.c', + 'src/libsystemd-network/dhcp6-network.c', + 'src/libsystemd-network/dhcp6-option.c', + 'src/libsystemd-network/lldp-neighbor.c', + 'src/libsystemd-network/lldp-network.c', + 'src/libsystemd-network/network-internal.c', + 'src/libsystemd-network/sd-dhcp-client.c', + 'src/libsystemd-network/sd-dhcp-lease.c', + 'src/libsystemd-network/sd-dhcp6-client.c', + 'src/libsystemd-network/sd-dhcp6-lease.c', + 'src/libsystemd-network/sd-ipv4acd.c', + 'src/libsystemd-network/sd-ipv4ll.c', + 'src/libsystemd-network/sd-lldp.c', + 'src/libsystemd/sd-event/event-util.c', + 'src/libsystemd/sd-event/sd-event.c', + 'src/libsystemd/sd-id128/id128-util.c', + 'src/libsystemd/sd-id128/sd-id128.c', + 'nm-sd.c', + 'nm-sd-utils-core.c', + 'nm-sd-utils-dhcp.c', + 'sd-adapt-core/nm-sd-adapt-core.c', + ), include_directories: incs, - dependencies: deps, + dependencies: [ + daemon_nm_default_dep, + libnm_systemd_shared_dep, + ], c_args: '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD', link_with: libc_siphash, ) + +libnm_systemd_core_dep = declare_dependency( + include_directories: incs, + dependencies: [ + glib_dep, + daemon_nm_default_dep, + libnm_systemd_shared_dep, + ], + link_with: libnm_systemd_core, +) From 186f2da2fc82cdac81a5fd01a21912301d6c036c Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 25 Dec 2020 16:35:47 +0100 Subject: [PATCH 07/23] shared,platform: add "shared/nm-platform" library NetworkManager core is huge. We should try to split out parts that are independent. Platform code is already mostly independent. But due to having it under "src/", there is no strict separation/layering which determines the parts that can work independently. So, while the code is mostly independent (in practice), that is not obvious from looking at the source tree. It thus still contributes to cognitive load. Add a shared library "shared/nm-platform", which should have no dependencies on libnm-core or NetworkManager core. In a first step, move the netlink code there. More should follow. --- .gitignore | 1 + Makefile.am | 59 +++++++++++- shared/meson.build | 23 +++++ .../nm-platform}/nm-netlink.c | 0 .../nm-platform}/nm-netlink.h | 0 shared/nm-platform/tests/meson.build | 19 ++++ shared/nm-platform/tests/test-nm-platform.c | 95 +++++++++++++++++++ src/meson.build | 6 +- src/platform/nm-linux-platform.c | 2 +- src/platform/wifi/nm-wifi-utils-nl80211.c | 2 +- src/platform/wifi/nm-wifi-utils-nl80211.h | 2 +- src/platform/wifi/nm-wifi-utils.h | 2 +- src/platform/wpan/nm-wpan-utils.c | 2 +- src/platform/wpan/nm-wpan-utils.h | 2 +- 14 files changed, 204 insertions(+), 11 deletions(-) rename {src/platform => shared/nm-platform}/nm-netlink.c (100%) rename {src/platform => shared/nm-platform}/nm-netlink.h (100%) create mode 100644 shared/nm-platform/tests/meson.build create mode 100644 shared/nm-platform/tests/test-nm-platform.c diff --git a/.gitignore b/.gitignore index b21bbf5c09..e9c4ba3590 100644 --- a/.gitignore +++ b/.gitignore @@ -135,6 +135,7 @@ test-*.trs /shared/nm-glib-aux/tests/test-json-aux /shared/nm-glib-aux/tests/test-shared-general +/shared/nm-platform/tests/test-nm-platform /shared/nm-version-macros.h /introspection/org.freedesktop.NetworkManager*.[ch] diff --git a/Makefile.am b/Makefile.am index 493081373c..269fec1e50 100644 --- a/Makefile.am +++ b/Makefile.am @@ -464,6 +464,59 @@ shared_nm_udev_aux_libnm_udev_aux_la_LIBADD = \ ############################################################################### +noinst_LTLIBRARIES += shared/nm-platform/libnm-platform.la + +shared_nm_platform_libnm_platform_la_CPPFLAGS = \ + $(shared_nm_glib_aux_cppflags) \ + $(NULL) + +shared_nm_platform_libnm_platform_la_SOURCES = \ + shared/nm-platform/nm-netlink.c \ + shared/nm-platform/nm-netlink.h \ + $(NULL) + +shared_nm_platform_libnm_platform_la_LDFLAGS = \ + $(CODE_COVERAGE_LDFLAGS) \ + $(SANITIZER_LIB_LDFLAGS) \ + $(NULL) + +shared_nm_platform_libnm_platform_la_LIBADD = \ + $(GLIB_LIBS) \ + $(NULL) + +############################################################################### + +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)' \ + $(CODE_COVERAGE_CFLAGS) \ + $(GLIB_CFLAGS) \ + $(SANITIZER_LIB_CFLAGS) \ + $(NULL) + +shared_nm_platform_tests_test_nm_platform_LDFLAGS = \ + $(CODE_COVERAGE_LDFLAGS) \ + $(SANITIZER_EXEC_LDFLAGS) \ + $(NULL) + +shared_nm_platform_tests_test_nm_platform_LDADD = \ + shared/nm-platform/libnm-platform.la \ + shared/nm-glib-aux/libnm-glib-aux.la \ + shared/nm-std-aux/libnm-std-aux.la \ + shared/libcsiphash.la \ + $(GLIB_LIBS) \ + $(NULL) + +EXTRA_DIST += \ + shared/nm-platform/tests/meson.build \ + $(NULL) + +############################################################################### + noinst_LTLIBRARIES += libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la libnm_core_nm_libnm_core_intern_libnm_libnm_core_intern_la_CPPFLAGS = \ @@ -2121,9 +2174,6 @@ src_libNetworkManagerBase_la_SOURCES = \ src/NetworkManagerUtils.c \ src/NetworkManagerUtils.h \ \ - src/platform/nm-netlink.c \ - src/platform/nm-netlink.h \ - \ src/platform/nmp-netns.c \ src/platform/nmp-netns.h \ src/platform/nmp-object.c \ @@ -2392,6 +2442,7 @@ src_libNetworkManager_la_LIBADD = \ 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 \ shared/nm-udev-aux/libnm-udev-aux.la \ shared/nm-glib-aux/libnm-glib-aux.la \ shared/nm-std-aux/libnm-std-aux.la \ @@ -2503,6 +2554,7 @@ src_nm_iface_helper_LDADD = \ 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 \ shared/nm-udev-aux/libnm-udev-aux.la \ shared/nm-glib-aux/libnm-glib-aux.la \ shared/nm-std-aux/libnm-std-aux.la \ @@ -2555,6 +2607,7 @@ src_initrd_nm_initrd_generator_LDADD = \ 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 \ shared/nm-udev-aux/libnm-udev-aux.la \ shared/nm-glib-aux/libnm-glib-aux.la \ shared/nm-std-aux/libnm-std-aux.la \ diff --git a/shared/meson.build b/shared/meson.build index 42fccae7da..eb96e4d305 100644 --- a/shared/meson.build +++ b/shared/meson.build @@ -182,6 +182,28 @@ libnm_udev_aux_dep = declare_dependency( link_with: libnm_udev_aux, ) +libnm_platform = static_library( + 'nm-platform', + sources: [ + 'nm-platform/nm-netlink.c', + ], + dependencies: [ + glib_nm_default_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="NetworkManager"', + '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)', + ], +) + +libnm_platform_dep = declare_dependency( + include_directories: shared_inc, + dependencies: [ + libnm_utils_base_dep, + ], + link_with: libnm_platform, +) + sources = files( 'systemd/nm-sd-utils-shared.c', 'systemd/src/basic/alloc-util.c', @@ -257,4 +279,5 @@ libnm_systemd_logging_stub = static_library( if enable_tests subdir('nm-glib-aux/tests') + subdir('nm-platform/tests') endif diff --git a/src/platform/nm-netlink.c b/shared/nm-platform/nm-netlink.c similarity index 100% rename from src/platform/nm-netlink.c rename to shared/nm-platform/nm-netlink.c diff --git a/src/platform/nm-netlink.h b/shared/nm-platform/nm-netlink.h similarity index 100% rename from src/platform/nm-netlink.h rename to shared/nm-platform/nm-netlink.h diff --git a/shared/nm-platform/tests/meson.build b/shared/nm-platform/tests/meson.build new file mode 100644 index 0000000000..4c9d91d118 --- /dev/null +++ b/shared/nm-platform/tests/meson.build @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +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)', + ], + dependencies: libnm_platform_dep, + link_with: libnm_systemd_logging_stub, +) + +test( + 'shared/nm-glib-aux/test-nm-platform', + test_script, + args: test_args + [exe.full_path()], + timeout: default_test_timeout, +) diff --git a/shared/nm-platform/tests/test-nm-platform.c b/shared/nm-platform/tests/test-nm-platform.c new file mode 100644 index 0000000000..179a3b6bb9 --- /dev/null +++ b/shared/nm-platform/tests/test-nm-platform.c @@ -0,0 +1,95 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#define NM_TEST_UTILS_NO_LIBNM 1 + +#include "nm-default.h" + +#include "nm-platform/nm-netlink.h" + +#include "nm-utils/nm-test-utils.h" + +/*****************************************************************************/ + +static void +test_use_symbols(void) +{ + static void (*const SYMBOLS[])(void) = { + (void (*)(void)) nl_nlmsghdr_to_str, + (void (*)(void)) nlmsg_hdr, + (void (*)(void)) nlmsg_reserve, + (void (*)(void)) nla_reserve, + (void (*)(void)) nlmsg_alloc_size, + (void (*)(void)) nlmsg_alloc, + (void (*)(void)) nlmsg_alloc_convert, + (void (*)(void)) nlmsg_alloc_simple, + (void (*)(void)) nlmsg_free, + (void (*)(void)) nlmsg_append, + (void (*)(void)) nlmsg_parse, + (void (*)(void)) nlmsg_put, + (void (*)(void)) nla_strlcpy, + (void (*)(void)) nla_memcpy, + (void (*)(void)) nla_put, + (void (*)(void)) nla_find, + (void (*)(void)) nla_nest_cancel, + (void (*)(void)) nla_nest_start, + (void (*)(void)) nla_nest_end, + (void (*)(void)) nla_parse, + (void (*)(void)) nlmsg_get_proto, + (void (*)(void)) nlmsg_set_proto, + (void (*)(void)) nlmsg_set_src, + (void (*)(void)) nlmsg_get_creds, + (void (*)(void)) nlmsg_set_creds, + (void (*)(void)) genlmsg_put, + (void (*)(void)) genlmsg_data, + (void (*)(void)) genlmsg_user_hdr, + (void (*)(void)) genlmsg_hdr, + (void (*)(void)) genlmsg_user_data, + (void (*)(void)) genlmsg_attrdata, + (void (*)(void)) genlmsg_len, + (void (*)(void)) genlmsg_attrlen, + (void (*)(void)) genlmsg_valid_hdr, + (void (*)(void)) genlmsg_parse, + (void (*)(void)) genl_ctrl_resolve, + (void (*)(void)) nl_socket_alloc, + (void (*)(void)) nl_socket_free, + (void (*)(void)) nl_socket_get_fd, + (void (*)(void)) nl_socket_get_local_port, + (void (*)(void)) nl_socket_get_msg_buf_size, + (void (*)(void)) nl_socket_set_passcred, + (void (*)(void)) nl_socket_set_msg_buf_size, + (void (*)(void)) nlmsg_get_dst, + (void (*)(void)) nl_socket_set_nonblocking, + (void (*)(void)) nl_socket_set_buffer_size, + (void (*)(void)) nl_socket_add_memberships, + (void (*)(void)) nl_socket_set_ext_ack, + (void (*)(void)) nl_socket_disable_msg_peek, + (void (*)(void)) nl_connect, + (void (*)(void)) nl_wait_for_ack, + (void (*)(void)) nl_recvmsgs, + (void (*)(void)) nl_sendmsg, + (void (*)(void)) nl_send_iovec, + (void (*)(void)) nl_complete_msg, + (void (*)(void)) nl_send, + (void (*)(void)) nl_send_auto, + (void (*)(void)) nl_recv, + NULL, + }; + + /* The only (not very exciting) purpose of this test is to see that + * we can use various symbols and don't get a linker error. */ + assert(G_N_ELEMENTS(SYMBOLS) == NM_PTRARRAY_LEN(SYMBOLS) + 1); +} + +/*****************************************************************************/ + +NMTST_DEFINE(); + +int +main(int argc, char **argv) +{ + nmtst_init(&argc, &argv, TRUE); + + g_test_add_func("/nm-platform/test_use_symbols", test_use_symbols); + + return g_test_run(); +} diff --git a/src/meson.build b/src/meson.build index 1d5f7b443c..f21ce17c44 100644 --- a/src/meson.build +++ b/src/meson.build @@ -5,7 +5,10 @@ src_inc = include_directories('.') daemon_nm_default_dep = declare_dependency( sources: libnm_core_enum_sources[1], include_directories: src_inc, - dependencies: libnm_core_nm_default_dep, + dependencies: [ + libnm_core_nm_default_dep, + libnm_platform_dep, + ], ) install_data( @@ -28,7 +31,6 @@ sources = files( 'dhcp/nm-dhcp-options.c', 'ndisc/nm-lndp-ndisc.c', 'ndisc/nm-ndisc.c', - 'platform/nm-netlink.c', 'platform/wifi/nm-wifi-utils-nl80211.c', 'platform/wifi/nm-wifi-utils.c', 'platform/wpan/nm-wpan-utils.c', diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c index 74b2d5a962..a04b0ccf37 100644 --- a/src/platform/nm-linux-platform.c +++ b/src/platform/nm-linux-platform.c @@ -40,7 +40,7 @@ #include "nm-glib-aux/nm-secret-utils.h" #include "nm-glib-aux/nm-c-list.h" -#include "nm-netlink.h" +#include "nm-platform/nm-netlink.h" #include "nm-core-utils.h" #include "nmp-object.h" #include "nmp-netns.h" diff --git a/src/platform/wifi/nm-wifi-utils-nl80211.c b/src/platform/wifi/nm-wifi-utils-nl80211.c index a1c8ba6c93..0bca7acc46 100644 --- a/src/platform/wifi/nm-wifi-utils-nl80211.c +++ b/src/platform/wifi/nm-wifi-utils-nl80211.c @@ -15,7 +15,7 @@ #include #include -#include "platform/nm-netlink.h" +#include "nm-platform/nm-netlink.h" #include "nm-wifi-utils-private.h" #include "platform/nm-platform.h" #include "platform/nm-platform-utils.h" diff --git a/src/platform/wifi/nm-wifi-utils-nl80211.h b/src/platform/wifi/nm-wifi-utils-nl80211.h index 1633a9ce4b..37c32ed78e 100644 --- a/src/platform/wifi/nm-wifi-utils-nl80211.h +++ b/src/platform/wifi/nm-wifi-utils-nl80211.h @@ -8,7 +8,7 @@ #define __WIFI_UTILS_NL80211_H__ #include "nm-wifi-utils.h" -#include "platform/nm-netlink.h" +#include "nm-platform/nm-netlink.h" #define NM_TYPE_WIFI_UTILS_NL80211 (nm_wifi_utils_nl80211_get_type()) #define NM_WIFI_UTILS_NL80211(obj) \ diff --git a/src/platform/wifi/nm-wifi-utils.h b/src/platform/wifi/nm-wifi-utils.h index 09e07a21c3..a252e43e54 100644 --- a/src/platform/wifi/nm-wifi-utils.h +++ b/src/platform/wifi/nm-wifi-utils.h @@ -11,7 +11,7 @@ #include "nm-dbus-interface.h" #include "nm-setting-wireless.h" -#include "platform/nm-netlink.h" +#include "nm-platform/nm-netlink.h" typedef struct NMWifiUtils NMWifiUtils; diff --git a/src/platform/wpan/nm-wpan-utils.c b/src/platform/wpan/nm-wpan-utils.c index 79c72b92da..d7c93b19b6 100644 --- a/src/platform/wpan/nm-wpan-utils.c +++ b/src/platform/wpan/nm-wpan-utils.c @@ -9,8 +9,8 @@ #include +#include "nm-platform/nm-netlink.h" #include "platform/linux/nl802154.h" -#include "platform/nm-netlink.h" #include "platform/nm-platform-utils.h" #define _NMLOG_PREFIX_NAME "wpan-nl802154" diff --git a/src/platform/wpan/nm-wpan-utils.h b/src/platform/wpan/nm-wpan-utils.h index 6d170dd9ea..940c2c9daa 100644 --- a/src/platform/wpan/nm-wpan-utils.h +++ b/src/platform/wpan/nm-wpan-utils.h @@ -9,7 +9,7 @@ #include #include "nm-dbus-interface.h" -#include "platform/nm-netlink.h" +#include "nm-platform/nm-netlink.h" typedef struct NMWpanUtils NMWpanUtils; From c6e132749506e77bf5afdfd9174b497b20e7595a Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 30 Dec 2020 15:54:57 +0100 Subject: [PATCH 08/23] core: move NM_MANAGER_ERROR to shared/nm-glib-aux "src/nm-logging.c" should be independent of libnm-core. It almost is, except the error domain and code. Move NM_MANAGER_ERROR to "nm-glib-aux/nm-shared-utils.h" so that "nm-logging.c" is independent of libnm-core. --- libnm-core/nm-errors.c | 1 - shared/nm-glib-aux/nm-shared-utils.c | 2 ++ shared/nm-glib-aux/nm-shared-utils.h | 6 ++++++ src/nm-logging.c | 9 ++++----- src/tests/test-core.c | 27 +++++++++++++++++++++++++++ 5 files changed, 39 insertions(+), 6 deletions(-) diff --git a/libnm-core/nm-errors.c b/libnm-core/nm-errors.c index 106d2051f0..95a12c0717 100644 --- a/libnm-core/nm-errors.c +++ b/libnm-core/nm-errors.c @@ -14,7 +14,6 @@ NM_CACHED_QUARK_FCN("nm-agent-manager-error-quark", nm_agent_manager_error_quark NM_CACHED_QUARK_FCN("nm-connection-error-quark", nm_connection_error_quark); NM_CACHED_QUARK_FCN("nm-crypto-error-quark", nm_crypto_error_quark); NM_CACHED_QUARK_FCN("nm-device-error-quark", nm_device_error_quark); -NM_CACHED_QUARK_FCN("nm-manager-error-quark", nm_manager_error_quark); NM_CACHED_QUARK_FCN("nm-secret-agent-error-quark", nm_secret_agent_error_quark); NM_CACHED_QUARK_FCN("nm-settings-error-quark", nm_settings_error_quark); NM_CACHED_QUARK_FCN("nm-vpn-plugin-error-quark", nm_vpn_plugin_error_quark); diff --git a/shared/nm-glib-aux/nm-shared-utils.c b/shared/nm-glib-aux/nm-shared-utils.c index 5f5f41ae2e..f42b53c394 100644 --- a/shared/nm-glib-aux/nm-shared-utils.c +++ b/shared/nm-glib-aux/nm-shared-utils.c @@ -2267,6 +2267,8 @@ _nm_utils_ascii_str_to_bool(const char *str, int default_value) /*****************************************************************************/ +NM_CACHED_QUARK_FCN("nm-manager-error-quark", nm_manager_error_quark); + NM_CACHED_QUARK_FCN("nm-utils-error-quark", nm_utils_error_quark); void diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h index a78682f6a1..669c9fbcb4 100644 --- a/shared/nm-glib-aux/nm-shared-utils.h +++ b/shared/nm-glib-aux/nm-shared-utils.h @@ -982,6 +982,12 @@ typedef enum { #define NM_UTILS_ERROR (nm_utils_error_quark()) GQuark nm_utils_error_quark(void); +GQuark nm_manager_error_quark(void); +#define _NM_MANAGER_ERROR (nm_manager_error_quark()) + +#define _NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL 10 +#define _NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN 11 + void nm_utils_error_set_cancelled(GError **error, gboolean is_disposing, const char *instance_name); static inline GError * diff --git a/src/nm-logging.c b/src/nm-logging.c index a646bb574f..495d5aca3c 100644 --- a/src/nm-logging.c +++ b/src/nm-logging.c @@ -24,7 +24,6 @@ #include "nm-glib-aux/nm-logging-base.h" #include "nm-glib-aux/nm-time-utils.h" -#include "nm-errors.h" /*****************************************************************************/ @@ -247,8 +246,8 @@ match_log_level(const char *level, NMLogLevel *out_level, GError **error) return TRUE; g_set_error(error, - NM_MANAGER_ERROR, - NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL, + _NM_MANAGER_ERROR, + _NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL, _("Unknown log level '%s'"), level); return FALSE; @@ -355,8 +354,8 @@ nm_logging_setup(const char *level, const char *domains, char **bad_domains, GEr if (!bits) { if (!bad_domains) { g_set_error(error, - NM_MANAGER_ERROR, - NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN, + _NM_MANAGER_ERROR, + _NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN, _("Unknown log domain '%s'"), s); return FALSE; diff --git a/src/tests/test-core.c b/src/tests/test-core.c index 002723464e..87136dc3f1 100644 --- a/src/tests/test-core.c +++ b/src/tests/test-core.c @@ -104,6 +104,32 @@ test_logging_domains(void) /*****************************************************************************/ +static void +test_logging_error(void) +{ + gs_free_error GError *error = NULL; + gboolean success; + + g_assert_cmpint(NM_MANAGER_ERROR, ==, _NM_MANAGER_ERROR); + G_STATIC_ASSERT_EXPR(NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL == _NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL); + G_STATIC_ASSERT_EXPR(NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN + == _NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN); + + success = nm_logging_setup("bogus", "ALL", NULL, &error); + nmtst_assert_no_success(success, error); + g_assert_cmpint(error->domain, ==, NM_MANAGER_ERROR); + g_assert_cmpint(error->code, ==, NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL); + nm_clear_pointer(&error, g_error_free); + + success = nm_logging_setup("debug", "bogus", NULL, &error); + nmtst_assert_no_success(success, error); + g_assert_cmpint(error->domain, ==, NM_MANAGER_ERROR); + g_assert_cmpint(error->code, ==, NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN); + nm_clear_pointer(&error, g_error_free); +} + +/*****************************************************************************/ + static void _test_same_prefix(const char *a1, const char *a2, guint8 plen) { @@ -2544,6 +2570,7 @@ main(int argc, char **argv) nmtst_init_with_logging(&argc, &argv, NULL, "ALL"); g_test_add_func("/general/test_logging_domains", test_logging_domains); + g_test_add_func("/general/test_logging_error", test_logging_error); g_test_add_func("/general/nm_utils_strbuf_append", test_nm_utils_strbuf_append); From 24c634bf573880786e709c7ddfab01ebaec7eaa7 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 30 Dec 2020 17:32:10 +0100 Subject: [PATCH 09/23] core/logging: move "nm-logging.c" to shared/nm-log-core/libnm-log-core library We want to move platform code to "shared/nm-platform". However, platform code uses the logging infrastructure from the daemon, there is thus an odd circular dependency. Solve that by moving the "src/nm-logging.[hc]" to a new helper library in "shared/nm-log-core". --- Makefile.am | 39 ++++++++++++++++++++++-- po/POTFILES.in | 2 +- shared/meson.build | 21 +++++++++++++ shared/nm-default.h | 2 +- {src => shared/nm-log-core}/nm-logging.c | 0 {src => shared/nm-log-core}/nm-logging.h | 0 shared/nm-platform/tests/meson.build | 5 ++- src/devices/wifi/nm-iwd-manager.c | 1 - src/meson.build | 2 +- src/systemd/meson.build | 10 ++++-- src/tests/meson.build | 13 +++++--- 11 files changed, 79 insertions(+), 16 deletions(-) rename {src => shared/nm-log-core}/nm-logging.c (100%) rename {src => shared/nm-log-core}/nm-logging.h (100%) diff --git a/Makefile.am b/Makefile.am index 269fec1e50..6a53f3be6a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -464,6 +464,36 @@ shared_nm_udev_aux_libnm_udev_aux_la_LIBADD = \ ############################################################################### +noinst_LTLIBRARIES += shared/nm-log-core/libnm-log-core.la + +shared_nm_log_core_libnm_log_core_la_CPPFLAGS = \ + $(dflt_cppflags) \ + -I$(srcdir)/shared \ + $(CODE_COVERAGE_CFLAGS) \ + $(SANITIZER_LIB_CFLAGS) \ + $(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 = \ + shared/nm-log-core/nm-logging.c \ + shared/nm-log-core/nm-logging.h \ + $(NULL) + +shared_nm_log_core_libnm_log_core_la_LDFLAGS = \ + $(CODE_COVERAGE_LDFLAGS) \ + $(SANITIZER_LIB_LDFLAGS) \ + $(NULL) + +shared_nm_log_core_libnm_log_core_la_LIBADD = \ + $(GLIB_LIBS) \ + $(SYSTEMD_JOURNAL_LIBS) \ + $(NULL) + +############################################################################### + noinst_LTLIBRARIES += shared/nm-platform/libnm-platform.la shared_nm_platform_libnm_platform_la_CPPFLAGS = \ @@ -494,6 +524,7 @@ shared_nm_platform_tests_test_nm_platform_CPPFLAGS = \ -DNETWORKMANAGER_COMPILATION_TEST \ -DNETWORKMANAGER_COMPILATION='(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)' \ $(CODE_COVERAGE_CFLAGS) \ + $(SYSTEMD_JOURNAL_CFLAGS) \ $(GLIB_CFLAGS) \ $(SANITIZER_LIB_CFLAGS) \ $(NULL) @@ -505,9 +536,11 @@ shared_nm_platform_tests_test_nm_platform_LDFLAGS = \ shared_nm_platform_tests_test_nm_platform_LDADD = \ shared/nm-platform/libnm-platform.la \ + shared/nm-log-core/libnm-log-core.la \ shared/nm-glib-aux/libnm-glib-aux.la \ shared/nm-std-aux/libnm-std-aux.la \ shared/libcsiphash.la \ + $(SYSTEMD_JOURNAL_LIBS) \ $(GLIB_LIBS) \ $(NULL) @@ -2168,8 +2201,6 @@ src_libNetworkManagerBase_la_SOURCES = \ \ src/nm-core-utils.c \ src/nm-core-utils.h \ - src/nm-logging.c \ - src/nm-logging.h \ \ src/NetworkManagerUtils.c \ src/NetworkManagerUtils.h \ @@ -2245,7 +2276,6 @@ endif src_libNetworkManagerBase_la_LIBADD = \ $(GLIB_LIBS) \ - $(SYSTEMD_JOURNAL_LIBS) \ $(LIBUDEV_LIBS) \ $(NULL) @@ -2443,6 +2473,7 @@ src_libNetworkManager_la_LIBADD = \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-platform/libnm-platform.la \ + shared/nm-log-core/libnm-log-core.la \ shared/nm-udev-aux/libnm-udev-aux.la \ shared/nm-glib-aux/libnm-glib-aux.la \ shared/nm-std-aux/libnm-std-aux.la \ @@ -2555,6 +2586,7 @@ src_nm_iface_helper_LDADD = \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-platform/libnm-platform.la \ + shared/nm-log-core/libnm-log-core.la \ shared/nm-udev-aux/libnm-udev-aux.la \ shared/nm-glib-aux/libnm-glib-aux.la \ shared/nm-std-aux/libnm-std-aux.la \ @@ -2608,6 +2640,7 @@ src_initrd_nm_initrd_generator_LDADD = \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-platform/libnm-platform.la \ + shared/nm-log-core/libnm-log-core.la \ shared/nm-udev-aux/libnm-udev-aux.la \ shared/nm-glib-aux/libnm-glib-aux.la \ shared/nm-std-aux/libnm-std-aux.la \ diff --git a/po/POTFILES.in b/po/POTFILES.in index cee590c0cf..b3d33487bd 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -147,6 +147,7 @@ libnm/nm-vpn-plugin-old.c libnm/nm-vpn-service-plugin.c data/org.freedesktop.NetworkManager.policy.in.in shared/nm-glib-aux/nm-shared-utils.c +shared/nm-log-core/nm-logging.c src/NetworkManagerUtils.c src/main.c src/main-utils.c @@ -179,7 +180,6 @@ src/devices/wifi/nm-wifi-utils.c src/devices/wwan/nm-modem-broadband.c src/nm-config.c src/nm-iface-helper.c -src/nm-logging.c src/nm-manager.c src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c diff --git a/shared/meson.build b/shared/meson.build index eb96e4d305..fda44444e7 100644 --- a/shared/meson.build +++ b/shared/meson.build @@ -182,6 +182,27 @@ libnm_udev_aux_dep = declare_dependency( link_with: libnm_udev_aux, ) +libnm_log_core = static_library( + 'nm-log-core', + sources: 'nm-log-core/nm-logging.c', + dependencies: [ + glib_nm_default_dep, + libsystemd_dep, + ], + c_args: [ + '-DG_LOG_DOMAIN="NetworkManager"', + '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB)', + ], +) + +libnm_log_core_dep = declare_dependency( + include_directories: shared_inc, + dependencies: [ + libnm_utils_base_dep, + ], + link_with: libnm_log_core, +) + libnm_platform = static_library( 'nm-platform', sources: [ diff --git a/shared/nm-default.h b/shared/nm-default.h index 91ab085be8..f2cb024441 100644 --- a/shared/nm-default.h +++ b/shared/nm-default.h @@ -281,7 +281,7 @@ _nm_g_return_if_fail_warning(const char *log_domain, const char *file, int line) #if (NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_DAEMON #include "nm-core-types.h" #include "nm-types.h" - #include "nm-logging.h" + #include "nm-log-core/nm-logging.h" #endif #if (NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE diff --git a/src/nm-logging.c b/shared/nm-log-core/nm-logging.c similarity index 100% rename from src/nm-logging.c rename to shared/nm-log-core/nm-logging.c diff --git a/src/nm-logging.h b/shared/nm-log-core/nm-logging.h similarity index 100% rename from src/nm-logging.h rename to shared/nm-log-core/nm-logging.h diff --git a/shared/nm-platform/tests/meson.build b/shared/nm-platform/tests/meson.build index 4c9d91d118..47175331fe 100644 --- a/shared/nm-platform/tests/meson.build +++ b/shared/nm-platform/tests/meson.build @@ -7,7 +7,10 @@ exe = executable( '-DNETWORKMANAGER_COMPILATION_TEST', '-DNETWORKMANAGER_COMPILATION=(NM_NETWORKMANAGER_COMPILATION_GLIB|NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG)', ], - dependencies: libnm_platform_dep, + dependencies: [ + libnm_log_core_dep, + libnm_platform_dep, + ], link_with: libnm_systemd_logging_stub, ) diff --git a/src/devices/wifi/nm-iwd-manager.c b/src/devices/wifi/nm-iwd-manager.c index 0725e5ba68..5ded8e15a6 100644 --- a/src/devices/wifi/nm-iwd-manager.c +++ b/src/devices/wifi/nm-iwd-manager.c @@ -9,7 +9,6 @@ #include -#include "nm-logging.h" #include "nm-core-internal.h" #include "nm-manager.h" #include "nm-device-iwd.h" diff --git a/src/meson.build b/src/meson.build index f21ce17c44..07014bbb71 100644 --- a/src/meson.build +++ b/src/meson.build @@ -7,6 +7,7 @@ daemon_nm_default_dep = declare_dependency( include_directories: src_inc, dependencies: [ libnm_core_nm_default_dep, + libnm_log_core_dep, libnm_platform_dep, ], ) @@ -52,7 +53,6 @@ sources = files( 'nm-ip-config.c', 'nm-ip4-config.c', 'nm-ip6-config.c', - 'nm-logging.c', ) deps = [ diff --git a/src/systemd/meson.build b/src/systemd/meson.build index 536dd9703f..4f3a63eda4 100644 --- a/src/systemd/meson.build +++ b/src/systemd/meson.build @@ -36,9 +36,13 @@ libnm_systemd_core = static_library( 'nm-sd-utils-dhcp.c', 'sd-adapt-core/nm-sd-adapt-core.c', ), - include_directories: incs, + include_directories: [ + incs, + src_inc, + ], dependencies: [ - daemon_nm_default_dep, + glib_nm_default_dep, + libnm_core_dep, libnm_systemd_shared_dep, ], c_args: '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD', @@ -49,7 +53,7 @@ libnm_systemd_core_dep = declare_dependency( include_directories: incs, dependencies: [ glib_dep, - daemon_nm_default_dep, + libnm_core_dep, libnm_systemd_shared_dep, ], link_with: libnm_systemd_core, diff --git a/src/tests/meson.build b/src/tests/meson.build index 6366225bce..1d3f596382 100644 --- a/src/tests/meson.build +++ b/src/tests/meson.build @@ -32,15 +32,18 @@ endforeach exe = executable( 'test-systemd', 'test-systemd.c', - dependencies: daemon_nm_default_dep, + include_directories: [ + top_inc, + src_inc, + ], + dependencies: [ + libnm_systemd_core_dep, + libnm_systemd_shared_dep, + ], c_args: [ '-DNETWORKMANAGER_COMPILATION_TEST', '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_SYSTEMD', ], - link_with: [ - libnm_systemd_core, - libnm_systemd_shared, - ], ) test( From 31dca65e04321c120c4166bf5036bb08aa809028 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 25 Dec 2020 17:54:46 +0100 Subject: [PATCH 10/23] shared,platform: move "nmp-netns.[hc]" to shared/nm-platform --- Makefile.am | 5 ++-- shared/meson.build | 1 + shared/nm-platform/nmp-base.h | 8 +++++++ .../nm-platform}/nmp-netns.c | 2 ++ .../nm-platform}/nmp-netns.h | 3 +++ shared/nm-platform/tests/meson.build | 1 - shared/nm-platform/tests/test-nm-platform.c | 23 +++++++++++++++++++ src/meson.build | 1 - src/ndisc/nm-lndp-ndisc.c | 2 +- src/ndisc/nm-ndisc.c | 2 +- src/nm-netns.c | 2 +- src/nm-netns.h | 2 ++ src/nm-types.h | 1 - src/platform/nm-linux-platform.c | 2 +- src/platform/nm-platform.c | 2 +- src/platform/nm-platform.h | 2 ++ src/platform/tests/test-link.c | 2 +- src/platform/tests/test-tc.c | 2 +- 18 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 shared/nm-platform/nmp-base.h rename {src/platform => shared/nm-platform}/nmp-netns.c (99%) rename {src/platform => shared/nm-platform}/nmp-netns.h (96%) diff --git a/Makefile.am b/Makefile.am index 6a53f3be6a..5b8f8bab39 100644 --- a/Makefile.am +++ b/Makefile.am @@ -503,6 +503,9 @@ shared_nm_platform_libnm_platform_la_CPPFLAGS = \ shared_nm_platform_libnm_platform_la_SOURCES = \ shared/nm-platform/nm-netlink.c \ shared/nm-platform/nm-netlink.h \ + shared/nm-platform/nmp-base.h \ + shared/nm-platform/nmp-netns.c \ + shared/nm-platform/nmp-netns.h \ $(NULL) shared_nm_platform_libnm_platform_la_LDFLAGS = \ @@ -2205,8 +2208,6 @@ src_libNetworkManagerBase_la_SOURCES = \ src/NetworkManagerUtils.c \ src/NetworkManagerUtils.h \ \ - src/platform/nmp-netns.c \ - src/platform/nmp-netns.h \ src/platform/nmp-object.c \ src/platform/nmp-object.h \ src/platform/nm-platform-utils.c \ diff --git a/shared/meson.build b/shared/meson.build index fda44444e7..b19535f078 100644 --- a/shared/meson.build +++ b/shared/meson.build @@ -207,6 +207,7 @@ libnm_platform = static_library( 'nm-platform', sources: [ 'nm-platform/nm-netlink.c', + 'nm-platform/nmp-netns.c', ], dependencies: [ glib_nm_default_dep, diff --git a/shared/nm-platform/nmp-base.h b/shared/nm-platform/nmp-base.h new file mode 100644 index 0000000000..f4e50dd0b5 --- /dev/null +++ b/shared/nm-platform/nmp-base.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifndef __NMP_FWD_H__ +#define __NMP_FWD_H__ + +typedef struct _NMPNetns NMPNetns; + +#endif /* __NMP_FWD_H__ */ diff --git a/src/platform/nmp-netns.c b/shared/nm-platform/nmp-netns.c similarity index 99% rename from src/platform/nmp-netns.c rename to shared/nm-platform/nmp-netns.c index 69bb39cd82..01aefde66a 100644 --- a/src/platform/nmp-netns.c +++ b/shared/nm-platform/nmp-netns.c @@ -13,6 +13,8 @@ #include #include +#include "nm-log-core/nm-logging.h" + /*****************************************************************************/ /* NOTE: NMPNetns and all code used here must be thread-safe! */ diff --git a/src/platform/nmp-netns.h b/shared/nm-platform/nmp-netns.h similarity index 96% rename from src/platform/nmp-netns.h rename to shared/nm-platform/nmp-netns.h index 2ba29e169e..b18bd03e76 100644 --- a/src/platform/nmp-netns.h +++ b/shared/nm-platform/nmp-netns.h @@ -6,6 +6,8 @@ #ifndef __NMP_NETNS_UTILS_H__ #define __NMP_NETNS_UTILS_H__ +#include "nmp-base.h" + /*****************************************************************************/ #define NMP_TYPE_NETNS (nmp_netns_get_type()) @@ -18,6 +20,7 @@ #define NMP_NETNS_FD_NET "fd-net" #define NMP_NETNS_FD_MNT "fd-mnt" +typedef struct _NMPNetns NMPNetns; typedef struct _NMPNetnsClass NMPNetnsClass; GType nmp_netns_get_type(void); diff --git a/shared/nm-platform/tests/meson.build b/shared/nm-platform/tests/meson.build index 47175331fe..8d2b9c0f6e 100644 --- a/shared/nm-platform/tests/meson.build +++ b/shared/nm-platform/tests/meson.build @@ -11,7 +11,6 @@ exe = executable( libnm_log_core_dep, libnm_platform_dep, ], - link_with: libnm_systemd_logging_stub, ) test( diff --git a/shared/nm-platform/tests/test-nm-platform.c b/shared/nm-platform/tests/test-nm-platform.c index 179a3b6bb9..0386a3a546 100644 --- a/shared/nm-platform/tests/test-nm-platform.c +++ b/shared/nm-platform/tests/test-nm-platform.c @@ -4,12 +4,22 @@ #include "nm-default.h" +#include "nm-log-core/nm-logging.h" #include "nm-platform/nm-netlink.h" +#include "nm-platform/nmp-netns.h" #include "nm-utils/nm-test-utils.h" /*****************************************************************************/ +void +_nm_logging_clear_platform_logging_cache(void) +{ + /* this symbols is required by nm-log-core library. */ +} + +/*****************************************************************************/ + static void test_use_symbols(void) { @@ -72,6 +82,19 @@ test_use_symbols(void) (void (*)(void)) nl_send, (void (*)(void)) nl_send_auto, (void (*)(void)) nl_recv, + + (void (*)(void)) nmp_netns_bind_to_path, + (void (*)(void)) nmp_netns_bind_to_path_destroy, + (void (*)(void)) nmp_netns_get_current, + (void (*)(void)) nmp_netns_get_fd_mnt, + (void (*)(void)) nmp_netns_get_fd_net, + (void (*)(void)) nmp_netns_get_initial, + (void (*)(void)) nmp_netns_is_initial, + (void (*)(void)) nmp_netns_new, + (void (*)(void)) nmp_netns_pop, + (void (*)(void)) nmp_netns_push, + (void (*)(void)) nmp_netns_push_type, + NULL, }; diff --git a/src/meson.build b/src/meson.build index 07014bbb71..8cb5089cad 100644 --- a/src/meson.build +++ b/src/meson.build @@ -38,7 +38,6 @@ sources = files( 'platform/nm-linux-platform.c', 'platform/nm-platform.c', 'platform/nm-platform-utils.c', - 'platform/nmp-netns.c', 'platform/nmp-object.c', 'platform/nmp-rules-manager.c', 'main-utils.c', diff --git a/src/ndisc/nm-lndp-ndisc.c b/src/ndisc/nm-lndp-ndisc.c index 2117190584..1d8becbfec 100644 --- a/src/ndisc/nm-lndp-ndisc.c +++ b/src/ndisc/nm-lndp-ndisc.c @@ -18,7 +18,7 @@ #include "nm-ndisc-private.h" #include "NetworkManagerUtils.h" #include "platform/nm-platform.h" -#include "platform/nmp-netns.h" +#include "nm-platform/nmp-netns.h" #define _NMLOG_PREFIX_NAME "ndisc-lndp" diff --git a/src/ndisc/nm-ndisc.c b/src/ndisc/nm-ndisc.c index c9e221136f..44035ff909 100644 --- a/src/ndisc/nm-ndisc.c +++ b/src/ndisc/nm-ndisc.c @@ -15,7 +15,7 @@ #include "nm-ndisc-private.h" #include "nm-utils.h" #include "platform/nm-platform.h" -#include "platform/nmp-netns.h" +#include "nm-platform/nmp-netns.h" #include "nm-l3-config-data.h" #define _NMLOG_PREFIX_NAME "ndisc" diff --git a/src/nm-netns.c b/src/nm-netns.c index bc4e9f619d..9f62643686 100644 --- a/src/nm-netns.c +++ b/src/nm-netns.c @@ -14,7 +14,7 @@ #include "nm-core-internal.h" #include "nm-l3cfg.h" #include "platform/nm-platform.h" -#include "platform/nmp-netns.h" +#include "nm-platform/nmp-netns.h" #include "platform/nmp-rules-manager.h" /*****************************************************************************/ diff --git a/src/nm-netns.h b/src/nm-netns.h index 36a34e29d4..aab3b52019 100644 --- a/src/nm-netns.h +++ b/src/nm-netns.h @@ -6,6 +6,8 @@ #ifndef __NM_NETNS_H__ #define __NM_NETNS_H__ +#include "nm-platform/nmp-base.h" + #define NM_TYPE_NETNS (nm_netns_get_type()) #define NM_NETNS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_NETNS, NMNetns)) #define NM_NETNS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_NETNS, NMNetnsClass)) diff --git a/src/nm-types.h b/src/nm-types.h index 533099b577..b10559543a 100644 --- a/src/nm-types.h +++ b/src/nm-types.h @@ -121,7 +121,6 @@ typedef struct _NMPlatformIP4Route NMPlatformIP4Route; typedef struct _NMPlatformIP6Address NMPlatformIP6Address; typedef struct _NMPlatformIP6Route NMPlatformIP6Route; typedef struct _NMPlatformLink NMPlatformLink; -typedef struct _NMPNetns NMPNetns; typedef struct _NMPObject NMPObject; typedef enum { diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c index a04b0ccf37..6c04f6c121 100644 --- a/src/platform/nm-linux-platform.c +++ b/src/platform/nm-linux-platform.c @@ -43,7 +43,7 @@ #include "nm-platform/nm-netlink.h" #include "nm-core-utils.h" #include "nmp-object.h" -#include "nmp-netns.h" +#include "nm-platform/nmp-netns.h" #include "nm-platform-utils.h" #include "nm-platform-private.h" #include "wifi/nm-wifi-utils.h" diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index 1feb1cd42d..eb2930b315 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -32,7 +32,7 @@ #include "nm-platform-utils.h" #include "nm-platform-private.h" #include "nmp-object.h" -#include "nmp-netns.h" +#include "nm-platform/nmp-netns.h" /*****************************************************************************/ diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h index c61ee16401..1a1a71213e 100644 --- a/src/platform/nm-platform.h +++ b/src/platform/nm-platform.h @@ -9,6 +9,8 @@ #include "nm-dbus-interface.h" #include "nm-core-types-internal.h" +#include "nm-platform/nmp-base.h" + #include "nm-core-utils.h" #include "nm-setting-vlan.h" #include "nm-setting-wired.h" diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c index 66cb20ea64..7deca0e074 100644 --- a/src/platform/tests/test-link.c +++ b/src/platform/tests/test-link.c @@ -13,7 +13,7 @@ #include "nm-glib-aux/nm-io-utils.h" #include "platform/nmp-object.h" -#include "platform/nmp-netns.h" +#include "nm-platform/nmp-netns.h" #include "platform/nm-platform-utils.h" #include "test-common.h" diff --git a/src/platform/tests/test-tc.c b/src/platform/tests/test-tc.c index 1920dfa4af..d178398eb8 100644 --- a/src/platform/tests/test-tc.c +++ b/src/platform/tests/test-tc.c @@ -6,7 +6,7 @@ #include "nm-test-utils-core.h" #include "platform/nmp-object.h" -#include "platform/nmp-netns.h" +#include "nm-platform/nmp-netns.h" #include "platform/nm-platform-utils.h" #include "test-common.h" From e5d2a05ad5a8b30474e18dc53ac338019be43a39 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 30 Dec 2020 21:20:26 +0100 Subject: [PATCH 11/23] libnm: add "shared/nm-base/nm-base.h" Our dependencies are complicated. Currently "src/platform" uses parts of libnm-core and is relatively strongly entangled with core. It would be nice to have that part clearly independent from "src" and from "libnm-core". Also, "src/platform/nm-platform-utils.h" uses NMEthtoolID enum, which previously was defined in "libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h". Move that to a new place "shared/nm-base/nm-base.h". Note that we have "libnm-core/nm-libnm-core-intern", which is libnm/core related code which uses and is used by libnm-core. There is a need for a library which is used by libnm-core, but does not depend on libnm-core itself. Here comes "shared/nm-base". Yes, many libraries. But the goal is to entangle the dependencies and have a clear hierarchy of includes. And to have "shared/nm-platform" independent of libnm-core. --- Makefile.am | 4 + .../nm-libnm-core-intern/nm-ethtool-utils.h | 131 +--------------- shared/nm-base/nm-base.h | 144 ++++++++++++++++++ src/platform/nm-platform-utils.h | 2 +- src/platform/tests/test-link.c | 1 + 5 files changed, 152 insertions(+), 130 deletions(-) create mode 100644 shared/nm-base/nm-base.h diff --git a/Makefile.am b/Makefile.am index 5b8f8bab39..f7024a0ee6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -553,6 +553,10 @@ EXTRA_DIST += \ ############################################################################### +EXTRA_DIST += shared/nm-base/nm-base.h + +############################################################################### + noinst_LTLIBRARIES += libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la libnm_core_nm_libnm_core_intern_libnm_libnm_core_intern_la_CPPFLAGS = \ diff --git a/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h b/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h index 7afffe1b31..af99cd14aa 100644 --- a/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h +++ b/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h @@ -6,119 +6,10 @@ #ifndef __NM_ETHTOOL_UTILS_H__ #define __NM_ETHTOOL_UTILS_H__ +#include "nm-base/nm-base.h" + /*****************************************************************************/ -typedef enum { - NM_ETHTOOL_ID_UNKNOWN = -1, - - _NM_ETHTOOL_ID_FIRST = 0, - - _NM_ETHTOOL_ID_COALESCE_FIRST = _NM_ETHTOOL_ID_FIRST, - NM_ETHTOOL_ID_COALESCE_ADAPTIVE_RX = _NM_ETHTOOL_ID_COALESCE_FIRST, - NM_ETHTOOL_ID_COALESCE_ADAPTIVE_TX, - NM_ETHTOOL_ID_COALESCE_PKT_RATE_HIGH, - NM_ETHTOOL_ID_COALESCE_PKT_RATE_LOW, - NM_ETHTOOL_ID_COALESCE_RX_FRAMES, - NM_ETHTOOL_ID_COALESCE_RX_FRAMES_HIGH, - NM_ETHTOOL_ID_COALESCE_RX_FRAMES_IRQ, - NM_ETHTOOL_ID_COALESCE_RX_FRAMES_LOW, - NM_ETHTOOL_ID_COALESCE_RX_USECS, - NM_ETHTOOL_ID_COALESCE_RX_USECS_HIGH, - NM_ETHTOOL_ID_COALESCE_RX_USECS_IRQ, - NM_ETHTOOL_ID_COALESCE_RX_USECS_LOW, - NM_ETHTOOL_ID_COALESCE_SAMPLE_INTERVAL, - NM_ETHTOOL_ID_COALESCE_STATS_BLOCK_USECS, - NM_ETHTOOL_ID_COALESCE_TX_FRAMES, - NM_ETHTOOL_ID_COALESCE_TX_FRAMES_HIGH, - NM_ETHTOOL_ID_COALESCE_TX_FRAMES_IRQ, - NM_ETHTOOL_ID_COALESCE_TX_FRAMES_LOW, - NM_ETHTOOL_ID_COALESCE_TX_USECS, - NM_ETHTOOL_ID_COALESCE_TX_USECS_HIGH, - NM_ETHTOOL_ID_COALESCE_TX_USECS_IRQ, - NM_ETHTOOL_ID_COALESCE_TX_USECS_LOW, - _NM_ETHTOOL_ID_COALESCE_LAST = NM_ETHTOOL_ID_COALESCE_TX_USECS_LOW, - - _NM_ETHTOOL_ID_FEATURE_FIRST = _NM_ETHTOOL_ID_COALESCE_LAST + 1, - NM_ETHTOOL_ID_FEATURE_ESP_HW_OFFLOAD = _NM_ETHTOOL_ID_FEATURE_FIRST, - NM_ETHTOOL_ID_FEATURE_ESP_TX_CSUM_HW_OFFLOAD, - NM_ETHTOOL_ID_FEATURE_FCOE_MTU, - NM_ETHTOOL_ID_FEATURE_GRO, - NM_ETHTOOL_ID_FEATURE_GSO, - NM_ETHTOOL_ID_FEATURE_HIGHDMA, - NM_ETHTOOL_ID_FEATURE_HW_TC_OFFLOAD, - NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD, - NM_ETHTOOL_ID_FEATURE_LOOPBACK, - NM_ETHTOOL_ID_FEATURE_LRO, - NM_ETHTOOL_ID_FEATURE_NTUPLE, - NM_ETHTOOL_ID_FEATURE_RX, - NM_ETHTOOL_ID_FEATURE_RXHASH, - NM_ETHTOOL_ID_FEATURE_RXVLAN, - NM_ETHTOOL_ID_FEATURE_RX_ALL, - NM_ETHTOOL_ID_FEATURE_RX_FCS, - NM_ETHTOOL_ID_FEATURE_RX_GRO_HW, - 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_TX_OFFLOAD, - NM_ETHTOOL_ID_FEATURE_TSO, - NM_ETHTOOL_ID_FEATURE_TX, - NM_ETHTOOL_ID_FEATURE_TXVLAN, - NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_FCOE_CRC, - NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IPV4, - NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IPV6, - NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IP_GENERIC, - NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_SCTP, - NM_ETHTOOL_ID_FEATURE_TX_ESP_SEGMENTATION, - 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_PARTIAL, - NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST, - NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION, - NM_ETHTOOL_ID_FEATURE_TX_IPXIP6_SEGMENTATION, - NM_ETHTOOL_ID_FEATURE_TX_NOCACHE_COPY, - NM_ETHTOOL_ID_FEATURE_TX_SCATTER_GATHER, - NM_ETHTOOL_ID_FEATURE_TX_SCATTER_GATHER_FRAGLIST, - NM_ETHTOOL_ID_FEATURE_TX_SCTP_SEGMENTATION, - NM_ETHTOOL_ID_FEATURE_TX_TCP6_SEGMENTATION, - 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_UDP_SEGMENTATION, - NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION, - NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION, - NM_ETHTOOL_ID_FEATURE_TX_VLAN_STAG_HW_INSERT, - _NM_ETHTOOL_ID_FEATURE_LAST = NM_ETHTOOL_ID_FEATURE_TX_VLAN_STAG_HW_INSERT, - - _NM_ETHTOOL_ID_RING_FIRST = _NM_ETHTOOL_ID_FEATURE_LAST + 1, - NM_ETHTOOL_ID_RING_RX = _NM_ETHTOOL_ID_RING_FIRST, - NM_ETHTOOL_ID_RING_RX_JUMBO, - NM_ETHTOOL_ID_RING_RX_MINI, - NM_ETHTOOL_ID_RING_TX, - _NM_ETHTOOL_ID_RING_LAST = NM_ETHTOOL_ID_RING_TX, - - _NM_ETHTOOL_ID_LAST = _NM_ETHTOOL_ID_RING_LAST, - - _NM_ETHTOOL_ID_COALESCE_NUM = - (_NM_ETHTOOL_ID_COALESCE_LAST - _NM_ETHTOOL_ID_COALESCE_FIRST + 1), - _NM_ETHTOOL_ID_FEATURE_NUM = (_NM_ETHTOOL_ID_FEATURE_LAST - _NM_ETHTOOL_ID_FEATURE_FIRST + 1), - _NM_ETHTOOL_ID_RING_NUM = (_NM_ETHTOOL_ID_RING_LAST - _NM_ETHTOOL_ID_RING_FIRST + 1), - _NM_ETHTOOL_ID_NUM = (_NM_ETHTOOL_ID_LAST - _NM_ETHTOOL_ID_FIRST + 1), -} NMEthtoolID; - -#define _NM_ETHTOOL_ID_FEATURE_AS_IDX(ethtool_id) ((ethtool_id) -_NM_ETHTOOL_ID_FEATURE_FIRST) -#define _NM_ETHTOOL_ID_COALESCE_AS_IDX(ethtool_id) ((ethtool_id) -_NM_ETHTOOL_ID_COALESCE_FIRST) - -typedef enum { - NM_ETHTOOL_TYPE_UNKNOWN, - NM_ETHTOOL_TYPE_COALESCE, - NM_ETHTOOL_TYPE_FEATURE, - NM_ETHTOOL_TYPE_RING, -} NMEthtoolType; - typedef struct { const char *optname; NMEthtoolID id; @@ -141,24 +32,6 @@ nm_ethtool_id_get_by_name(const char *optname) return d ? d->id : NM_ETHTOOL_ID_UNKNOWN; } -static inline gboolean -nm_ethtool_id_is_feature(NMEthtoolID id) -{ - return id >= _NM_ETHTOOL_ID_FEATURE_FIRST && id <= _NM_ETHTOOL_ID_FEATURE_LAST; -} - -static inline gboolean -nm_ethtool_id_is_coalesce(NMEthtoolID id) -{ - return id >= _NM_ETHTOOL_ID_COALESCE_FIRST && id <= _NM_ETHTOOL_ID_COALESCE_LAST; -} - -static inline gboolean -nm_ethtool_id_is_ring(NMEthtoolID id) -{ - return id >= _NM_ETHTOOL_ID_RING_FIRST && id <= _NM_ETHTOOL_ID_RING_LAST; -} - /****************************************************************************/ #endif /* __NM_ETHTOOL_UTILS_H__ */ diff --git a/shared/nm-base/nm-base.h b/shared/nm-base/nm-base.h new file mode 100644 index 0000000000..b3e7134b61 --- /dev/null +++ b/shared/nm-base/nm-base.h @@ -0,0 +1,144 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2018 Red Hat, Inc. + */ + +#ifndef __NM_LIBNM_BASE_H__ +#define __NM_LIBNM_BASE_H__ + +/*****************************************************************************/ + +typedef enum { + NM_ETHTOOL_ID_UNKNOWN = -1, + + _NM_ETHTOOL_ID_FIRST = 0, + + _NM_ETHTOOL_ID_COALESCE_FIRST = _NM_ETHTOOL_ID_FIRST, + NM_ETHTOOL_ID_COALESCE_ADAPTIVE_RX = _NM_ETHTOOL_ID_COALESCE_FIRST, + NM_ETHTOOL_ID_COALESCE_ADAPTIVE_TX, + NM_ETHTOOL_ID_COALESCE_PKT_RATE_HIGH, + NM_ETHTOOL_ID_COALESCE_PKT_RATE_LOW, + NM_ETHTOOL_ID_COALESCE_RX_FRAMES, + NM_ETHTOOL_ID_COALESCE_RX_FRAMES_HIGH, + NM_ETHTOOL_ID_COALESCE_RX_FRAMES_IRQ, + NM_ETHTOOL_ID_COALESCE_RX_FRAMES_LOW, + NM_ETHTOOL_ID_COALESCE_RX_USECS, + NM_ETHTOOL_ID_COALESCE_RX_USECS_HIGH, + NM_ETHTOOL_ID_COALESCE_RX_USECS_IRQ, + NM_ETHTOOL_ID_COALESCE_RX_USECS_LOW, + NM_ETHTOOL_ID_COALESCE_SAMPLE_INTERVAL, + NM_ETHTOOL_ID_COALESCE_STATS_BLOCK_USECS, + NM_ETHTOOL_ID_COALESCE_TX_FRAMES, + NM_ETHTOOL_ID_COALESCE_TX_FRAMES_HIGH, + NM_ETHTOOL_ID_COALESCE_TX_FRAMES_IRQ, + NM_ETHTOOL_ID_COALESCE_TX_FRAMES_LOW, + NM_ETHTOOL_ID_COALESCE_TX_USECS, + NM_ETHTOOL_ID_COALESCE_TX_USECS_HIGH, + NM_ETHTOOL_ID_COALESCE_TX_USECS_IRQ, + NM_ETHTOOL_ID_COALESCE_TX_USECS_LOW, + _NM_ETHTOOL_ID_COALESCE_LAST = NM_ETHTOOL_ID_COALESCE_TX_USECS_LOW, + + _NM_ETHTOOL_ID_FEATURE_FIRST = _NM_ETHTOOL_ID_COALESCE_LAST + 1, + NM_ETHTOOL_ID_FEATURE_ESP_HW_OFFLOAD = _NM_ETHTOOL_ID_FEATURE_FIRST, + NM_ETHTOOL_ID_FEATURE_ESP_TX_CSUM_HW_OFFLOAD, + NM_ETHTOOL_ID_FEATURE_FCOE_MTU, + NM_ETHTOOL_ID_FEATURE_GRO, + NM_ETHTOOL_ID_FEATURE_GSO, + NM_ETHTOOL_ID_FEATURE_HIGHDMA, + NM_ETHTOOL_ID_FEATURE_HW_TC_OFFLOAD, + NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD, + NM_ETHTOOL_ID_FEATURE_LOOPBACK, + NM_ETHTOOL_ID_FEATURE_LRO, + NM_ETHTOOL_ID_FEATURE_NTUPLE, + NM_ETHTOOL_ID_FEATURE_RX, + NM_ETHTOOL_ID_FEATURE_RXHASH, + NM_ETHTOOL_ID_FEATURE_RXVLAN, + NM_ETHTOOL_ID_FEATURE_RX_ALL, + NM_ETHTOOL_ID_FEATURE_RX_FCS, + NM_ETHTOOL_ID_FEATURE_RX_GRO_HW, + 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_TX_OFFLOAD, + NM_ETHTOOL_ID_FEATURE_TSO, + NM_ETHTOOL_ID_FEATURE_TX, + NM_ETHTOOL_ID_FEATURE_TXVLAN, + NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_FCOE_CRC, + NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IPV4, + NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IPV6, + NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IP_GENERIC, + NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_SCTP, + NM_ETHTOOL_ID_FEATURE_TX_ESP_SEGMENTATION, + 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_PARTIAL, + NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST, + NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION, + NM_ETHTOOL_ID_FEATURE_TX_IPXIP6_SEGMENTATION, + NM_ETHTOOL_ID_FEATURE_TX_NOCACHE_COPY, + NM_ETHTOOL_ID_FEATURE_TX_SCATTER_GATHER, + NM_ETHTOOL_ID_FEATURE_TX_SCATTER_GATHER_FRAGLIST, + NM_ETHTOOL_ID_FEATURE_TX_SCTP_SEGMENTATION, + NM_ETHTOOL_ID_FEATURE_TX_TCP6_SEGMENTATION, + 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_UDP_SEGMENTATION, + NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION, + NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION, + NM_ETHTOOL_ID_FEATURE_TX_VLAN_STAG_HW_INSERT, + _NM_ETHTOOL_ID_FEATURE_LAST = NM_ETHTOOL_ID_FEATURE_TX_VLAN_STAG_HW_INSERT, + + _NM_ETHTOOL_ID_RING_FIRST = _NM_ETHTOOL_ID_FEATURE_LAST + 1, + NM_ETHTOOL_ID_RING_RX = _NM_ETHTOOL_ID_RING_FIRST, + NM_ETHTOOL_ID_RING_RX_JUMBO, + NM_ETHTOOL_ID_RING_RX_MINI, + NM_ETHTOOL_ID_RING_TX, + _NM_ETHTOOL_ID_RING_LAST = NM_ETHTOOL_ID_RING_TX, + + _NM_ETHTOOL_ID_LAST = _NM_ETHTOOL_ID_RING_LAST, + + _NM_ETHTOOL_ID_COALESCE_NUM = + (_NM_ETHTOOL_ID_COALESCE_LAST - _NM_ETHTOOL_ID_COALESCE_FIRST + 1), + _NM_ETHTOOL_ID_FEATURE_NUM = (_NM_ETHTOOL_ID_FEATURE_LAST - _NM_ETHTOOL_ID_FEATURE_FIRST + 1), + _NM_ETHTOOL_ID_RING_NUM = (_NM_ETHTOOL_ID_RING_LAST - _NM_ETHTOOL_ID_RING_FIRST + 1), + _NM_ETHTOOL_ID_NUM = (_NM_ETHTOOL_ID_LAST - _NM_ETHTOOL_ID_FIRST + 1), +} NMEthtoolID; + +#define _NM_ETHTOOL_ID_FEATURE_AS_IDX(ethtool_id) ((ethtool_id) -_NM_ETHTOOL_ID_FEATURE_FIRST) +#define _NM_ETHTOOL_ID_COALESCE_AS_IDX(ethtool_id) ((ethtool_id) -_NM_ETHTOOL_ID_COALESCE_FIRST) + +typedef enum { + NM_ETHTOOL_TYPE_UNKNOWN, + NM_ETHTOOL_TYPE_COALESCE, + NM_ETHTOOL_TYPE_FEATURE, + NM_ETHTOOL_TYPE_RING, +} NMEthtoolType; + +/****************************************************************************/ + +static inline gboolean +nm_ethtool_id_is_feature(NMEthtoolID id) +{ + return id >= _NM_ETHTOOL_ID_FEATURE_FIRST && id <= _NM_ETHTOOL_ID_FEATURE_LAST; +} + +static inline gboolean +nm_ethtool_id_is_coalesce(NMEthtoolID id) +{ + return id >= _NM_ETHTOOL_ID_COALESCE_FIRST && id <= _NM_ETHTOOL_ID_COALESCE_LAST; +} + +static inline gboolean +nm_ethtool_id_is_ring(NMEthtoolID id) +{ + return id >= _NM_ETHTOOL_ID_RING_FIRST && id <= _NM_ETHTOOL_ID_RING_LAST; +} + +/****************************************************************************/ + +#endif /* __NM_LIBNM_BASE_H__ */ diff --git a/src/platform/nm-platform-utils.h b/src/platform/nm-platform-utils.h index 4e778f0768..5f209208c3 100644 --- a/src/platform/nm-platform-utils.h +++ b/src/platform/nm-platform-utils.h @@ -8,7 +8,7 @@ #include "nm-platform.h" #include "nm-setting-wired.h" -#include "nm-libnm-core-intern/nm-ethtool-utils.h" +#include "nm-base/nm-base.h" /*****************************************************************************/ diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c index 7deca0e074..c50a66f7a8 100644 --- a/src/platform/tests/test-link.c +++ b/src/platform/tests/test-link.c @@ -12,6 +12,7 @@ #include #include "nm-glib-aux/nm-io-utils.h" +#include "nm-libnm-core-intern/nm-ethtool-utils.h" #include "platform/nmp-object.h" #include "nm-platform/nmp-netns.h" #include "platform/nm-platform-utils.h" From 2bb5c8b13ba5ace145f77538d8c004520573bae6 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 8 Jan 2021 17:01:45 +0100 Subject: [PATCH 12/23] platform: add duplicate of NMSettingWiredWakeOnLan to nm-base for platform Currently src/platform depends on libnm-core. libnm-core is large optimally we have a better separation between our code. That means libnm-core does not depend on platform and vice versa. However, nm-platform re-uses some enums from libnm-core for internal code. To avoid that dependency, add _NMSettingWiredWakeOnLan as a duplicate to nm-base/nm-base.h. nm-base can both be used by libnm-core, nm-platform and src/platform. The only problem is that NMSettingWiredWakeOnLan is also part of public API of libnm. It means, we must duplicate the enum. But with several static assertions in unit tests I think that is not a problem to do. --- libnm-core/nm-core-internal.h | 15 +++++++++ libnm-core/tests/test-general.c | 55 +++++++++++++++++++++++++++++++- shared/nm-base/nm-base.h | 18 +++++++++++ src/devices/nm-device-ethernet.c | 2 +- src/platform/nm-platform-utils.c | 20 ++++++------ src/platform/nm-platform-utils.h | 6 ++-- src/platform/nm-platform.c | 8 ++--- src/platform/nm-platform.h | 9 +++--- 8 files changed, 110 insertions(+), 23 deletions(-) diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h index 2ed85526df..01b3a55db6 100644 --- a/libnm-core/nm-core-internal.h +++ b/libnm-core/nm-core-internal.h @@ -20,6 +20,7 @@ #error Cannot use this header. #endif +#include "nm-base/nm-base.h" #include "nm-connection.h" #include "nm-core-enum-types.h" #include "nm-core-types-internal.h" @@ -215,6 +216,20 @@ nm_bluetooth_capability_to_string(NMBluetoothCapabilities capabilities, char *bu /*****************************************************************************/ +static inline _NMSettingWiredWakeOnLan +_NM_SETTING_WIRED_WAKE_ON_LAN_CAST(NMSettingWiredWakeOnLan v) +{ + /* _NMSettingWiredWakeOnLan and NMSettingWiredWakeOnLan enums are really + * the same. + * + * The former is used by nm-platform (which should have no libnm-core dependency), + * the latter is used by libnm-core. A unit test ensures they are exactly the same, + * so we can just cast them. */ + return (_NMSettingWiredWakeOnLan) v; +} + +/*****************************************************************************/ + typedef enum { /*< skip >*/ NM_SETTING_PARSE_FLAGS_NONE = 0, NM_SETTING_PARSE_FLAGS_STRICT = 1LL << 0, diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c index 4b44472e2f..0d84d07a48 100644 --- a/libnm-core/tests/test-general.c +++ b/libnm-core/tests/test-general.c @@ -17,6 +17,7 @@ #include "nm-glib-aux/nm-enum-utils.h" #include "nm-glib-aux/nm-str-buf.h" #include "nm-glib-aux/nm-json-aux.h" +#include "nm-base/nm-base.h" #include "systemd/nm-sd-utils-shared.h" #include "nm-utils.h" @@ -97,6 +98,57 @@ test_nm_ascii_spaces(void) /*****************************************************************************/ +static void +test_wired_wake_on_lan_enum(void) +{ + nm_auto_unref_gtypeclass GFlagsClass *flags_class = NULL; + gs_unref_hashtable GHashTable *vals = g_hash_table_new(nm_direct_hash, NULL); + guint i; + + G_STATIC_ASSERT_EXPR(sizeof(NMSettingWiredWakeOnLan) == sizeof(_NMSettingWiredWakeOnLan)); + G_STATIC_ASSERT_EXPR(sizeof(NMSettingWiredWakeOnLan) < sizeof(gint64)); + + G_STATIC_ASSERT_EXPR(sizeof(NMSettingWiredWakeOnLan) < sizeof(gint64)); + g_assert((((gint64)((NMSettingWiredWakeOnLan) -1)) < 0) + == (((gint64)((_NMSettingWiredWakeOnLan) -1)) < 0)); + +#define _E(n) \ + G_STMT_START \ + { \ + G_STATIC_ASSERT_EXPR(n == (gint64) _##n); \ + G_STATIC_ASSERT_EXPR(_##n == (gint64) n); \ + g_assert(_##n == _NM_SETTING_WIRED_WAKE_ON_LAN_CAST(n)); \ + if (!g_hash_table_add(vals, GUINT_TO_POINTER(n))) \ + g_assert_not_reached(); \ + } \ + G_STMT_END + _E(NM_SETTING_WIRED_WAKE_ON_LAN_NONE); + _E(NM_SETTING_WIRED_WAKE_ON_LAN_PHY); + _E(NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST); + _E(NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST); + _E(NM_SETTING_WIRED_WAKE_ON_LAN_BROADCAST); + _E(NM_SETTING_WIRED_WAKE_ON_LAN_ARP); + _E(NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC); + _E(NM_SETTING_WIRED_WAKE_ON_LAN_ALL); + _E(NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT); + _E(NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE); + _E(NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS); +#undef _E + + flags_class = G_FLAGS_CLASS(g_type_class_ref(NM_TYPE_SETTING_WIRED_WAKE_ON_LAN)); + for (i = 0; i < flags_class->n_values; i++) { + const GFlagsValue *value = &flags_class->values[i]; + + if (!g_hash_table_contains(vals, GUINT_TO_POINTER(value->value))) { + g_error("The enum value %s from NMSettingWiredWakeOnLan is not checked for " + "_NMSettingWiredWakeOnLan", + value->value_name); + } + } +} + +/*****************************************************************************/ + typedef struct _nm_packed { int v0; char v1; @@ -1227,7 +1279,7 @@ _dedup_obj_destroy(NMDedupMultiObj *obj) { DedupObj *o = (DedupObj *) obj; - nm_assert(o->parent._ref_count == 0); + g_assert(o->parent._ref_count == 0); o->parent._ref_count = 1; o = _dedup_obj_assert(obj); g_slice_free(DedupObj, o); @@ -10222,6 +10274,7 @@ main(int argc, char **argv) nmtst_init(&argc, &argv, TRUE); g_test_add_func("/core/general/test_nm_ascii_spaces", test_nm_ascii_spaces); + g_test_add_func("/core/general/test_wired_wake_on_lan_enum", test_wired_wake_on_lan_enum); g_test_add_func("/core/general/test_nm_hash", test_nm_hash); g_test_add_func("/core/general/test_nm_g_slice_free_fcn", test_nm_g_slice_free_fcn); g_test_add_func("/core/general/test_c_list_sort", test_c_list_sort); diff --git a/shared/nm-base/nm-base.h b/shared/nm-base/nm-base.h index b3e7134b61..c9f1c095bd 100644 --- a/shared/nm-base/nm-base.h +++ b/shared/nm-base/nm-base.h @@ -139,6 +139,24 @@ nm_ethtool_id_is_ring(NMEthtoolID id) return id >= _NM_ETHTOOL_ID_RING_FIRST && id <= _NM_ETHTOOL_ID_RING_LAST; } +/*****************************************************************************/ + +typedef enum { + _NM_SETTING_WIRED_WAKE_ON_LAN_NONE = 0, + _NM_SETTING_WIRED_WAKE_ON_LAN_PHY = 0x2, + _NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST = 0x4, + _NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST = 0x8, + _NM_SETTING_WIRED_WAKE_ON_LAN_BROADCAST = 0x10, + _NM_SETTING_WIRED_WAKE_ON_LAN_ARP = 0x20, + _NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC = 0x40, + + _NM_SETTING_WIRED_WAKE_ON_LAN_ALL = 0x7E, + + _NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT = 0x1, + _NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE = 0x8000, + _NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS = 0x8001, +} _NMSettingWiredWakeOnLan; + /****************************************************************************/ #endif /* __NM_LIBNM_BASE_H__ */ diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c index 37245b1c9d..05f5fe1e8d 100644 --- a/src/devices/nm-device-ethernet.c +++ b/src/devices/nm-device-ethernet.c @@ -1392,7 +1392,7 @@ wake_on_lan_enable(NMDevice *device) found: return nm_platform_ethtool_set_wake_on_lan(nm_device_get_platform(device), nm_device_get_ifindex(device), - wol, + _NM_SETTING_WIRED_WAKE_ON_LAN_CAST(wol), password); } diff --git a/src/platform/nm-platform-utils.c b/src/platform/nm-platform-utils.c index 75ac769a74..d615489b2d 100644 --- a/src/platform/nm-platform-utils.c +++ b/src/platform/nm-platform-utils.c @@ -1405,9 +1405,9 @@ nmp_utils_ethtool_set_link_settings(int ifindex, } gboolean -nmp_utils_ethtool_set_wake_on_lan(int ifindex, - NMSettingWiredWakeOnLan wol, - const char * wol_password) +nmp_utils_ethtool_set_wake_on_lan(int ifindex, + _NMSettingWiredWakeOnLan wol, + const char * wol_password) { struct ethtool_wolinfo wol_info = { .cmd = ETHTOOL_SWOL, @@ -1416,7 +1416,7 @@ nmp_utils_ethtool_set_wake_on_lan(int ifindex, g_return_val_if_fail(ifindex > 0, FALSE); - if (wol == NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE) + if (wol == _NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE) return TRUE; nm_log_dbg(LOGD_PLATFORM, @@ -1425,17 +1425,17 @@ nmp_utils_ethtool_set_wake_on_lan(int ifindex, (unsigned) wol, wol_password); - if (NM_FLAGS_HAS(wol, NM_SETTING_WIRED_WAKE_ON_LAN_PHY)) + if (NM_FLAGS_HAS(wol, _NM_SETTING_WIRED_WAKE_ON_LAN_PHY)) wol_info.wolopts |= WAKE_PHY; - if (NM_FLAGS_HAS(wol, NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST)) + if (NM_FLAGS_HAS(wol, _NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST)) wol_info.wolopts |= WAKE_UCAST; - if (NM_FLAGS_HAS(wol, NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST)) + if (NM_FLAGS_HAS(wol, _NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST)) wol_info.wolopts |= WAKE_MCAST; - if (NM_FLAGS_HAS(wol, NM_SETTING_WIRED_WAKE_ON_LAN_BROADCAST)) + if (NM_FLAGS_HAS(wol, _NM_SETTING_WIRED_WAKE_ON_LAN_BROADCAST)) wol_info.wolopts |= WAKE_BCAST; - if (NM_FLAGS_HAS(wol, NM_SETTING_WIRED_WAKE_ON_LAN_ARP)) + if (NM_FLAGS_HAS(wol, _NM_SETTING_WIRED_WAKE_ON_LAN_ARP)) wol_info.wolopts |= WAKE_ARP; - if (NM_FLAGS_HAS(wol, NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC)) + if (NM_FLAGS_HAS(wol, _NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC)) wol_info.wolopts |= WAKE_MAGIC; if (wol_password) { diff --git a/src/platform/nm-platform-utils.h b/src/platform/nm-platform-utils.h index 5f209208c3..e411544b35 100644 --- a/src/platform/nm-platform-utils.h +++ b/src/platform/nm-platform-utils.h @@ -17,9 +17,9 @@ gboolean nmp_utils_ethtool_supports_carrier_detect(int ifindex); gboolean nmp_utils_ethtool_supports_vlans(int ifindex); int nmp_utils_ethtool_get_peer_ifindex(int ifindex); gboolean nmp_utils_ethtool_get_wake_on_lan(int ifindex); -gboolean nmp_utils_ethtool_set_wake_on_lan(int ifindex, - NMSettingWiredWakeOnLan wol, - const char * wol_password); +gboolean nmp_utils_ethtool_set_wake_on_lan(int ifindex, + _NMSettingWiredWakeOnLan wol, + const char * wol_password); gboolean nmp_utils_ethtool_get_link_settings(int ifindex, gboolean * out_autoneg, diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index eb2930b315..5c92c773ff 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -3282,10 +3282,10 @@ _to_string_ifa_flags(guint32 ifa_flags, char *buf, gsize size) /*****************************************************************************/ gboolean -nm_platform_ethtool_set_wake_on_lan(NMPlatform * self, - int ifindex, - NMSettingWiredWakeOnLan wol, - const char * wol_password) +nm_platform_ethtool_set_wake_on_lan(NMPlatform * self, + int ifindex, + _NMSettingWiredWakeOnLan wol, + const char * wol_password) { _CHECK_SELF_NETNS(self, klass, netns, FALSE); diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h index 1a1a71213e..26f2afd5d6 100644 --- a/src/platform/nm-platform.h +++ b/src/platform/nm-platform.h @@ -10,6 +10,7 @@ #include "nm-core-types-internal.h" #include "nm-platform/nmp-base.h" +#include "nm-base/nm-base.h" #include "nm-core-utils.h" #include "nm-setting-vlan.h" @@ -2327,10 +2328,10 @@ const char *nm_platform_route_scope2str(int scope, char *buf, gsize len); int nm_platform_ip_address_cmp_expiry(const NMPlatformIPAddress *a, const NMPlatformIPAddress *b); -gboolean nm_platform_ethtool_set_wake_on_lan(NMPlatform * self, - int ifindex, - NMSettingWiredWakeOnLan wol, - const char * wol_password); +gboolean nm_platform_ethtool_set_wake_on_lan(NMPlatform * self, + int ifindex, + _NMSettingWiredWakeOnLan wol, + const char * wol_password); gboolean nm_platform_ethtool_set_link_settings(NMPlatform * self, int ifindex, gboolean autoneg, From 126681a965ac96f3d0544b0e4d00ce45b822fd40 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 8 Jan 2021 18:39:27 +0100 Subject: [PATCH 13/23] platform: move types from "nm-platform-utils.h" to nmp-base.h" Thereby, also no longer include "nm-platform.h" and "nm-setting-wired.h" in "nm-platform-utils.h". --- shared/nm-platform/nmp-base.h | 86 ++++++++++++++++++++++++++ src/platform/nm-platform-utils.c | 7 ++- src/platform/nm-platform-utils.h | 71 +-------------------- src/platform/nm-platform.h | 12 ---- src/platform/wifi/nm-wifi-utils-wext.c | 1 + 5 files changed, 92 insertions(+), 85 deletions(-) diff --git a/shared/nm-platform/nmp-base.h b/shared/nm-platform/nmp-base.h index f4e50dd0b5..210c26d6bb 100644 --- a/shared/nm-platform/nmp-base.h +++ b/shared/nm-platform/nmp-base.h @@ -3,6 +3,92 @@ #ifndef __NMP_FWD_H__ #define __NMP_FWD_H__ +#include "nm-base/nm-base.h" + +/*****************************************************************************/ + +typedef enum { + NM_PLATFORM_LINK_DUPLEX_UNKNOWN, + NM_PLATFORM_LINK_DUPLEX_HALF, + NM_PLATFORM_LINK_DUPLEX_FULL, +} NMPlatformLinkDuplexType; + +/*****************************************************************************/ + +typedef struct { + /* We don't want to include in header files, + * thus create a ABI compatible version of struct ethtool_drvinfo.*/ + guint32 _private_cmd; + char driver[32]; + char version[32]; + char fw_version[32]; + char _private_bus_info[32]; + char _private_erom_version[32]; + char _private_reserved2[12]; + guint32 _private_n_priv_flags; + guint32 _private_n_stats; + guint32 _private_testinfo_len; + guint32 _private_eedump_len; + guint32 _private_regdump_len; +} NMPUtilsEthtoolDriverInfo; + +typedef struct { + NMEthtoolID ethtool_id; + + guint8 n_kernel_names; + + /* one NMEthtoolID refers to one or more kernel_names. The reason for supporting this complexity + * (where one NMSettingEthtool option refers to multiple kernel features) is to follow what + * ethtool does, where "tx" is an alias for multiple features. */ + const char *const *kernel_names; +} NMEthtoolFeatureInfo; + +typedef struct { + const NMEthtoolFeatureInfo *info; + + guint idx_ss_features; + + /* one NMEthtoolFeatureInfo references one or more kernel_names. This is the index + * of the matching info->kernel_names */ + guint8 idx_kernel_name; + + bool available : 1; + bool requested : 1; + bool active : 1; + bool never_changed : 1; +} NMEthtoolFeatureState; + +typedef struct { + guint n_states; + + guint n_ss_features; + + /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */ + const NMEthtoolFeatureState *const *states_indexed[_NM_ETHTOOL_ID_FEATURE_NUM]; + + /* the same content, here as a list of n_states entries. */ + const NMEthtoolFeatureState states_list[]; +} NMEthtoolFeatureStates; + +/*****************************************************************************/ + +typedef struct { + guint32 + s[_NM_ETHTOOL_ID_COALESCE_NUM /* indexed by (NMEthtoolID - _NM_ETHTOOL_ID_COALESCE_FIRST) */ + ]; +} NMEthtoolCoalesceState; + +/*****************************************************************************/ + +typedef struct { + guint32 rx_pending; + guint32 rx_mini_pending; + guint32 rx_jumbo_pending; + guint32 tx_pending; +} NMEthtoolRingState; + +/*****************************************************************************/ + typedef struct _NMPNetns NMPNetns; #endif /* __NMP_FWD_H__ */ diff --git a/src/platform/nm-platform-utils.c b/src/platform/nm-platform-utils.c index d615489b2d..a1b14b8679 100644 --- a/src/platform/nm-platform-utils.c +++ b/src/platform/nm-platform-utils.c @@ -18,12 +18,13 @@ #include #include -#include "nm-utils.h" -#include "nm-setting-wired.h" #include "nm-libnm-core-intern/nm-ethtool-utils.h" - +#include "nm-utils.h" +#include "nm-platform.h" #include "nm-core-utils.h" +/*****************************************************************************/ + #define ONOFF(bool_val) ((bool_val) ? "on" : "off") /****************************************************************************** diff --git a/src/platform/nm-platform-utils.h b/src/platform/nm-platform-utils.h index e411544b35..3de40a27d0 100644 --- a/src/platform/nm-platform-utils.h +++ b/src/platform/nm-platform-utils.h @@ -6,9 +6,8 @@ #ifndef __NM_PLATFORM_UTILS_H__ #define __NM_PLATFORM_UTILS_H__ -#include "nm-platform.h" -#include "nm-setting-wired.h" #include "nm-base/nm-base.h" +#include "nm-platform/nmp-base.h" /*****************************************************************************/ @@ -32,63 +31,8 @@ gboolean nmp_utils_ethtool_set_link_settings(int ifindex, gboolean nmp_utils_ethtool_get_permanent_address(int ifindex, guint8 *buf, size_t *length); -typedef struct { - /* We don't want to include in header files, - * thus create a ABI compatible version of struct ethtool_drvinfo.*/ - guint32 _private_cmd; - char driver[32]; - char version[32]; - char fw_version[32]; - char _private_bus_info[32]; - char _private_erom_version[32]; - char _private_reserved2[12]; - guint32 _private_n_priv_flags; - guint32 _private_n_stats; - guint32 _private_testinfo_len; - guint32 _private_eedump_len; - guint32 _private_regdump_len; -} NMPUtilsEthtoolDriverInfo; - gboolean nmp_utils_ethtool_get_driver_info(int ifindex, NMPUtilsEthtoolDriverInfo *data); -typedef struct { - NMEthtoolID ethtool_id; - - guint8 n_kernel_names; - - /* one NMEthtoolID refers to one or more kernel_names. The reason for supporting this complexity - * (where one NMSettingEthtool option refers to multiple kernel features) is to follow what - * ethtool does, where "tx" is an alias for multiple features. */ - const char *const *kernel_names; -} NMEthtoolFeatureInfo; - -typedef struct { - const NMEthtoolFeatureInfo *info; - - guint idx_ss_features; - - /* one NMEthtoolFeatureInfo references one or more kernel_names. This is the index - * of the matching info->kernel_names */ - guint8 idx_kernel_name; - - bool available : 1; - bool requested : 1; - bool active : 1; - bool never_changed : 1; -} NMEthtoolFeatureState; - -struct _NMEthtoolFeatureStates { - guint n_states; - - guint n_ss_features; - - /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */ - const NMEthtoolFeatureState *const *states_indexed[_NM_ETHTOOL_ID_FEATURE_NUM]; - - /* the same content, here as a list of n_states entries. */ - const NMEthtoolFeatureState states_list[]; -}; - NMEthtoolFeatureStates *nmp_utils_ethtool_get_features(int ifindex); gboolean nmp_utils_ethtool_set_features( @@ -97,23 +41,10 @@ gboolean nmp_utils_ethtool_set_features( const NMTernary *requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */, gboolean do_set /* or reset */); -struct _NMEthtoolCoalesceState { - guint32 - s[_NM_ETHTOOL_ID_COALESCE_NUM /* indexed by (NMEthtoolID - _NM_ETHTOOL_ID_COALESCE_FIRST) */ - ]; -}; - gboolean nmp_utils_ethtool_get_coalesce(int ifindex, NMEthtoolCoalesceState *coalesce); gboolean nmp_utils_ethtool_set_coalesce(int ifindex, const NMEthtoolCoalesceState *coalesce); -struct _NMEthtoolRingState { - guint32 rx_pending; - guint32 rx_mini_pending; - guint32 rx_jumbo_pending; - guint32 tx_pending; -}; - gboolean nmp_utils_ethtool_get_ring(int ifindex, NMEthtoolRingState *ring); gboolean nmp_utils_ethtool_set_ring(int ifindex, const NMEthtoolRingState *ring); diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h index 26f2afd5d6..7770492f63 100644 --- a/src/platform/nm-platform.h +++ b/src/platform/nm-platform.h @@ -978,12 +978,6 @@ typedef struct { guint8 public_key[NMP_WIREGUARD_PUBLIC_KEY_LEN]; } NMPlatformLnkWireGuard; -typedef enum { - NM_PLATFORM_LINK_DUPLEX_UNKNOWN, - NM_PLATFORM_LINK_DUPLEX_HALF, - NM_PLATFORM_LINK_DUPLEX_FULL, -} NMPlatformLinkDuplexType; - typedef enum { NM_PLATFORM_WIREGUARD_CHANGE_FLAG_NONE = 0, NM_PLATFORM_WIREGUARD_CHANGE_FLAG_REPLACE_PEERS = (1LL << 0), @@ -2343,8 +2337,6 @@ gboolean nm_platform_ethtool_get_link_settings(NMPlatform * self, guint32 * out_speed, NMPlatformLinkDuplexType *out_duplex); -typedef struct _NMEthtoolFeatureStates NMEthtoolFeatureStates; - NMEthtoolFeatureStates *nm_platform_ethtool_get_link_features(NMPlatform *self, int ifindex); gboolean nm_platform_ethtool_set_features( NMPlatform * self, @@ -2353,8 +2345,6 @@ gboolean nm_platform_ethtool_set_features( const NMTernary *requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */, gboolean do_set /* or reset */); -typedef struct _NMEthtoolCoalesceState NMEthtoolCoalesceState; - gboolean nm_platform_ethtool_get_link_coalesce(NMPlatform * self, int ifindex, NMEthtoolCoalesceState *coalesce); @@ -2363,8 +2353,6 @@ gboolean nm_platform_ethtool_set_coalesce(NMPlatform * self, int ifindex, const NMEthtoolCoalesceState *coalesce); -typedef struct _NMEthtoolRingState NMEthtoolRingState; - gboolean nm_platform_ethtool_get_link_ring(NMPlatform *self, int ifindex, NMEthtoolRingState *ring); gboolean diff --git a/src/platform/wifi/nm-wifi-utils-wext.c b/src/platform/wifi/nm-wifi-utils-wext.c index 070b21092b..4d024174c8 100644 --- a/src/platform/wifi/nm-wifi-utils-wext.c +++ b/src/platform/wifi/nm-wifi-utils-wext.c @@ -25,6 +25,7 @@ #include "nm-utils.h" #include "platform/nm-platform-utils.h" #include "nm-core-internal.h" +#include "nm-core-utils.h" typedef struct { NMWifiUtils parent; From 84d67d3a4fb9095c6cb659fc1add770364a958df Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 8 Jan 2021 18:45:16 +0100 Subject: [PATCH 14/23] shared: add duplicate for NM_UTILS_HWADDR_LEN_MAX to "nm-base/nm-base.h" We will need this in "shared/nm-platform", but we don't want to include "libnm-core/nm-utils.h" for that. --- libnm-core/tests/test-general.c | 6 ++++++ shared/nm-base/nm-base.h | 5 +++++ src/platform/nm-platform-utils.c | 6 +++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c index 0d84d07a48..2210f9f1d9 100644 --- a/libnm-core/tests/test-general.c +++ b/libnm-core/tests/test-general.c @@ -75,6 +75,12 @@ G_STATIC_ASSERT(sizeof(bool) <= sizeof(int)); /*****************************************************************************/ +/* NM_UTILS_HWADDR_LEN_MAX is public API of libnm(-core) and _NM_UTILS_HWADDR_LEN_MAX + * is internal API. They are the same, but the latter can be used without including libnm-core. */ +G_STATIC_ASSERT(NM_UTILS_HWADDR_LEN_MAX == _NM_UTILS_HWADDR_LEN_MAX); + +/*****************************************************************************/ + static void test_nm_ascii_spaces(void) { diff --git a/shared/nm-base/nm-base.h b/shared/nm-base/nm-base.h index c9f1c095bd..f0a5d345e6 100644 --- a/shared/nm-base/nm-base.h +++ b/shared/nm-base/nm-base.h @@ -8,6 +8,11 @@ /*****************************************************************************/ +/* this must be the same as NM_UTILS_HWADDR_LEN_MAX from libnm. */ +#define _NM_UTILS_HWADDR_LEN_MAX 20 + +/*****************************************************************************/ + typedef enum { NM_ETHTOOL_ID_UNKNOWN = -1, diff --git a/src/platform/nm-platform-utils.c b/src/platform/nm-platform-utils.c index a1b14b8679..f40059a049 100644 --- a/src/platform/nm-platform-utils.c +++ b/src/platform/nm-platform-utils.c @@ -1117,10 +1117,10 @@ nmp_utils_ethtool_get_permanent_address(int ifindex, guint8 *buf, size_t *length { struct { struct ethtool_perm_addr e; - guint8 _extra_data[NM_UTILS_HWADDR_LEN_MAX + 1]; + guint8 _extra_data[_NM_UTILS_HWADDR_LEN_MAX + 1]; } edata = { .e.cmd = ETHTOOL_GPERMADDR, - .e.size = NM_UTILS_HWADDR_LEN_MAX, + .e.size = _NM_UTILS_HWADDR_LEN_MAX, }; const guint8 *pdata; @@ -1131,7 +1131,7 @@ nmp_utils_ethtool_get_permanent_address(int ifindex, guint8 *buf, size_t *length if (_ethtool_call_once(ifindex, &edata, sizeof(edata)) < 0) return FALSE; - if (edata.e.size > NM_UTILS_HWADDR_LEN_MAX) + if (edata.e.size > _NM_UTILS_HWADDR_LEN_MAX) return FALSE; if (edata.e.size < 1) return FALSE; From 90881953edd16b79fa1fd15e90d2d89454e0fb37 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 8 Jan 2021 20:24:36 +0100 Subject: [PATCH 15/23] platform: move nm_platform_link_duplex_type_to_string() to "nm-platform-utils.c" There should be a clear hierarchie of dependency. That is, "nm-platform.h" may use "nm-platform-utils.h", but not the other way around. Move nm_platform_link_duplex_type_to_string(). --- src/platform/nm-platform-utils.c | 9 +++++++++ src/platform/nm-platform-utils.h | 2 ++ src/platform/nm-platform.c | 7 ------- src/platform/nm-platform.h | 2 -- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/platform/nm-platform-utils.c b/src/platform/nm-platform-utils.c index f40059a049..074e2c23e4 100644 --- a/src/platform/nm-platform-utils.c +++ b/src/platform/nm-platform-utils.c @@ -53,6 +53,15 @@ nmp_utils_if_nametoindex(const char *ifname) /*****************************************************************************/ +NM_UTILS_LOOKUP_STR_DEFINE(nm_platform_link_duplex_type_to_string, + NMPlatformLinkDuplexType, + NM_UTILS_LOOKUP_DEFAULT_WARN(NULL), + NM_UTILS_LOOKUP_STR_ITEM(NM_PLATFORM_LINK_DUPLEX_UNKNOWN, "unknown"), + NM_UTILS_LOOKUP_STR_ITEM(NM_PLATFORM_LINK_DUPLEX_FULL, "full"), + NM_UTILS_LOOKUP_STR_ITEM(NM_PLATFORM_LINK_DUPLEX_HALF, "half"), ); + +/*****************************************************************************/ + typedef struct { int fd; const int ifindex; diff --git a/src/platform/nm-platform-utils.h b/src/platform/nm-platform-utils.h index 3de40a27d0..38f8a00729 100644 --- a/src/platform/nm-platform-utils.h +++ b/src/platform/nm-platform-utils.h @@ -20,6 +20,8 @@ gboolean nmp_utils_ethtool_set_wake_on_lan(int ifindex, _NMSettingWiredWakeOnLan wol, const char * wol_password); +const char *nm_platform_link_duplex_type_to_string(NMPlatformLinkDuplexType duplex); + gboolean nmp_utils_ethtool_get_link_settings(int ifindex, gboolean * out_autoneg, guint32 * out_speed, diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index 5c92c773ff..44c6ee4797 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -3322,13 +3322,6 @@ nm_platform_ethtool_get_link_settings(NMPlatform * self, return nmp_utils_ethtool_get_link_settings(ifindex, out_autoneg, out_speed, out_duplex); } -NM_UTILS_LOOKUP_STR_DEFINE(nm_platform_link_duplex_type_to_string, - NMPlatformLinkDuplexType, - NM_UTILS_LOOKUP_DEFAULT_WARN(NULL), - NM_UTILS_LOOKUP_STR_ITEM(NM_PLATFORM_LINK_DUPLEX_UNKNOWN, "unknown"), - NM_UTILS_LOOKUP_STR_ITEM(NM_PLATFORM_LINK_DUPLEX_FULL, "full"), - NM_UTILS_LOOKUP_STR_ITEM(NM_PLATFORM_LINK_DUPLEX_HALF, "half"), ); - /*****************************************************************************/ NMEthtoolFeatureStates * diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h index 7770492f63..a785144155 100644 --- a/src/platform/nm-platform.h +++ b/src/platform/nm-platform.h @@ -2358,8 +2358,6 @@ gboolean nm_platform_ethtool_get_link_ring(NMPlatform *self, int ifindex, NMEtht gboolean nm_platform_ethtool_set_ring(NMPlatform *self, int ifindex, const NMEthtoolRingState *ring); -const char *nm_platform_link_duplex_type_to_string(NMPlatformLinkDuplexType duplex); - void nm_platform_ip4_dev_route_blacklist_set(NMPlatform *self, int ifindex, GPtrArray * ip4_dev_route_blacklist); From 9a5a95e0faa32f1c745dc69462cf81b80c4309f8 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 8 Jan 2021 20:25:38 +0100 Subject: [PATCH 16/23] platform: remove unnecessary includes from "nm-platform-utils.c" --- src/platform/nm-platform-utils.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/platform/nm-platform-utils.c b/src/platform/nm-platform-utils.c index 074e2c23e4..2301da125a 100644 --- a/src/platform/nm-platform-utils.c +++ b/src/platform/nm-platform-utils.c @@ -19,9 +19,6 @@ #include #include "nm-libnm-core-intern/nm-ethtool-utils.h" -#include "nm-utils.h" -#include "nm-platform.h" -#include "nm-core-utils.h" /*****************************************************************************/ From 19242f56d760b1e6e0e9ecee120835f95c7b8d94 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Sat, 9 Jan 2021 11:47:22 +0100 Subject: [PATCH 17/23] libnm: split ethtool option names to a new header "libnm-core/nm-ethtool-utils.h" We want to use these defines for option names also in "shared/nm-base" (and in turn in "shared/nm-platform), which cannot include "libnm-core". However, they are also public API of libnm. To get this done, in a first step, move these defines to a new header "libnm-core/nm-ethtool-utils.h". Since now the name "nm-ethtool-utils.h" is taken, also rename nm-libnm-core-intern files. --- Makefile.am | 5 +- clients/common/nm-meta-setting-desc.h | 2 +- docs/libnm/Makefile.am | 2 +- docs/libnm/meson.build | 2 +- libnm-core/meson.build | 2 +- libnm-core/nm-ethtool-utils.h | 100 ++++++++++++++++++ .../{nm-ethtool-utils.c => nm-ethtool-base.c} | 2 +- .../{nm-ethtool-utils.h => nm-ethtool-base.h} | 6 +- libnm-core/nm-setting-ethtool.c | 2 +- libnm-core/nm-setting-ethtool.h | 86 +-------------- libnm-core/tests/test-general.c | 2 +- src/devices/nm-device.c | 2 +- src/platform/nm-platform-utils.c | 2 +- src/platform/tests/test-link.c | 2 +- .../plugins/ifcfg-rh/nms-ifcfg-rh-reader.c | 2 +- .../plugins/ifcfg-rh/nms-ifcfg-rh-utils.h | 2 +- .../plugins/ifcfg-rh/nms-ifcfg-rh-writer.c | 2 +- .../plugins/ifcfg-rh/tests/test-ifcfg-rh.c | 2 +- 18 files changed, 121 insertions(+), 104 deletions(-) create mode 100644 libnm-core/nm-ethtool-utils.h rename libnm-core/nm-libnm-core-intern/{nm-ethtool-utils.c => nm-ethtool-base.c} (99%) rename libnm-core/nm-libnm-core-intern/{nm-ethtool-utils.h => nm-ethtool-base.h} (89%) diff --git a/Makefile.am b/Makefile.am index f7024a0ee6..b6f84ee29f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -576,8 +576,8 @@ libnm_core_nm_libnm_core_intern_libnm_libnm_core_intern_la_SOURCES = \ libnm-core/nm-libnm-core-intern/nm-auth-subject.c \ libnm-core/nm-libnm-core-intern/nm-auth-subject.h \ libnm-core/nm-libnm-core-intern/nm-common-macros.h \ - libnm-core/nm-libnm-core-intern/nm-ethtool-utils.c \ - libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h \ + libnm-core/nm-libnm-core-intern/nm-ethtool-base.c \ + libnm-core/nm-libnm-core-intern/nm-ethtool-base.h \ libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c \ libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.h \ $(NULL) @@ -1024,6 +1024,7 @@ libnm_core_lib_h_pub_real = \ libnm-core/nm-core-types.h \ libnm-core/nm-dbus-interface.h \ libnm-core/nm-errors.h \ + libnm-core/nm-ethtool-utils.h \ libnm-core/nm-keyfile.h \ libnm-core/nm-setting-6lowpan.h \ libnm-core/nm-setting-8021x.h \ diff --git a/clients/common/nm-meta-setting-desc.h b/clients/common/nm-meta-setting-desc.h index e278f19435..0c7fdd1da8 100644 --- a/clients/common/nm-meta-setting-desc.h +++ b/clients/common/nm-meta-setting-desc.h @@ -8,7 +8,7 @@ #include "nm-glib-aux/nm-obj.h" #include "nm-meta-setting.h" -#include "nm-libnm-core-intern/nm-ethtool-utils.h" +#include "nm-libnm-core-intern/nm-ethtool-base.h" struct _NMDevice; diff --git a/docs/libnm/Makefile.am b/docs/libnm/Makefile.am index 5328bd6586..c8f095f215 100644 --- a/docs/libnm/Makefile.am +++ b/docs/libnm/Makefile.am @@ -60,7 +60,7 @@ IGNORE_HFILES= \ \ nm-auth-subject.h \ nm-common-macros.h \ - nm-ethtool-utils.h \ + nm-ethtool-base.h \ nm-libnm-core-utils.h \ \ nm-dispatcher-api.h \ diff --git a/docs/libnm/meson.build b/docs/libnm/meson.build index d3a0dd1fdc..2f70eb5c84 100644 --- a/docs/libnm/meson.build +++ b/docs/libnm/meson.build @@ -33,7 +33,7 @@ private_headers = [ 'nm-auth-subject.h', 'nm-common-macros.h', - 'nm-ethtool-utils.h', + 'nm-ethtool-base.h', 'nm-libnm-core-utils.h', 'nm-dispatcher-api.h', diff --git a/libnm-core/meson.build b/libnm-core/meson.build index d121bc0e1f..93c6784039 100644 --- a/libnm-core/meson.build +++ b/libnm-core/meson.build @@ -95,7 +95,7 @@ libnm_libnm_core_intern = static_library( 'nm-libnm-core-intern', sources: files( 'nm-libnm-core-intern/nm-auth-subject.c', - 'nm-libnm-core-intern/nm-ethtool-utils.c', + 'nm-libnm-core-intern/nm-ethtool-base.c', 'nm-libnm-core-intern/nm-libnm-core-utils.c', ) + [libnm_core_enum_sources[1]], dependencies: libnm_core_nm_default_dep, diff --git a/libnm-core/nm-ethtool-utils.h b/libnm-core/nm-ethtool-utils.h new file mode 100644 index 0000000000..e8df3da242 --- /dev/null +++ b/libnm-core/nm-ethtool-utils.h @@ -0,0 +1,100 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2018 Red Hat, Inc. + */ + +#ifndef __NM_ETHTOOL_UTILS_H__ +#define __NM_ETHTOOL_UTILS_H__ + +G_BEGIN_DECLS + +/*****************************************************************************/ + +#define NM_ETHTOOL_OPTNAME_FEATURE_ESP_HW_OFFLOAD "feature-esp-hw-offload" +#define NM_ETHTOOL_OPTNAME_FEATURE_ESP_TX_CSUM_HW_OFFLOAD "feature-esp-tx-csum-hw-offload" +#define NM_ETHTOOL_OPTNAME_FEATURE_FCOE_MTU "feature-fcoe-mtu" +#define NM_ETHTOOL_OPTNAME_FEATURE_GRO "feature-gro" +#define NM_ETHTOOL_OPTNAME_FEATURE_GSO "feature-gso" +#define NM_ETHTOOL_OPTNAME_FEATURE_HIGHDMA "feature-highdma" +#define NM_ETHTOOL_OPTNAME_FEATURE_HW_TC_OFFLOAD "feature-hw-tc-offload" +#define NM_ETHTOOL_OPTNAME_FEATURE_L2_FWD_OFFLOAD "feature-l2-fwd-offload" +#define NM_ETHTOOL_OPTNAME_FEATURE_LOOPBACK "feature-loopback" +#define NM_ETHTOOL_OPTNAME_FEATURE_LRO "feature-lro" +#define NM_ETHTOOL_OPTNAME_FEATURE_NTUPLE "feature-ntuple" +#define NM_ETHTOOL_OPTNAME_FEATURE_RX "feature-rx" +#define NM_ETHTOOL_OPTNAME_FEATURE_RXHASH "feature-rxhash" +#define NM_ETHTOOL_OPTNAME_FEATURE_RXVLAN "feature-rxvlan" +#define NM_ETHTOOL_OPTNAME_FEATURE_RX_ALL "feature-rx-all" +#define NM_ETHTOOL_OPTNAME_FEATURE_RX_FCS "feature-rx-fcs" +#define NM_ETHTOOL_OPTNAME_FEATURE_RX_GRO_HW "feature-rx-gro-hw" +#define NM_ETHTOOL_OPTNAME_FEATURE_RX_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_TX_OFFLOAD "feature-tls-hw-tx-offload" +#define NM_ETHTOOL_OPTNAME_FEATURE_TSO "feature-tso" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX "feature-tx" +#define NM_ETHTOOL_OPTNAME_FEATURE_TXVLAN "feature-txvlan" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_FCOE_CRC "feature-tx-checksum-fcoe-crc" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_IPV4 "feature-tx-checksum-ipv4" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_IPV6 "feature-tx-checksum-ipv6" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_IP_GENERIC "feature-tx-checksum-ip-generic" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_SCTP "feature-tx-checksum-sctp" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_ESP_SEGMENTATION "feature-tx-esp-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_FCOE_SEGMENTATION "feature-tx-fcoe-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_CSUM_SEGMENTATION "feature-tx-gre-csum-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_SEGMENTATION "feature-tx-gre-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_PARTIAL "feature-tx-gso-partial" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_ROBUST "feature-tx-gso-robust" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_IPXIP4_SEGMENTATION "feature-tx-ipxip4-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_IPXIP6_SEGMENTATION "feature-tx-ipxip6-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_NOCACHE_COPY "feature-tx-nocache-copy" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_SCATTER_GATHER "feature-tx-scatter-gather" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_SCATTER_GATHER_FRAGLIST "feature-tx-scatter-gather-fraglist" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_SCTP_SEGMENTATION "feature-tx-sctp-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP6_SEGMENTATION "feature-tx-tcp6-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_ECN_SEGMENTATION "feature-tx-tcp-ecn-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_MANGLEID_SEGMENTATION \ + "feature-tx-tcp-mangleid-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_SEGMENTATION "feature-tx-tcp-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_SEGMENTATION "feature-tx-udp-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION \ + "feature-tx-udp_tnl-csum-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_TNL_SEGMENTATION "feature-tx-udp_tnl-segmentation" +#define NM_ETHTOOL_OPTNAME_FEATURE_TX_VLAN_STAG_HW_INSERT "feature-tx-vlan-stag-hw-insert" + +#define NM_ETHTOOL_OPTNAME_COALESCE_ADAPTIVE_RX "coalesce-adaptive-rx" +#define NM_ETHTOOL_OPTNAME_COALESCE_ADAPTIVE_TX "coalesce-adaptive-tx" +#define NM_ETHTOOL_OPTNAME_COALESCE_PKT_RATE_HIGH "coalesce-pkt-rate-high" +#define NM_ETHTOOL_OPTNAME_COALESCE_PKT_RATE_LOW "coalesce-pkt-rate-low" +#define NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES "coalesce-rx-frames" +#define NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES_HIGH "coalesce-rx-frames-high" +#define NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES_IRQ "coalesce-rx-frames-irq" +#define NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES_LOW "coalesce-rx-frames-low" +#define NM_ETHTOOL_OPTNAME_COALESCE_RX_USECS "coalesce-rx-usecs" +#define NM_ETHTOOL_OPTNAME_COALESCE_RX_USECS_HIGH "coalesce-rx-usecs-high" +#define NM_ETHTOOL_OPTNAME_COALESCE_RX_USECS_IRQ "coalesce-rx-usecs-irq" +#define NM_ETHTOOL_OPTNAME_COALESCE_RX_USECS_LOW "coalesce-rx-usecs-low" +#define NM_ETHTOOL_OPTNAME_COALESCE_SAMPLE_INTERVAL "coalesce-sample-interval" +#define NM_ETHTOOL_OPTNAME_COALESCE_STATS_BLOCK_USECS "coalesce-stats-block-usecs" +#define NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES "coalesce-tx-frames" +#define NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES_HIGH "coalesce-tx-frames-high" +#define NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES_IRQ "coalesce-tx-frames-irq" +#define NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES_LOW "coalesce-tx-frames-low" +#define NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS "coalesce-tx-usecs" +#define NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS_HIGH "coalesce-tx-usecs-high" +#define NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS_IRQ "coalesce-tx-usecs-irq" +#define NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS_LOW "coalesce-tx-usecs-low" + +#define NM_ETHTOOL_OPTNAME_RING_RX "ring-rx" +#define NM_ETHTOOL_OPTNAME_RING_RX_JUMBO "ring-rx-jumbo" +#define NM_ETHTOOL_OPTNAME_RING_RX_MINI "ring-rx-mini" +#define NM_ETHTOOL_OPTNAME_RING_TX "ring-tx" + +/*****************************************************************************/ + +G_END_DECLS + +#endif /* __NM_ETHTOOL_UTILS_H__ */ diff --git a/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.c b/libnm-core/nm-libnm-core-intern/nm-ethtool-base.c similarity index 99% rename from libnm-core/nm-libnm-core-intern/nm-ethtool-utils.c rename to libnm-core/nm-libnm-core-intern/nm-ethtool-base.c index d02cfca111..8c6a456e0f 100644 --- a/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.c +++ b/libnm-core/nm-libnm-core-intern/nm-ethtool-base.c @@ -5,7 +5,7 @@ #include "nm-default.h" -#include "nm-ethtool-utils.h" +#include "nm-ethtool-base.h" #include "nm-setting-ethtool.h" diff --git a/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h b/libnm-core/nm-libnm-core-intern/nm-ethtool-base.h similarity index 89% rename from libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h rename to libnm-core/nm-libnm-core-intern/nm-ethtool-base.h index af99cd14aa..be90ce756e 100644 --- a/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h +++ b/libnm-core/nm-libnm-core-intern/nm-ethtool-base.h @@ -3,8 +3,8 @@ * Copyright (C) 2018 Red Hat, Inc. */ -#ifndef __NM_ETHTOOL_UTILS_H__ -#define __NM_ETHTOOL_UTILS_H__ +#ifndef __NM_ETHTOOL_BASE_H__ +#define __NM_ETHTOOL_BASE_H__ #include "nm-base/nm-base.h" @@ -34,4 +34,4 @@ nm_ethtool_id_get_by_name(const char *optname) /****************************************************************************/ -#endif /* __NM_ETHTOOL_UTILS_H__ */ +#endif /* __NM_ETHTOOL_BASE_H__ */ diff --git a/libnm-core/nm-setting-ethtool.c b/libnm-core/nm-setting-ethtool.c index f1d6a8786c..ad6e7dd22b 100644 --- a/libnm-core/nm-setting-ethtool.c +++ b/libnm-core/nm-setting-ethtool.c @@ -8,7 +8,7 @@ #include "nm-setting-ethtool.h" #include "nm-setting-private.h" -#include "nm-libnm-core-intern/nm-ethtool-utils.h" +#include "nm-libnm-core-intern/nm-ethtool-base.h" /*****************************************************************************/ diff --git a/libnm-core/nm-setting-ethtool.h b/libnm-core/nm-setting-ethtool.h index 29b12569ac..0d51b804db 100644 --- a/libnm-core/nm-setting-ethtool.h +++ b/libnm-core/nm-setting-ethtool.h @@ -11,94 +11,10 @@ #endif #include "nm-setting.h" +#include "nm-ethtool-utils.h" G_BEGIN_DECLS -/*****************************************************************************/ - -#define NM_ETHTOOL_OPTNAME_FEATURE_ESP_HW_OFFLOAD "feature-esp-hw-offload" -#define NM_ETHTOOL_OPTNAME_FEATURE_ESP_TX_CSUM_HW_OFFLOAD "feature-esp-tx-csum-hw-offload" -#define NM_ETHTOOL_OPTNAME_FEATURE_FCOE_MTU "feature-fcoe-mtu" -#define NM_ETHTOOL_OPTNAME_FEATURE_GRO "feature-gro" -#define NM_ETHTOOL_OPTNAME_FEATURE_GSO "feature-gso" -#define NM_ETHTOOL_OPTNAME_FEATURE_HIGHDMA "feature-highdma" -#define NM_ETHTOOL_OPTNAME_FEATURE_HW_TC_OFFLOAD "feature-hw-tc-offload" -#define NM_ETHTOOL_OPTNAME_FEATURE_L2_FWD_OFFLOAD "feature-l2-fwd-offload" -#define NM_ETHTOOL_OPTNAME_FEATURE_LOOPBACK "feature-loopback" -#define NM_ETHTOOL_OPTNAME_FEATURE_LRO "feature-lro" -#define NM_ETHTOOL_OPTNAME_FEATURE_NTUPLE "feature-ntuple" -#define NM_ETHTOOL_OPTNAME_FEATURE_RX "feature-rx" -#define NM_ETHTOOL_OPTNAME_FEATURE_RXHASH "feature-rxhash" -#define NM_ETHTOOL_OPTNAME_FEATURE_RXVLAN "feature-rxvlan" -#define NM_ETHTOOL_OPTNAME_FEATURE_RX_ALL "feature-rx-all" -#define NM_ETHTOOL_OPTNAME_FEATURE_RX_FCS "feature-rx-fcs" -#define NM_ETHTOOL_OPTNAME_FEATURE_RX_GRO_HW "feature-rx-gro-hw" -#define NM_ETHTOOL_OPTNAME_FEATURE_RX_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_TX_OFFLOAD "feature-tls-hw-tx-offload" -#define NM_ETHTOOL_OPTNAME_FEATURE_TSO "feature-tso" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX "feature-tx" -#define NM_ETHTOOL_OPTNAME_FEATURE_TXVLAN "feature-txvlan" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_FCOE_CRC "feature-tx-checksum-fcoe-crc" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_IPV4 "feature-tx-checksum-ipv4" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_IPV6 "feature-tx-checksum-ipv6" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_IP_GENERIC "feature-tx-checksum-ip-generic" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_CHECKSUM_SCTP "feature-tx-checksum-sctp" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_ESP_SEGMENTATION "feature-tx-esp-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_FCOE_SEGMENTATION "feature-tx-fcoe-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_CSUM_SEGMENTATION "feature-tx-gre-csum-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GRE_SEGMENTATION "feature-tx-gre-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_PARTIAL "feature-tx-gso-partial" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_GSO_ROBUST "feature-tx-gso-robust" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_IPXIP4_SEGMENTATION "feature-tx-ipxip4-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_IPXIP6_SEGMENTATION "feature-tx-ipxip6-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_NOCACHE_COPY "feature-tx-nocache-copy" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_SCATTER_GATHER "feature-tx-scatter-gather" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_SCATTER_GATHER_FRAGLIST "feature-tx-scatter-gather-fraglist" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_SCTP_SEGMENTATION "feature-tx-sctp-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP6_SEGMENTATION "feature-tx-tcp6-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_ECN_SEGMENTATION "feature-tx-tcp-ecn-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_MANGLEID_SEGMENTATION \ - "feature-tx-tcp-mangleid-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_TCP_SEGMENTATION "feature-tx-tcp-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_SEGMENTATION "feature-tx-udp-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION \ - "feature-tx-udp_tnl-csum-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_UDP_TNL_SEGMENTATION "feature-tx-udp_tnl-segmentation" -#define NM_ETHTOOL_OPTNAME_FEATURE_TX_VLAN_STAG_HW_INSERT "feature-tx-vlan-stag-hw-insert" - -#define NM_ETHTOOL_OPTNAME_COALESCE_ADAPTIVE_RX "coalesce-adaptive-rx" -#define NM_ETHTOOL_OPTNAME_COALESCE_ADAPTIVE_TX "coalesce-adaptive-tx" -#define NM_ETHTOOL_OPTNAME_COALESCE_PKT_RATE_HIGH "coalesce-pkt-rate-high" -#define NM_ETHTOOL_OPTNAME_COALESCE_PKT_RATE_LOW "coalesce-pkt-rate-low" -#define NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES "coalesce-rx-frames" -#define NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES_HIGH "coalesce-rx-frames-high" -#define NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES_IRQ "coalesce-rx-frames-irq" -#define NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES_LOW "coalesce-rx-frames-low" -#define NM_ETHTOOL_OPTNAME_COALESCE_RX_USECS "coalesce-rx-usecs" -#define NM_ETHTOOL_OPTNAME_COALESCE_RX_USECS_HIGH "coalesce-rx-usecs-high" -#define NM_ETHTOOL_OPTNAME_COALESCE_RX_USECS_IRQ "coalesce-rx-usecs-irq" -#define NM_ETHTOOL_OPTNAME_COALESCE_RX_USECS_LOW "coalesce-rx-usecs-low" -#define NM_ETHTOOL_OPTNAME_COALESCE_SAMPLE_INTERVAL "coalesce-sample-interval" -#define NM_ETHTOOL_OPTNAME_COALESCE_STATS_BLOCK_USECS "coalesce-stats-block-usecs" -#define NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES "coalesce-tx-frames" -#define NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES_HIGH "coalesce-tx-frames-high" -#define NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES_IRQ "coalesce-tx-frames-irq" -#define NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES_LOW "coalesce-tx-frames-low" -#define NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS "coalesce-tx-usecs" -#define NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS_HIGH "coalesce-tx-usecs-high" -#define NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS_IRQ "coalesce-tx-usecs-irq" -#define NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS_LOW "coalesce-tx-usecs-low" - -#define NM_ETHTOOL_OPTNAME_RING_RX "ring-rx" -#define NM_ETHTOOL_OPTNAME_RING_RX_JUMBO "ring-rx-jumbo" -#define NM_ETHTOOL_OPTNAME_RING_RX_MINI "ring-rx-mini" -#define NM_ETHTOOL_OPTNAME_RING_TX "ring-tx" - NM_AVAILABLE_IN_1_20 gboolean nm_ethtool_optname_is_feature(const char *optname); diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c index 2210f9f1d9..7c955394a6 100644 --- a/libnm-core/tests/test-general.c +++ b/libnm-core/tests/test-general.c @@ -59,7 +59,7 @@ #include "nm-simple-connection.h" #include "nm-keyfile/nm-keyfile-internal.h" #include "nm-glib-aux/nm-dedup-multi.h" -#include "nm-libnm-core-intern/nm-ethtool-utils.h" +#include "nm-libnm-core-intern/nm-ethtool-base.h" #include "test-general-enums.h" diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 355f1047a2..cd7ff45815 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -28,7 +28,7 @@ #include "nm-glib-aux/nm-random-utils.h" #include "systemd/nm-sd-utils-shared.h" -#include "nm-libnm-core-intern/nm-ethtool-utils.h" +#include "nm-libnm-core-intern/nm-ethtool-base.h" #include "nm-libnm-core-intern/nm-common-macros.h" #include "nm-device-private.h" #include "nm-l3cfg.h" diff --git a/src/platform/nm-platform-utils.c b/src/platform/nm-platform-utils.c index 2301da125a..3bdd7b0e8d 100644 --- a/src/platform/nm-platform-utils.c +++ b/src/platform/nm-platform-utils.c @@ -18,7 +18,7 @@ #include #include -#include "nm-libnm-core-intern/nm-ethtool-utils.h" +#include "nm-libnm-core-intern/nm-ethtool-base.h" /*****************************************************************************/ diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c index c50a66f7a8..81dab703d0 100644 --- a/src/platform/tests/test-link.c +++ b/src/platform/tests/test-link.c @@ -12,7 +12,7 @@ #include #include "nm-glib-aux/nm-io-utils.h" -#include "nm-libnm-core-intern/nm-ethtool-utils.h" +#include "nm-libnm-core-intern/nm-ethtool-base.h" #include "platform/nmp-object.h" #include "nm-platform/nmp-netns.h" #include "platform/nm-platform-utils.h" diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c index 8e0bf1d68d..64b3ac5bff 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c @@ -40,7 +40,7 @@ #include "nm-setting-generic.h" #include "nm-core-internal.h" #include "nm-utils.h" -#include "nm-libnm-core-intern/nm-ethtool-utils.h" +#include "nm-libnm-core-intern/nm-ethtool-base.h" #include "platform/nm-platform.h" #include "NetworkManagerUtils.h" diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h index 0f0568118a..e1155c1d24 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h @@ -7,7 +7,7 @@ #define _UTILS_H_ #include "nm-connection.h" -#include "nm-libnm-core-intern/nm-ethtool-utils.h" +#include "nm-libnm-core-intern/nm-ethtool-base.h" #include "shvar.h" diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c index a5f844e64c..1204503e3f 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c @@ -35,7 +35,7 @@ #include "nm-core-internal.h" #include "NetworkManagerUtils.h" #include "nm-meta-setting.h" -#include "nm-libnm-core-intern/nm-ethtool-utils.h" +#include "nm-libnm-core-intern/nm-ethtool-base.h" #include "nms-ifcfg-rh-common.h" #include "nms-ifcfg-rh-reader.h" diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index 5b6923e4de..f753d3d50b 100644 --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -37,7 +37,7 @@ #include "nm-setting-vlan.h" #include "nm-setting-dcb.h" #include "nm-core-internal.h" -#include "nm-libnm-core-intern/nm-ethtool-utils.h" +#include "nm-libnm-core-intern/nm-ethtool-base.h" #include "NetworkManagerUtils.h" From 874bd8994e237f7354256133fc0051573f95fa07 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Sat, 9 Jan 2021 12:00:33 +0100 Subject: [PATCH 18/23] libnm,shared: move nm-ethtool helper to "libnm-base" We want to use this by "shared/nm-platform", which should have no dependency on "libnm-core". Move "libnm-core/nm-ethtool-utils.h" to "libnm/nm-ethtool-utils.h" so that it is only used by libnm. This file contains the defines for the option names. Also, symlink "libnm/nm-ethtool-utils.h" as "shared/nm-base/nm-ethtool-utils-base.h". We want to use the same defines also internally. Since they are both public API (must be in libnm) and should be in "shared/nm-base", this is the way. --- Makefile.am | 42 +++++++++++++++---- clients/common/nm-meta-setting-desc.h | 2 +- libnm-core/meson.build | 16 +++++-- libnm-core/nm-setting-ethtool.c | 2 +- libnm-core/nm-setting-ethtool.h | 1 - libnm-core/tests/meson.build | 13 +++--- libnm-core/tests/test-general.c | 3 +- libnm-core/tests/test-setting.c | 1 + libnm/NetworkManager.h | 1 + libnm/meson.build | 1 + {libnm-core => libnm}/nm-ethtool-utils.h | 0 shared/meson.build | 15 +++++++ .../nm-base}/nm-ethtool-base.c | 2 +- .../nm-base}/nm-ethtool-base.h | 0 shared/nm-base/nm-ethtool-utils-base.h | 1 + src/devices/nm-device.c | 2 +- src/platform/nm-platform-utils.c | 2 +- src/platform/tests/test-link.c | 2 +- .../plugins/ifcfg-rh/nms-ifcfg-rh-reader.c | 2 +- .../plugins/ifcfg-rh/nms-ifcfg-rh-utils.h | 2 +- .../plugins/ifcfg-rh/nms-ifcfg-rh-writer.c | 2 +- .../plugins/ifcfg-rh/tests/test-ifcfg-rh.c | 3 +- 22 files changed, 85 insertions(+), 30 deletions(-) rename {libnm-core => libnm}/nm-ethtool-utils.h (100%) rename {libnm-core/nm-libnm-core-intern => shared/nm-base}/nm-ethtool-base.c (99%) rename {libnm-core/nm-libnm-core-intern => shared/nm-base}/nm-ethtool-base.h (100%) create mode 120000 shared/nm-base/nm-ethtool-utils-base.h diff --git a/Makefile.am b/Makefile.am index b6f84ee29f..019439041d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -464,6 +464,30 @@ shared_nm_udev_aux_libnm_udev_aux_la_LIBADD = \ ############################################################################### +noinst_LTLIBRARIES += shared/nm-base/libnm-base.la + +shared_nm_base_libnm_base_la_CPPFLAGS = \ + $(shared_nm_glib_aux_cppflags) \ + $(NULL) + +shared_nm_base_libnm_base_la_SOURCES = \ + shared/nm-base/nm-base.h \ + shared/nm-base/nm-ethtool-base.c \ + shared/nm-base/nm-ethtool-base.h \ + shared/nm-base/nm-ethtool-utils-base.h \ + $(NULL) + +shared_nm_base_libnm_base_la_LDFLAGS = \ + $(CODE_COVERAGE_LDFLAGS) \ + $(SANITIZER_LIB_LDFLAGS) \ + $(NULL) + +shared_nm_base_libnm_base_la_LIBADD = \ + $(GLIB_LIBS) \ + $(NULL) + +############################################################################### + noinst_LTLIBRARIES += shared/nm-log-core/libnm-log-core.la shared_nm_log_core_libnm_log_core_la_CPPFLAGS = \ @@ -553,10 +577,6 @@ EXTRA_DIST += \ ############################################################################### -EXTRA_DIST += shared/nm-base/nm-base.h - -############################################################################### - noinst_LTLIBRARIES += libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la libnm_core_nm_libnm_core_intern_libnm_libnm_core_intern_la_CPPFLAGS = \ @@ -576,8 +596,6 @@ libnm_core_nm_libnm_core_intern_libnm_libnm_core_intern_la_SOURCES = \ libnm-core/nm-libnm-core-intern/nm-auth-subject.c \ libnm-core/nm-libnm-core-intern/nm-auth-subject.h \ libnm-core/nm-libnm-core-intern/nm-common-macros.h \ - libnm-core/nm-libnm-core-intern/nm-ethtool-base.c \ - libnm-core/nm-libnm-core-intern/nm-ethtool-base.h \ libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c \ libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.h \ $(NULL) @@ -1024,7 +1042,6 @@ libnm_core_lib_h_pub_real = \ libnm-core/nm-core-types.h \ libnm-core/nm-dbus-interface.h \ libnm-core/nm-errors.h \ - libnm-core/nm-ethtool-utils.h \ libnm-core/nm-keyfile.h \ libnm-core/nm-setting-6lowpan.h \ libnm-core/nm-setting-8021x.h \ @@ -1363,6 +1380,7 @@ libnm_core_tests_ldadd = \ 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 \ shared/systemd/libnm-systemd-shared.la \ shared/systemd/libnm-systemd-logging-stub.la \ shared/nm-glib-aux/libnm-glib-aux.la \ @@ -1473,6 +1491,7 @@ libnm_lib_h_pub_real = \ libnm/nm-device-wpan.h \ libnm/nm-device.h \ libnm/nm-dhcp-config.h \ + libnm/nm-ethtool-utils.h \ libnm/nm-ip-config.h \ libnm/nm-object.h \ libnm/nm-remote-connection.h \ @@ -1594,6 +1613,7 @@ libnm_liblibnm_la_LIBADD = \ 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 \ shared/nm-glib-aux/libnm-glib-aux.la \ shared/systemd/libnm-systemd-shared.la \ @@ -2479,6 +2499,7 @@ src_libNetworkManager_la_LIBADD = \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-platform/libnm-platform.la \ + shared/nm-base/libnm-base.la \ shared/nm-log-core/libnm-log-core.la \ shared/nm-udev-aux/libnm-udev-aux.la \ shared/nm-glib-aux/libnm-glib-aux.la \ @@ -2592,6 +2613,7 @@ src_nm_iface_helper_LDADD = \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-platform/libnm-platform.la \ + shared/nm-base/libnm-base.la \ shared/nm-log-core/libnm-log-core.la \ shared/nm-udev-aux/libnm-udev-aux.la \ shared/nm-glib-aux/libnm-glib-aux.la \ @@ -2646,6 +2668,7 @@ src_initrd_nm_initrd_generator_LDADD = \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ shared/nm-platform/libnm-platform.la \ + shared/nm-base/libnm-base.la \ shared/nm-log-core/libnm-log-core.la \ shared/nm-udev-aux/libnm-udev-aux.la \ shared/nm-glib-aux/libnm-glib-aux.la \ @@ -4646,6 +4669,7 @@ clients_common_tests_test_clients_common_LDADD = \ clients/common/libnmc-base.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 \ @@ -4737,6 +4761,7 @@ clients_cli_nmcli_LDADD = \ clients/common/libnmc-base.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 \ @@ -4785,6 +4810,7 @@ clients_cli_generate_docs_nm_settings_nmcli_LDADD = \ 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 \ libnm/libnm.la \ shared/nm-glib-aux/libnm-glib-aux.la \ shared/nm-std-aux/libnm-std-aux.la \ @@ -4975,6 +5001,7 @@ clients_tui_nmtui_LDADD = \ 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 \ @@ -5046,6 +5073,7 @@ clients_cloud_setup_nm_cloud_setup_LDADD = \ 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 \ diff --git a/clients/common/nm-meta-setting-desc.h b/clients/common/nm-meta-setting-desc.h index 0c7fdd1da8..288880a31d 100644 --- a/clients/common/nm-meta-setting-desc.h +++ b/clients/common/nm-meta-setting-desc.h @@ -8,7 +8,7 @@ #include "nm-glib-aux/nm-obj.h" #include "nm-meta-setting.h" -#include "nm-libnm-core-intern/nm-ethtool-base.h" +#include "nm-base/nm-ethtool-base.h" struct _NMDevice; diff --git a/libnm-core/meson.build b/libnm-core/meson.build index 93c6784039..843ff67efb 100644 --- a/libnm-core/meson.build +++ b/libnm-core/meson.build @@ -95,17 +95,22 @@ libnm_libnm_core_intern = static_library( 'nm-libnm-core-intern', sources: files( 'nm-libnm-core-intern/nm-auth-subject.c', - 'nm-libnm-core-intern/nm-ethtool-base.c', 'nm-libnm-core-intern/nm-libnm-core-utils.c', ) + [libnm_core_enum_sources[1]], - dependencies: libnm_core_nm_default_dep, + dependencies: [ + libnm_core_nm_default_dep, + libnm_base_dep, + ], c_args: common_c_flags, ) libnm_libnm_core_intern_dep = declare_dependency( sources: [libnm_core_enum_sources[1], nm_version_macro_header], include_directories: [libnm_core_inc, shared_inc], - dependencies: libnm_utils_base_dep, + dependencies: [ + libnm_utils_base_dep, + libnm_base_dep, + ], link_with: libnm_libnm_core_intern, ) @@ -232,7 +237,10 @@ libnm_libnm_core_aux = static_library( ) + [libnm_core_enum_sources[1]], dependencies: libnm_utils_base_dep, c_args: c_flags, - link_with: libnm_libnm_core_intern, + link_with: [ + libnm_libnm_core_intern, + libnm_base, + ], ) libnm_libnm_core_aux_dep = declare_dependency( diff --git a/libnm-core/nm-setting-ethtool.c b/libnm-core/nm-setting-ethtool.c index ad6e7dd22b..4a7fb21cd3 100644 --- a/libnm-core/nm-setting-ethtool.c +++ b/libnm-core/nm-setting-ethtool.c @@ -8,7 +8,7 @@ #include "nm-setting-ethtool.h" #include "nm-setting-private.h" -#include "nm-libnm-core-intern/nm-ethtool-base.h" +#include "nm-base/nm-ethtool-base.h" /*****************************************************************************/ diff --git a/libnm-core/nm-setting-ethtool.h b/libnm-core/nm-setting-ethtool.h index 0d51b804db..d2310b408e 100644 --- a/libnm-core/nm-setting-ethtool.h +++ b/libnm-core/nm-setting-ethtool.h @@ -11,7 +11,6 @@ #endif #include "nm-setting.h" -#include "nm-ethtool-utils.h" G_BEGIN_DECLS diff --git a/libnm-core/tests/meson.build b/libnm-core/tests/meson.build index 8773baf7ad..0f6a4f5022 100644 --- a/libnm-core/tests/meson.build +++ b/libnm-core/tests/meson.build @@ -18,12 +18,6 @@ enum_sources = gnome.mkenums_simple( body_prefix: '#include "nm-default.h"', ) -deps = [ - libnm_keyfile_dep, - libnm_core_dep, - libnm_core_nm_default_dep, -] - c_flags = [ '-DNETWORKMANAGER_COMPILATION_TEST', '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE', @@ -45,7 +39,12 @@ foreach test_unit: test_units exe = executable( 'libnm-core-' + test_unit, [test_unit + '.c'] + enum_sources, - dependencies: deps, + dependencies: [ + libnm_keyfile_dep, + libnm_core_dep, + libnm_core_nm_default_dep, + libnm_base_dep, + ], c_args: c_flags, link_with: libnm_systemd_logging_stub, ) diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c index 7c955394a6..00f6febbbb 100644 --- a/libnm-core/tests/test-general.c +++ b/libnm-core/tests/test-general.c @@ -59,7 +59,8 @@ #include "nm-simple-connection.h" #include "nm-keyfile/nm-keyfile-internal.h" #include "nm-glib-aux/nm-dedup-multi.h" -#include "nm-libnm-core-intern/nm-ethtool-base.h" +#include "nm-base/nm-ethtool-base.h" +#include "nm-base/nm-ethtool-utils-base.h" #include "test-general-enums.h" diff --git a/libnm-core/tests/test-setting.c b/libnm-core/tests/test-setting.c index 1ab2b7931c..b17ba15d51 100644 --- a/libnm-core/tests/test-setting.c +++ b/libnm-core/tests/test-setting.c @@ -9,6 +9,7 @@ #include #include "nm-glib-aux/nm-json-aux.h" +#include "nm-base/nm-ethtool-utils-base.h" #include "nm-core-internal.h" #include "nm-utils.h" #include "nm-utils-private.h" diff --git a/libnm/NetworkManager.h b/libnm/NetworkManager.h index b0b4cf3b8b..f9cc856555 100644 --- a/libnm/NetworkManager.h +++ b/libnm/NetworkManager.h @@ -45,6 +45,7 @@ #include "nm-device.h" #include "nm-dhcp-config.h" #include "nm-enum-types.h" +#include "nm-ethtool-utils.h" #include "nm-ip-config.h" #include "nm-keyfile.h" #include "nm-object.h" diff --git a/libnm/meson.build b/libnm/meson.build index e4179c3033..27f51df684 100644 --- a/libnm/meson.build +++ b/libnm/meson.build @@ -51,6 +51,7 @@ libnm_headers = files( 'nm-device-wpan.h', 'nm-device.h', 'nm-dhcp-config.h', + 'nm-ethtool-utils.h', 'nm-ip-config.h', 'nm-object.h', 'nm-remote-connection.h', diff --git a/libnm-core/nm-ethtool-utils.h b/libnm/nm-ethtool-utils.h similarity index 100% rename from libnm-core/nm-ethtool-utils.h rename to libnm/nm-ethtool-utils.h diff --git a/shared/meson.build b/shared/meson.build index b19535f078..5d6c21707a 100644 --- a/shared/meson.build +++ b/shared/meson.build @@ -182,6 +182,21 @@ libnm_udev_aux_dep = declare_dependency( link_with: libnm_udev_aux, ) +libnm_base = static_library( + 'nm-base', + sources: files( + 'nm-base/nm-ethtool-base.c', + ), + dependencies: libnm_utils_base_dep, + c_args: c_flags, +) + +libnm_base_dep = declare_dependency( + include_directories: shared_inc, + dependencies: libnm_utils_base_dep, + link_with: libnm_base, +) + libnm_log_core = static_library( 'nm-log-core', sources: 'nm-log-core/nm-logging.c', diff --git a/libnm-core/nm-libnm-core-intern/nm-ethtool-base.c b/shared/nm-base/nm-ethtool-base.c similarity index 99% rename from libnm-core/nm-libnm-core-intern/nm-ethtool-base.c rename to shared/nm-base/nm-ethtool-base.c index 8c6a456e0f..9934aa06c1 100644 --- a/libnm-core/nm-libnm-core-intern/nm-ethtool-base.c +++ b/shared/nm-base/nm-ethtool-base.c @@ -7,7 +7,7 @@ #include "nm-ethtool-base.h" -#include "nm-setting-ethtool.h" +#include "nm-ethtool-utils-base.h" /*****************************************************************************/ diff --git a/libnm-core/nm-libnm-core-intern/nm-ethtool-base.h b/shared/nm-base/nm-ethtool-base.h similarity index 100% rename from libnm-core/nm-libnm-core-intern/nm-ethtool-base.h rename to shared/nm-base/nm-ethtool-base.h diff --git a/shared/nm-base/nm-ethtool-utils-base.h b/shared/nm-base/nm-ethtool-utils-base.h new file mode 120000 index 0000000000..ee2598578b --- /dev/null +++ b/shared/nm-base/nm-ethtool-utils-base.h @@ -0,0 +1 @@ +../../libnm/nm-ethtool-utils.h \ No newline at end of file diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index cd7ff45815..a6bf0a37a5 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -28,7 +28,7 @@ #include "nm-glib-aux/nm-random-utils.h" #include "systemd/nm-sd-utils-shared.h" -#include "nm-libnm-core-intern/nm-ethtool-base.h" +#include "nm-base/nm-ethtool-base.h" #include "nm-libnm-core-intern/nm-common-macros.h" #include "nm-device-private.h" #include "nm-l3cfg.h" diff --git a/src/platform/nm-platform-utils.c b/src/platform/nm-platform-utils.c index 3bdd7b0e8d..4f0ae089a4 100644 --- a/src/platform/nm-platform-utils.c +++ b/src/platform/nm-platform-utils.c @@ -18,7 +18,7 @@ #include #include -#include "nm-libnm-core-intern/nm-ethtool-base.h" +#include "nm-base/nm-ethtool-base.h" /*****************************************************************************/ diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c index 81dab703d0..4970b5a475 100644 --- a/src/platform/tests/test-link.c +++ b/src/platform/tests/test-link.c @@ -12,7 +12,7 @@ #include #include "nm-glib-aux/nm-io-utils.h" -#include "nm-libnm-core-intern/nm-ethtool-base.h" +#include "nm-base/nm-ethtool-base.h" #include "platform/nmp-object.h" #include "nm-platform/nmp-netns.h" #include "platform/nm-platform-utils.h" diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c index 64b3ac5bff..bce47efc8e 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c @@ -40,7 +40,7 @@ #include "nm-setting-generic.h" #include "nm-core-internal.h" #include "nm-utils.h" -#include "nm-libnm-core-intern/nm-ethtool-base.h" +#include "nm-base/nm-ethtool-base.h" #include "platform/nm-platform.h" #include "NetworkManagerUtils.h" diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h index e1155c1d24..36ec922514 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h @@ -7,7 +7,7 @@ #define _UTILS_H_ #include "nm-connection.h" -#include "nm-libnm-core-intern/nm-ethtool-base.h" +#include "nm-base/nm-ethtool-base.h" #include "shvar.h" diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c index 1204503e3f..a268c58c58 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c @@ -35,7 +35,7 @@ #include "nm-core-internal.h" #include "NetworkManagerUtils.h" #include "nm-meta-setting.h" -#include "nm-libnm-core-intern/nm-ethtool-base.h" +#include "nm-base/nm-ethtool-base.h" #include "nms-ifcfg-rh-common.h" #include "nms-ifcfg-rh-reader.h" diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index f753d3d50b..71f2d3e8c9 100644 --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -37,7 +37,8 @@ #include "nm-setting-vlan.h" #include "nm-setting-dcb.h" #include "nm-core-internal.h" -#include "nm-libnm-core-intern/nm-ethtool-base.h" +#include "nm-base/nm-ethtool-base.h" +#include "nm-base/nm-ethtool-utils-base.h" #include "NetworkManagerUtils.h" From d2464c260fbb7ce8c2b45485b2e080cbcec172e5 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Sun, 10 Jan 2021 11:33:17 +0100 Subject: [PATCH 19/23] core: move NMIPConfigSource from "src/nm-types.h" to "shared/nm-base" --- shared/nm-base/nm-base.h | 37 +++++++++++++++++++++++++++++++++++++ src/nm-types.h | 35 ----------------------------------- 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/shared/nm-base/nm-base.h b/shared/nm-base/nm-base.h index f0a5d345e6..1db21aebc1 100644 --- a/shared/nm-base/nm-base.h +++ b/shared/nm-base/nm-base.h @@ -162,6 +162,43 @@ typedef enum { _NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS = 0x8001, } _NMSettingWiredWakeOnLan; +/*****************************************************************************/ + +typedef enum { + /* In priority order; higher number == higher priority */ + + NM_IP_CONFIG_SOURCE_UNKNOWN = 0, + + /* for routes, the source is mapped to the uint8 field rtm_protocol. + * Reserve the range [1,0x100] for native RTPROT values. */ + + NM_IP_CONFIG_SOURCE_RTPROT_UNSPEC = 1 + 0, + NM_IP_CONFIG_SOURCE_RTPROT_REDIRECT = 1 + 1, + NM_IP_CONFIG_SOURCE_RTPROT_KERNEL = 1 + 2, + NM_IP_CONFIG_SOURCE_RTPROT_BOOT = 1 + 3, + NM_IP_CONFIG_SOURCE_RTPROT_STATIC = 1 + 4, + NM_IP_CONFIG_SOURCE_RTPROT_RA = 1 + 9, + NM_IP_CONFIG_SOURCE_RTPROT_DHCP = 1 + 16, + _NM_IP_CONFIG_SOURCE_RTPROT_LAST = 1 + 0xFF, + + NM_IP_CONFIG_SOURCE_KERNEL, + NM_IP_CONFIG_SOURCE_SHARED, + NM_IP_CONFIG_SOURCE_IP4LL, + NM_IP_CONFIG_SOURCE_IP6LL, + NM_IP_CONFIG_SOURCE_PPP, + NM_IP_CONFIG_SOURCE_WWAN, + NM_IP_CONFIG_SOURCE_VPN, + NM_IP_CONFIG_SOURCE_DHCP, + NM_IP_CONFIG_SOURCE_NDISC, + NM_IP_CONFIG_SOURCE_USER, +} NMIPConfigSource; + +static inline gboolean +NM_IS_IP_CONFIG_SOURCE_RTPROT(NMIPConfigSource source) +{ + return source > NM_IP_CONFIG_SOURCE_UNKNOWN && source <= _NM_IP_CONFIG_SOURCE_RTPROT_LAST; +} + /****************************************************************************/ #endif /* __NM_LIBNM_BASE_H__ */ diff --git a/src/nm-types.h b/src/nm-types.h index b10559543a..ab2314594d 100644 --- a/src/nm-types.h +++ b/src/nm-types.h @@ -77,41 +77,6 @@ typedef enum { NM_ACTIVATION_REASON_USER_REQUEST, } NMActivationReason; -typedef enum { - /* In priority order; higher number == higher priority */ - - NM_IP_CONFIG_SOURCE_UNKNOWN = 0, - - /* for routes, the source is mapped to the uint8 field rtm_protocol. - * Reserve the range [1,0x100] for native RTPROT values. */ - - NM_IP_CONFIG_SOURCE_RTPROT_UNSPEC = 1 + 0, - NM_IP_CONFIG_SOURCE_RTPROT_REDIRECT = 1 + 1, - NM_IP_CONFIG_SOURCE_RTPROT_KERNEL = 1 + 2, - NM_IP_CONFIG_SOURCE_RTPROT_BOOT = 1 + 3, - NM_IP_CONFIG_SOURCE_RTPROT_STATIC = 1 + 4, - NM_IP_CONFIG_SOURCE_RTPROT_RA = 1 + 9, - NM_IP_CONFIG_SOURCE_RTPROT_DHCP = 1 + 16, - _NM_IP_CONFIG_SOURCE_RTPROT_LAST = 1 + 0xFF, - - NM_IP_CONFIG_SOURCE_KERNEL, - NM_IP_CONFIG_SOURCE_SHARED, - NM_IP_CONFIG_SOURCE_IP4LL, - NM_IP_CONFIG_SOURCE_IP6LL, - NM_IP_CONFIG_SOURCE_PPP, - NM_IP_CONFIG_SOURCE_WWAN, - NM_IP_CONFIG_SOURCE_VPN, - NM_IP_CONFIG_SOURCE_DHCP, - NM_IP_CONFIG_SOURCE_NDISC, - NM_IP_CONFIG_SOURCE_USER, -} NMIPConfigSource; - -static inline gboolean -NM_IS_IP_CONFIG_SOURCE_RTPROT(NMIPConfigSource source) -{ - return source > NM_IP_CONFIG_SOURCE_UNKNOWN && source <= _NM_IP_CONFIG_SOURCE_RTPROT_LAST; -} - /* platform */ typedef struct _NMPlatform NMPlatform; typedef struct _NMPlatformObject NMPlatformObject; From 0dc5ea241253eb13bd7402fa37e338552f02380b Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Sun, 10 Jan 2021 11:44:25 +0100 Subject: [PATCH 20/23] shared: add NMOptionBool as alternative to NMTernary NMTernary is part of libnm's public API. It thus cannot be used by code without libnm/libnm-core dependency. Add another enum with the same purpose. The name "NMTernary" is already taken, and we should not use some macro trickery to use (effectively) different types under the same name. Another possible name would be "NMTern", but for no strong reasons we choose NMOptionBool. The naming reminds of rust's std::option::Option. --- libnm-core/nm-core-internal.h | 18 ++++++++++++++++++ shared/nm-glib-aux/nm-shared-utils.h | 12 ++++++++++++ 2 files changed, 30 insertions(+) diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h index 01b3a55db6..afdd2f2fc1 100644 --- a/libnm-core/nm-core-internal.h +++ b/libnm-core/nm-core-internal.h @@ -230,6 +230,24 @@ _NM_SETTING_WIRED_WAKE_ON_LAN_CAST(NMSettingWiredWakeOnLan v) /*****************************************************************************/ +static inline NMTernary +NM_TERNARY_FROM_OPTION_BOOL(NMOptionBool v) +{ + nm_assert(NM_IN_SET(v, NM_OPTION_BOOL_DEFAULT, NM_OPTION_BOOL_TRUE, NM_OPTION_BOOL_FALSE)); + + return (NMTernary) v; +} + +static inline NMOptionBool +NM_TERNARY_TO_OPTION_BOOL(NMTernary v) +{ + nm_assert(NM_IN_SET(v, NM_TERNARY_DEFAULT, NM_TERNARY_TRUE, NM_TERNARY_FALSE)); + + return (NMOptionBool) v; +} + +/*****************************************************************************/ + typedef enum { /*< skip >*/ NM_SETTING_PARSE_FLAGS_NONE = 0, NM_SETTING_PARSE_FLAGS_STRICT = 1LL << 0, diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h index 669c9fbcb4..8f0d50c9f5 100644 --- a/shared/nm-glib-aux/nm-shared-utils.h +++ b/shared/nm-glib-aux/nm-shared-utils.h @@ -8,6 +8,18 @@ #include +/*****************************************************************************/ + +/* An optional boolean (like NMTernary, with identical numerical + * enum values). Note that this enum type is _nm_packed! */ +typedef enum _nm_packed { + NM_OPTION_BOOL_DEFAULT = -1, + NM_OPTION_BOOL_FALSE = 0, + NM_OPTION_BOOL_TRUE = 1, +} NMOptionBool; + +/*****************************************************************************/ + static inline gboolean nm_is_ascii(char ch) { From c0bc296a5133b583f313c12e3c553de6cee6f853 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Sun, 10 Jan 2021 16:51:37 +0100 Subject: [PATCH 21/23] platform: use NMOptionBool instead of NMTernary NMTernary is a dependency for libnm-core. Avoid it. --- libnm-core/nm-core-internal.h | 2 +- libnm-core/nm-setting-ethtool.c | 6 +++--- src/devices/nm-device.c | 23 ++++++++++++----------- src/platform/nm-linux-platform.c | 7 ++++--- src/platform/nm-platform-utils.c | 16 ++++++++-------- src/platform/nm-platform-utils.h | 4 ++-- src/platform/nm-platform.c | 8 ++++---- src/platform/nm-platform.h | 14 +++++++------- src/platform/tests/test-common.c | 8 ++++---- src/platform/tests/test-link.c | 19 +++++++++++-------- 10 files changed, 56 insertions(+), 51 deletions(-) diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h index afdd2f2fc1..bda7f89d14 100644 --- a/libnm-core/nm-core-internal.h +++ b/libnm-core/nm-core-internal.h @@ -360,7 +360,7 @@ gboolean _nm_setting_option_clear(NMSetting *setting, const char *optname); guint nm_setting_ethtool_init_features( NMSettingEthtool *setting, - NMTernary * requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */); + NMOptionBool * requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */); /*****************************************************************************/ diff --git a/libnm-core/nm-setting-ethtool.c b/libnm-core/nm-setting-ethtool.c index 4a7fb21cd3..7d3f4d96f9 100644 --- a/libnm-core/nm-setting-ethtool.c +++ b/libnm-core/nm-setting-ethtool.c @@ -195,7 +195,7 @@ nm_setting_ethtool_clear_features(NMSettingEthtool *setting) guint nm_setting_ethtool_init_features( NMSettingEthtool *setting, - NMTernary * requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */) + NMOptionBool * requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */) { GHashTable * hash; GHashTableIter iter; @@ -208,7 +208,7 @@ nm_setting_ethtool_init_features( nm_assert(requested); for (i = 0; i < _NM_ETHTOOL_ID_FEATURE_NUM; i++) - requested[i] = NM_TERNARY_DEFAULT; + requested[i] = NM_OPTION_BOOL_DEFAULT; hash = _nm_setting_option_hash(NM_SETTING(setting), FALSE); if (!hash) @@ -224,7 +224,7 @@ nm_setting_ethtool_init_features( continue; requested[_NM_ETHTOOL_ID_FEATURE_AS_IDX(ethtool_id)] = - g_variant_get_boolean(variant) ? NM_TERNARY_TRUE : NM_TERNARY_FALSE; + g_variant_get_boolean(variant) ? NM_OPTION_BOOL_TRUE : NM_OPTION_BOOL_FALSE; n_req++; } diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index a6bf0a37a5..53c42dbedf 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -134,7 +134,7 @@ typedef struct { NMPlatformAsyncCallback callback; gpointer callback_data; guint num_vfs; - NMTernary autoprobe; + NMOptionBool autoprobe; } SriovOp; typedef void (*AcdCallback)(NMDevice *, NMIP4Config **, gboolean); @@ -205,7 +205,7 @@ struct _NMDeviceConnectivityHandle { typedef struct { int ifindex; NMEthtoolFeatureStates *features; - NMTernary requested[_NM_ETHTOOL_ID_FEATURE_NUM]; + NMOptionBool requested[_NM_ETHTOOL_ID_FEATURE_NUM]; NMEthtoolCoalesceState *coalesce; NMEthtoolRingState * ring; } EthtoolState; @@ -5829,7 +5829,7 @@ sriov_op_queue_op(NMDevice *self, SriovOp *op) static void sriov_op_queue(NMDevice * self, guint num_vfs, - NMTernary autoprobe, + NMOptionBool autoprobe, NMPlatformAsyncCallback callback, gpointer callback_data) { @@ -5878,7 +5878,7 @@ device_init_static_sriov_num_vfs(NMDevice *self) NULL); num_vfs = _nm_utils_ascii_str_to_int64(value, 10, 0, G_MAXINT32, -1); if (num_vfs >= 0) - sriov_op_queue(self, num_vfs, NM_TERNARY_DEFAULT, NULL, NULL); + sriov_op_queue(self, num_vfs, NM_OPTION_BOOL_DEFAULT, NULL, NULL); } } @@ -8055,7 +8055,8 @@ activate_stage1_device_prepare(NMDevice *self) gs_free_error GError *error = NULL; NMSriovVF * vf; NMTernary autoprobe; - guint i, num; + guint num; + guint i; autoprobe = nm_setting_sriov_get_autoprobe_drivers(s_sriov); if (autoprobe == NM_TERNARY_DEFAULT) { @@ -8063,9 +8064,9 @@ activate_stage1_device_prepare(NMDevice *self) NM_CONFIG_GET_DATA, NM_CON_DEFAULT("sriov.autoprobe-drivers"), self, - NM_TERNARY_FALSE, - NM_TERNARY_TRUE, - NM_TERNARY_TRUE); + NM_OPTION_BOOL_FALSE, + NM_OPTION_BOOL_TRUE, + NM_OPTION_BOOL_TRUE); } num = nm_setting_sriov_get_num_vfs(s_sriov); @@ -8092,7 +8093,7 @@ activate_stage1_device_prepare(NMDevice *self) */ sriov_op_queue(self, nm_setting_sriov_get_total_vfs(s_sriov), - autoprobe, + NM_TERNARY_TO_OPTION_BOOL(autoprobe), sriov_params_cb, nm_utils_user_data_pack(self, g_steal_pointer(&plat_vfs))); priv->stage1_sriov_state = NM_DEVICE_STAGE_STATE_PENDING; @@ -16521,7 +16522,7 @@ _set_state_full(NMDevice *self, NMDeviceState state, NMDeviceStateReason reason, priv->sriov_reset_pending++; sriov_op_queue(self, 0, - NM_TERNARY_TRUE, + NM_OPTION_BOOL_TRUE, sriov_reset_on_deactivate_cb, nm_utils_user_data_pack(self, GINT_TO_POINTER(reason))); } @@ -16573,7 +16574,7 @@ _set_state_full(NMDevice *self, NMDeviceState state, NMDeviceStateReason reason, if (priv->ifindex > 0 && (s_sriov = nm_device_get_applied_setting(self, NM_TYPE_SETTING_SRIOV))) { priv->sriov_reset_pending++; - sriov_op_queue(self, 0, NM_TERNARY_TRUE, sriov_reset_on_failure_cb, self); + sriov_op_queue(self, 0, NM_OPTION_BOOL_TRUE, sriov_reset_on_failure_cb, self); break; } /* Schedule the transition to DISCONNECTED. The device can't transition diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c index 6c04f6c121..e21c31e0a6 100644 --- a/src/platform/nm-linux-platform.c +++ b/src/platform/nm-linux-platform.c @@ -7653,7 +7653,7 @@ static void link_set_sriov_params_async(NMPlatform * platform, int ifindex, guint num_vfs, - NMTernary autoprobe, + NMOptionBool autoprobe, NMPlatformAsyncCallback callback, gpointer data, GCancellable * cancellable) @@ -7726,10 +7726,11 @@ link_set_sriov_params_async(NMPlatform * platform, } if (current_num == num_vfs - && (autoprobe == NM_TERNARY_DEFAULT || current_autoprobe == autoprobe)) + && (autoprobe == NM_OPTION_BOOL_DEFAULT || current_autoprobe == autoprobe)) goto out_idle; - if (NM_IN_SET(autoprobe, NM_TERNARY_TRUE, NM_TERNARY_FALSE) && current_autoprobe != autoprobe + if (NM_IN_SET(autoprobe, NM_OPTION_BOOL_TRUE, NM_OPTION_BOOL_FALSE) + && current_autoprobe != autoprobe && !nm_platform_sysctl_set( NM_PLATFORM_GET, NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname, "device/sriov_drivers_autoprobe"), diff --git a/src/platform/nm-platform-utils.c b/src/platform/nm-platform-utils.c index 4f0ae089a4..0947ef4c81 100644 --- a/src/platform/nm-platform-utils.c +++ b/src/platform/nm-platform-utils.c @@ -693,8 +693,8 @@ gboolean nmp_utils_ethtool_set_features( int ifindex, const NMEthtoolFeatureStates *features, - const NMTernary *requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */, - gboolean do_set /* or reset */) + const NMOptionBool *requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */, + gboolean do_set /* or reset */) { nm_auto_socket_handle SocketHandle shandle = SOCKET_HANDLE_INIT(ifindex); gs_free struct ethtool_sfeatures * sfeatures_free = NULL; @@ -704,7 +704,7 @@ nmp_utils_ethtool_set_features( guint i, j; struct { const NMEthtoolFeatureState *f_state; - NMTernary requested; + NMOptionBool requested; } set_states[N_ETHTOOL_KERNEL_FEATURES]; guint set_states_n = 0; gboolean success = TRUE; @@ -718,7 +718,7 @@ nmp_utils_ethtool_set_features( for (i = 0; i < _NM_ETHTOOL_ID_FEATURE_NUM; i++) { const NMEthtoolFeatureState *const *states_indexed; - if (requested[i] == NM_TERNARY_DEFAULT) + if (requested[i] == NM_OPTION_BOOL_DEFAULT) continue; if (!(states_indexed = features->states_indexed[i])) { @@ -749,7 +749,7 @@ nmp_utils_ethtool_set_features( do_set ? "set" : "reset", nm_ethtool_data[i + _NM_ETHTOOL_ID_FEATURE_FIRST]->optname, s->info->kernel_names[s->idx_kernel_name], - ONOFF(do_set ? requested[i] == NM_TERNARY_TRUE : s->active), + ONOFF(do_set ? requested[i] == NM_OPTION_BOOL_TRUE : s->active), _ethtool_feature_state_to_string(sbuf, sizeof(sbuf), s, @@ -764,14 +764,14 @@ nmp_utils_ethtool_set_features( do_set ? "set" : "reset", nm_ethtool_data[i + _NM_ETHTOOL_ID_FEATURE_FIRST]->optname, s->info->kernel_names[s->idx_kernel_name], - ONOFF(do_set ? requested[i] == NM_TERNARY_TRUE : s->active), + ONOFF(do_set ? requested[i] == NM_OPTION_BOOL_TRUE : s->active), _ethtool_feature_state_to_string(sbuf, sizeof(sbuf), s, do_set ? " currently:" : " before:")); if (do_set && (!s->available || s->never_changed) - && (s->active != (requested[i] == NM_TERNARY_TRUE))) { + && (s->active != (requested[i] == NM_OPTION_BOOL_TRUE))) { /* we request to change a flag which kernel reported as fixed. * While the ethtool operation will silently succeed, mark the request * as failure. */ @@ -811,7 +811,7 @@ nmp_utils_ethtool_set_features( sfeatures->features[i_block].valid |= i_flag; if (do_set) - is_requested = (set_states[i].requested == NM_TERNARY_TRUE); + is_requested = (set_states[i].requested == NM_OPTION_BOOL_TRUE); else is_requested = s->active; diff --git a/src/platform/nm-platform-utils.h b/src/platform/nm-platform-utils.h index 38f8a00729..d74723eb9f 100644 --- a/src/platform/nm-platform-utils.h +++ b/src/platform/nm-platform-utils.h @@ -40,8 +40,8 @@ NMEthtoolFeatureStates *nmp_utils_ethtool_get_features(int ifindex); gboolean nmp_utils_ethtool_set_features( int ifindex, const NMEthtoolFeatureStates *features, - const NMTernary *requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */, - gboolean do_set /* or reset */); + const NMOptionBool *requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */, + gboolean do_set /* or reset */); gboolean nmp_utils_ethtool_get_coalesce(int ifindex, NMEthtoolCoalesceState *coalesce); diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index 44c6ee4797..bf2ee5d19c 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -1842,7 +1842,7 @@ nm_platform_link_supports_sriov(NMPlatform *self, int ifindex) * @ifindex: the index of the interface to change * @num_vfs: the number of VFs to create * @autoprobe: the new autoprobe-drivers value (pass - * %NM_TERNARY_DEFAULT to keep current value) + * %NM_OPTION_BOOL_DEFAULT to keep current value) * @callback: called when the operation finishes * @callback_data: data passed to @callback * @cancellable: cancellable to abort the operation @@ -1855,7 +1855,7 @@ void nm_platform_link_set_sriov_params_async(NMPlatform * self, int ifindex, guint num_vfs, - NMTernary autoprobe, + NMOptionBool autoprobe, NMPlatformAsyncCallback callback, gpointer callback_data, GCancellable * cancellable) @@ -3339,8 +3339,8 @@ nm_platform_ethtool_set_features( NMPlatform * self, int ifindex, const NMEthtoolFeatureStates *features, - const NMTernary *requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */, - gboolean do_set /* or reset */) + const NMOptionBool *requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */, + gboolean do_set /* or reset */) { _CHECK_SELF_NETNS(self, klass, netns, FALSE); diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h index a785144155..d400c5680a 100644 --- a/src/platform/nm-platform.h +++ b/src/platform/nm-platform.h @@ -1035,7 +1035,7 @@ _nm_platform_kernel_support_detected(NMPlatformKernelSupportType type) return G_LIKELY(g_atomic_int_get(&_nm_platform_kernel_support_state[type]) != 0); } -static inline NMTernary +static inline NMOptionBool nm_platform_kernel_support_get_full(NMPlatformKernelSupportType type, gboolean init_if_not_set) { int v; @@ -1045,7 +1045,7 @@ nm_platform_kernel_support_get_full(NMPlatformKernelSupportType type, gboolean i v = g_atomic_int_get(&_nm_platform_kernel_support_state[type]); if (G_UNLIKELY(v == 0)) { if (!init_if_not_set) - return NM_TERNARY_DEFAULT; + return NM_OPTION_BOOL_DEFAULT; v = _nm_platform_kernel_support_init(type, 0); } return (v >= 0); @@ -1054,7 +1054,7 @@ nm_platform_kernel_support_get_full(NMPlatformKernelSupportType type, gboolean i static inline gboolean nm_platform_kernel_support_get(NMPlatformKernelSupportType type) { - return nm_platform_kernel_support_get_full(type, TRUE) != NM_TERNARY_FALSE; + return nm_platform_kernel_support_get_full(type, TRUE) != NM_OPTION_BOOL_FALSE; } /*****************************************************************************/ @@ -1118,7 +1118,7 @@ typedef struct { void (*link_set_sriov_params_async)(NMPlatform * self, int ifindex, guint num_vfs, - int autoprobe, + NMOptionBool autoprobe, NMPlatformAsyncCallback callback, gpointer callback_data, GCancellable * cancellable); @@ -1853,7 +1853,7 @@ gboolean nm_platform_link_set_name(NMPlatform *self, int ifindex, const char *na void nm_platform_link_set_sriov_params_async(NMPlatform * self, int ifindex, guint num_vfs, - int autoprobe, + NMOptionBool autoprobe, NMPlatformAsyncCallback callback, gpointer callback_data, GCancellable * cancellable); @@ -2342,8 +2342,8 @@ gboolean nm_platform_ethtool_set_features( NMPlatform * self, int ifindex, const NMEthtoolFeatureStates *features, - const NMTernary *requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */, - gboolean do_set /* or reset */); + const NMOptionBool *requested /* indexed by NMEthtoolID - _NM_ETHTOOL_ID_FEATURE_FIRST */, + gboolean do_set /* or reset */); gboolean nm_platform_ethtool_get_link_coalesce(NMPlatform * self, int ifindex, diff --git a/src/platform/tests/test-common.c b/src/platform/tests/test-common.c index 4e08b282b0..529100b9f2 100644 --- a/src/platform/tests/test-common.c +++ b/src/platform/tests/test-common.c @@ -2274,18 +2274,18 @@ gboolean nmtstp_kernel_support_get(NMPlatformKernelSupportType type) { const NMPlatformLink *pllink; - NMTernary v; + NMOptionBool v; v = nm_platform_kernel_support_get_full(type, FALSE); - if (v != NM_TERNARY_DEFAULT) - return v != NM_TERNARY_FALSE; + if (v != NM_OPTION_BOOL_DEFAULT) + return v != NM_OPTION_BOOL_FALSE; switch (type) { case NM_PLATFORM_KERNEL_SUPPORT_TYPE_IFLA_BR_VLAN_STATS_ENABLED: pllink = nmtstp_link_bridge_add(NULL, -1, "br-test-11", &nm_platform_lnk_bridge_default); nmtstp_link_delete(NULL, -1, pllink->ifindex, NULL, TRUE); v = nm_platform_kernel_support_get_full(type, FALSE); - g_assert(v != NM_TERNARY_DEFAULT); + g_assert(v != NM_OPTION_BOOL_DEFAULT); return v; default: g_assert_not_reached(); diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c index 4970b5a475..6dc9f3e453 100644 --- a/src/platform/tests/test-link.c +++ b/src/platform/tests/test-link.c @@ -3677,25 +3677,28 @@ test_ethtool_features_get(void) for (i_run = 0; i_run < 5; i_run++) { NMEthtoolFeatureStates *features; - NMTernary * requested; + NMOptionBool * requested; gboolean do_set = TRUE; - requested = g_new(NMTernary, _NM_ETHTOOL_ID_FEATURE_NUM); + requested = g_new(NMOptionBool, _NM_ETHTOOL_ID_FEATURE_NUM); for (i = 0; i < _NM_ETHTOOL_ID_FEATURE_NUM; i++) - requested[i] = NM_TERNARY_DEFAULT; + requested[i] = NM_OPTION_BOOL_DEFAULT; g_ptr_array_add(gfree_keeper, requested); if (i_run == 0) { - requested[_NM_ETHTOOL_ID_FEATURE_AS_IDX(NM_ETHTOOL_ID_FEATURE_RX)] = NM_TERNARY_FALSE; - requested[_NM_ETHTOOL_ID_FEATURE_AS_IDX(NM_ETHTOOL_ID_FEATURE_TSO)] = NM_TERNARY_FALSE; + requested[_NM_ETHTOOL_ID_FEATURE_AS_IDX(NM_ETHTOOL_ID_FEATURE_RX)] = + NM_OPTION_BOOL_FALSE; + requested[_NM_ETHTOOL_ID_FEATURE_AS_IDX(NM_ETHTOOL_ID_FEATURE_TSO)] = + NM_OPTION_BOOL_FALSE; requested[_NM_ETHTOOL_ID_FEATURE_AS_IDX(NM_ETHTOOL_ID_FEATURE_TX_TCP6_SEGMENTATION)] = - NM_TERNARY_FALSE; + NM_OPTION_BOOL_FALSE; } else if (i_run == 1) do_set = FALSE; else if (i_run == 2) { - requested[_NM_ETHTOOL_ID_FEATURE_AS_IDX(NM_ETHTOOL_ID_FEATURE_TSO)] = NM_TERNARY_FALSE; + requested[_NM_ETHTOOL_ID_FEATURE_AS_IDX(NM_ETHTOOL_ID_FEATURE_TSO)] = + NM_OPTION_BOOL_FALSE; requested[_NM_ETHTOOL_ID_FEATURE_AS_IDX(NM_ETHTOOL_ID_FEATURE_TX_TCP6_SEGMENTATION)] = - NM_TERNARY_TRUE; + NM_OPTION_BOOL_TRUE; } else if (i_run == 3) do_set = FALSE; From 9901aeef2c911eca64072857ee360ce6c7ad60fd Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Sun, 10 Jan 2021 09:55:06 +0100 Subject: [PATCH 22/23] platform: move "nm-platform-utils.[hc]" to "shared/nm-platform" library By now it has no further dependencies on libnm-core or NetworkManager core. Make it part of "shared/nm-platform" library. --- Makefile.am | 4 ++-- shared/meson.build | 1 + {src/platform => shared/nm-platform}/nm-platform-utils.c | 1 + {src/platform => shared/nm-platform}/nm-platform-utils.h | 0 src/devices/nm-device-ethernet.c | 2 +- src/devices/nm-device.c | 2 +- src/meson.build | 1 - src/nm-iface-helper.c | 2 +- src/nm-ip4-config.c | 2 +- src/nm-ip6-config.c | 2 +- src/nm-l3-config-data.c | 2 +- src/platform/nm-fake-platform.c | 2 +- src/platform/nm-linux-platform.c | 2 +- src/platform/nm-platform.c | 2 +- src/platform/nmp-object.c | 2 +- src/platform/tests/test-link.c | 2 +- src/platform/tests/test-platform-general.c | 2 +- src/platform/tests/test-route.c | 2 +- src/platform/tests/test-tc.c | 2 +- src/platform/wifi/nm-wifi-utils-nl80211.c | 2 +- src/platform/wifi/nm-wifi-utils-wext.c | 2 +- src/platform/wifi/nm-wifi-utils.c | 2 +- src/platform/wpan/nm-wpan-utils.c | 2 +- 23 files changed, 22 insertions(+), 21 deletions(-) rename {src/platform => shared/nm-platform}/nm-platform-utils.c (99%) rename {src/platform => shared/nm-platform}/nm-platform-utils.h (100%) diff --git a/Makefile.am b/Makefile.am index 019439041d..3ff90639ec 100644 --- a/Makefile.am +++ b/Makefile.am @@ -527,6 +527,8 @@ shared_nm_platform_libnm_platform_la_CPPFLAGS = \ shared_nm_platform_libnm_platform_la_SOURCES = \ shared/nm-platform/nm-netlink.c \ shared/nm-platform/nm-netlink.h \ + shared/nm-platform/nm-platform-utils.c \ + shared/nm-platform/nm-platform-utils.h \ shared/nm-platform/nmp-base.h \ shared/nm-platform/nmp-netns.c \ shared/nm-platform/nmp-netns.h \ @@ -2235,8 +2237,6 @@ src_libNetworkManagerBase_la_SOURCES = \ \ src/platform/nmp-object.c \ src/platform/nmp-object.h \ - src/platform/nm-platform-utils.c \ - src/platform/nm-platform-utils.h \ src/platform/nm-platform.c \ src/platform/nm-platform.h \ src/platform/nm-platform-private.h \ diff --git a/shared/meson.build b/shared/meson.build index 5d6c21707a..58c29b7c76 100644 --- a/shared/meson.build +++ b/shared/meson.build @@ -222,6 +222,7 @@ libnm_platform = static_library( 'nm-platform', sources: [ 'nm-platform/nm-netlink.c', + 'nm-platform/nm-platform-utils.c', 'nm-platform/nmp-netns.c', ], dependencies: [ diff --git a/src/platform/nm-platform-utils.c b/shared/nm-platform/nm-platform-utils.c similarity index 99% rename from src/platform/nm-platform-utils.c rename to shared/nm-platform/nm-platform-utils.c index 0947ef4c81..59e4a24491 100644 --- a/src/platform/nm-platform-utils.c +++ b/shared/nm-platform/nm-platform-utils.c @@ -19,6 +19,7 @@ #include #include "nm-base/nm-ethtool-base.h" +#include "nm-log-core/nm-logging.h" /*****************************************************************************/ diff --git a/src/platform/nm-platform-utils.h b/shared/nm-platform/nm-platform-utils.h similarity index 100% rename from src/platform/nm-platform-utils.h rename to shared/nm-platform/nm-platform-utils.h diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c index 05f5fe1e8d..f67baead46 100644 --- a/src/devices/nm-device-ethernet.c +++ b/src/devices/nm-device-ethernet.c @@ -25,7 +25,7 @@ #include "ppp/nm-ppp-manager-call.h" #include "ppp/nm-ppp-status.h" #include "platform/nm-platform.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "nm-dcb.h" #include "settings/nm-settings-connection.h" #include "nm-config.h" diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 53c42dbedf..8316107123 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -36,7 +36,7 @@ #include "NetworkManagerUtils.h" #include "nm-manager.h" #include "platform/nm-platform.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "platform/nmp-object.h" #include "platform/nmp-rules-manager.h" #include "ndisc/nm-ndisc.h" diff --git a/src/meson.build b/src/meson.build index 8cb5089cad..8c0c141c29 100644 --- a/src/meson.build +++ b/src/meson.build @@ -37,7 +37,6 @@ sources = files( 'platform/wpan/nm-wpan-utils.c', 'platform/nm-linux-platform.c', 'platform/nm-platform.c', - 'platform/nm-platform-utils.c', 'platform/nmp-object.c', 'platform/nmp-rules-manager.c', 'main-utils.c', diff --git a/src/nm-iface-helper.c b/src/nm-iface-helper.c index 8fc30adb8b..42483cf756 100644 --- a/src/nm-iface-helper.c +++ b/src/nm-iface-helper.c @@ -21,7 +21,7 @@ #include "main-utils.h" #include "NetworkManagerUtils.h" #include "platform/nm-linux-platform.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "dhcp/nm-dhcp-manager.h" #include "ndisc/nm-ndisc.h" #include "ndisc/nm-lndp-ndisc.h" diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c index b881871c5a..8014549f4d 100644 --- a/src/nm-ip4-config.c +++ b/src/nm-ip4-config.c @@ -17,7 +17,7 @@ #include "nm-utils.h" #include "platform/nmp-object.h" #include "platform/nm-platform.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "NetworkManagerUtils.h" #include "nm-core-internal.h" #include "nm-dbus-object.h" diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c index 0be98e5fe6..eeb69946a4 100644 --- a/src/nm-ip6-config.c +++ b/src/nm-ip6-config.c @@ -18,7 +18,7 @@ #include "nm-utils.h" #include "platform/nmp-object.h" #include "platform/nm-platform.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "nm-core-internal.h" #include "NetworkManagerUtils.h" #include "nm-ip4-config.h" diff --git a/src/nm-l3-config-data.c b/src/nm-l3-config-data.c index daff7312db..0f689d409b 100644 --- a/src/nm-l3-config-data.c +++ b/src/nm-l3-config-data.c @@ -11,7 +11,7 @@ #include "nm-glib-aux/nm-enum-utils.h" #include "nm-core-internal.h" #include "platform/nm-platform.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "platform/nmp-object.h" #include "NetworkManagerUtils.h" diff --git a/src/platform/nm-fake-platform.c b/src/platform/nm-fake-platform.c index 21f1e92465..fbd3e3fbc7 100644 --- a/src/platform/nm-fake-platform.c +++ b/src/platform/nm-fake-platform.c @@ -16,7 +16,7 @@ #include "nm-utils.h" #include "nm-core-utils.h" -#include "nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "nm-platform-private.h" #include "nmp-object.h" diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c index e21c31e0a6..3d992704eb 100644 --- a/src/platform/nm-linux-platform.c +++ b/src/platform/nm-linux-platform.c @@ -44,7 +44,7 @@ #include "nm-core-utils.h" #include "nmp-object.h" #include "nm-platform/nmp-netns.h" -#include "nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "nm-platform-private.h" #include "wifi/nm-wifi-utils.h" #include "wifi/nm-wifi-utils-wext.h" diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index bf2ee5d19c..6411abbacc 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -29,7 +29,7 @@ #include "nm-glib-aux/nm-secret-utils.h" #include "nm-core-utils.h" -#include "nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "nm-platform-private.h" #include "nmp-object.h" #include "nm-platform/nmp-netns.h" diff --git a/src/platform/nmp-object.c b/src/platform/nmp-object.c index 16edbd1216..9520013ad7 100644 --- a/src/platform/nmp-object.c +++ b/src/platform/nmp-object.c @@ -16,7 +16,7 @@ #include "nm-glib-aux/nm-secret-utils.h" #include "nm-core-utils.h" -#include "nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "wifi/nm-wifi-utils.h" #include "wpan/nm-wpan-utils.h" diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c index 6dc9f3e453..895b89a09b 100644 --- a/src/platform/tests/test-link.c +++ b/src/platform/tests/test-link.c @@ -15,7 +15,7 @@ #include "nm-base/nm-ethtool-base.h" #include "platform/nmp-object.h" #include "nm-platform/nmp-netns.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "test-common.h" #include "nm-test-utils-core.h" diff --git a/src/platform/tests/test-platform-general.c b/src/platform/tests/test-platform-general.c index ee99348077..00671cfba0 100644 --- a/src/platform/tests/test-platform-general.c +++ b/src/platform/tests/test-platform-general.c @@ -7,7 +7,7 @@ #include -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "platform/nm-linux-platform.h" #include "nm-test-utils-core.h" diff --git a/src/platform/tests/test-route.c b/src/platform/tests/test-route.c index f814d8c78b..0aa94ecd2d 100644 --- a/src/platform/tests/test-route.c +++ b/src/platform/tests/test-route.c @@ -9,7 +9,7 @@ #include #include "nm-core-utils.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "platform/nmp-rules-manager.h" #include "test-common.h" diff --git a/src/platform/tests/test-tc.c b/src/platform/tests/test-tc.c index d178398eb8..c005b069f0 100644 --- a/src/platform/tests/test-tc.c +++ b/src/platform/tests/test-tc.c @@ -7,7 +7,7 @@ #include "nm-test-utils-core.h" #include "platform/nmp-object.h" #include "nm-platform/nmp-netns.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "test-common.h" static NMPObject * diff --git a/src/platform/wifi/nm-wifi-utils-nl80211.c b/src/platform/wifi/nm-wifi-utils-nl80211.c index 0bca7acc46..aae6af1ec8 100644 --- a/src/platform/wifi/nm-wifi-utils-nl80211.c +++ b/src/platform/wifi/nm-wifi-utils-nl80211.c @@ -18,7 +18,7 @@ #include "nm-platform/nm-netlink.h" #include "nm-wifi-utils-private.h" #include "platform/nm-platform.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "nm-utils.h" #define _NMLOG_PREFIX_NAME "wifi-nl80211" diff --git a/src/platform/wifi/nm-wifi-utils-wext.c b/src/platform/wifi/nm-wifi-utils-wext.c index 4d024174c8..2b070b5abe 100644 --- a/src/platform/wifi/nm-wifi-utils-wext.c +++ b/src/platform/wifi/nm-wifi-utils-wext.c @@ -23,7 +23,7 @@ #include "nm-wifi-utils-private.h" #include "nm-utils.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #include "nm-core-internal.h" #include "nm-core-utils.h" diff --git a/src/platform/wifi/nm-wifi-utils.c b/src/platform/wifi/nm-wifi-utils.c index a9d5f2484c..66d6a05a75 100644 --- a/src/platform/wifi/nm-wifi-utils.c +++ b/src/platform/wifi/nm-wifi-utils.c @@ -19,7 +19,7 @@ #endif #include "nm-core-utils.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" G_DEFINE_ABSTRACT_TYPE(NMWifiUtils, nm_wifi_utils, G_TYPE_OBJECT) diff --git a/src/platform/wpan/nm-wpan-utils.c b/src/platform/wpan/nm-wpan-utils.c index d7c93b19b6..96897ae04d 100644 --- a/src/platform/wpan/nm-wpan-utils.c +++ b/src/platform/wpan/nm-wpan-utils.c @@ -11,7 +11,7 @@ #include "nm-platform/nm-netlink.h" #include "platform/linux/nl802154.h" -#include "platform/nm-platform-utils.h" +#include "nm-platform/nm-platform-utils.h" #define _NMLOG_PREFIX_NAME "wpan-nl802154" #define _NMLOG(level, domain, ...) \ From a288de4b3d8fc753b1b350d5f620b3a1426aaaf6 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 15 Jan 2021 10:14:34 +0100 Subject: [PATCH 23/23] shared: add "shared/README.md" --- Makefile.am | 1 + shared/README.md | 108 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 shared/README.md diff --git a/Makefile.am b/Makefile.am index 3ff90639ec..0735882dec 100644 --- a/Makefile.am +++ b/Makefile.am @@ -729,6 +729,7 @@ EXTRA_DIST += libnm/nm-libnm-aux/README.md EXTRA_DIST += \ shared/nm-glib-aux/tests/meson.build \ + shared/README.md \ $(NULL) ############################################################################### diff --git a/shared/README.md b/shared/README.md new file mode 100644 index 0000000000..ed950fce39 --- /dev/null +++ b/shared/README.md @@ -0,0 +1,108 @@ +The "shared/" Directory +======================= + +For NetworkManager we place helper/utility code under "shared/" +in static libraries. The idea is to avoid code duplication but also +provide high quality helper functions that simplify the higher layers. +In NetworkManager there are complicated parts, for example "src/nm-manager.c" +is huge. On the other hand, this helper code should be simple and easy +to understand, so that we can build more complex code on top of it. + +As we statically link them into our binaries, they are all inherently +internal API, that means they cannot be part of libnm's (libnm-core's) public API. +It also means that their API/ABI is not stable. + +We don't care these libraries to be minimal and contain only symbols that are +used by all users. Instead, we expect the linker to throw away unused symbols. +We achieve this by having a symbol versioning file to hide internal symbols +(which gives the linker a possibility to remove them if they are unused) and +compiling with LTO or `"-Wl,--gc-sections"`. Let the tool solve this and not +manual organization. + +Hence these libraries (and their content) are structured this way to satisfy +the following questions: + +1) which dependencies (libraries) do they have? That determines which + other libraries can use it. For example: + + - "shared/nm-std-aux" and "shared/nm-glib-aux" both provide general + purpose helpers, the difference is that the former has no dependency + on glib2 library. Both these libraries are a basic dependency for + many other parts of the code. + + - "shared/nm-udev-aux" has a dependency on libudev, it thus cannot + be in "shared/nm-glib-aux". + + - client code also has a glib2 dependency. That means it can link with + "shared/nm-std-aux" and "shared/nm-glib-aux", but must not link + with "shared/nm-udev-aux" (as it has no direct udev dependenct -- + although clients get it indirectly because libnm already requires + it). + +2) what is their overall purpose? As said, we rely on the linker to + prune unused symbols. But in a few cases we avoid to merge different + code in the same library. For example: + + - "shared/nm-glib-aux" and "shared/nm-base" both only have a + glib2 dependency. Hence, they could be merged. However we + don't do that because "shared/nm-base" is more about NetworkManager + specific code, while "shared/nm-glib-aux" is about general + purpose helpers. + +3) some of these libraries are forked from an upstream. They are kept + separate so that we can re-import future upstream versions. + +Detail +====== + +- `shared/c-list` +- `shared/c-rbtree` +- `shared/c-siphash` +- `shared/c-stdoux` +- `shared/n-acd` +- `shared/n-dhcp4` + + These are forked from upstream and imported with git-subtree. They + in general only have a libc dependency (or dependencies between each + other). + +- `shared/nm-std-aux` + + This contains helper code with only a libc dependency. + Almost all C code depends on this library. + +- `shared/nm-glib-aux` + + Like "shared/nm-std-aux" but also has a glib2 dependency. + Almost all glib2 code depends on this library. + +- `shared/nm-udev/aux` + + Like "shared/nm-glib-aux" but also has a libudev dependency. It + has code related to libudev. + +- `shared/systemd` + + These are forked from upstream systemd and imported with a script. + Under "shared/systemd/src" we try to keep the sources as close to + the original as possible. There is also some adapter code to make + it useable for us. It has a dependency on "shared/nm-glib-aux" + and will need a logging implementation for "shared/nm-glib-aux/nm-logging-fwd.h". + +- `shared/nm-base` + + Depends on "shared/nm-glib-aux" and glib2 but it provides helper code + that more about NetworkManager specifc things. + +- `shared/nm-log-core` + + This is the logging implementation as used by NetworkManager core ("src/"). + It is also a dependency for "shared/nm-platform". + +- `shared/nm-platform` + + Platform implementation. It depends on "shared/nm-log-core", "shared/nm-base" + and "shared/nm-glib-aux". + +- Other than that, there are still a few unorganized files/directories here. + These should be cleaned up.