summaryrefslogtreecommitdiff
path: root/shared/meson.build
Commit message (Collapse)AuthorAgeFilesLines
* shared: add NMRefStringThomas Haller2019-09-211-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I'd like to refactor libnm's caching. Note that cached D-Bus objects have repeated strings all over the place. For example every object will have a set of D-Bus interfaces (strings) and properties (strings) and an object path (which is referenced by other objects). We can save a lot of redundant strings by deduplicating/interning them. Also, by interning them, we can compare them using pointer equality. Add a NMRefString implementation for this. Maybe an alternative name would be NMInternedString or NMDedupString, because this string gets always interned. There is no way to create a NMRefString that is not interned. Still, NMRefString name sounds better. It is ref-counted after all. Notes: - glib has GQuark and g_intern_string(). However, such strings cannot be unrefered and are leaked indefinitely. It is thus unsuited for anything but a fixed set of well-known strings. - glib 2.58 adds GRefString, but we cannot use that because we currently still use glib 2.40. There are some differences: - GRefString is just a typedef to char. That means, the glib API exposes GRefString like regular character strings. NMRefString intentionally does that not. This makes it slightly less convenient to pass it to API that expects "const char *". But it makes it clear to the reader, that an instance is in fact a NMRefString, which means it indicates that the string is interned and can be referenced without additional copy. - GRefString can be optionally interned. That means you can only use pointer equality for comparing values if you know that the GRefString was created with g_ref_string_new_intern(). So, GRefString looks like a "const char *" pointer and even if you know it's a GRefString, you might not know whether it is interned. NMRefString is always interned, and you can always compare it using pointer equality. - In the past I already proposed a different implementation for a ref-string. That made different choices. For example NMRefString then was a typedef to "const char *", it did not support interning but deduplication (without a global cache), ref/unref was not thread safe (but then there was no global cache so that two threads could still use the API independently). The point is, there are various choices to make. GRefString, the previous NMRefString implementation and the one here, all have pros and cons. I think for the purpose where I intend NMRefString (dedup and efficient comparison), it is a preferable implementation. Ah, and of course NMRefString is an immutable string, which is a nice property.
* build: fix meson warning about path separator in targetBeniamino Galvani2019-08-051-21/+3
| | | | | | | | | | Fix the following: WARNING: Target "nm-utils/tests/test-shared-general" has a path separator in its name. This is not supported, it can cause unexpected failures and will become a hard error in the future. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/217
* systemd: merge branch systemd into masterThomas Haller2019-07-261-0/+1
|
* systemd: add dns-domain utils to systemd static libraryBeniamino Galvani2019-07-051-0/+3
| | | | | | | dns-domain.c contains useful functions for manipulating DNS names. Add it to the systemd static library we build in shared/, similarly to what we already do for other utility files that were originally in src/systemd/src/basic/.
* dhcp: add nettools dhcp4 clientTom Gundersen2019-07-051-0/+37
| | | | | | | | | | | | | | | | | | | This is inspired by the existing systemd integration, with a few differences: * This parses the WPAD option, which systemd requested, but did not use. * We hook into the DAD handling, only making use of the configured address once DAD has completed successfully, and declining the lease if it fails. There are still many areas of possible improvement. In particular, we need to ensure the parsing of all options are compliant, as n-dhcp4 treats all options as opaque, unlike sd-dhcp4. We probably also need to look at how to handle failures and retries (in particular if we decline a lease). We need to query the current MTU at client startu, as well as the hardware broadcast address. Both these are provided by the kernel over netlink, so it should simply be a matter of hooking that up with NM's netlink layer. Contribution under LGPL2.0+, in addition to stated licenses.
* systemd: merge branch systemd into masterBeniamino Galvani2019-07-051-0/+1
|
* shared: add "shared/nm-glib-aux/nm-json-aux.h"Thomas Haller2019-05-231-0/+1
| | | | | This will be a set of JSON related utilities, that are independent of libjansson.
* shared: implement _nm_utils_monotonic_timestamp_initialized() in ↵Thomas Haller2019-05-221-0/+1
| | | | "nm-logging-stub.c"
* shared: add "shared/nm-glib-aux/nm-dbus-aux.h"Thomas Haller2019-05-121-1/+2
|
* shared: add "shared/nm-glib-aux/nm-keyfile-aux.h"Thomas Haller2019-05-071-0/+1
|
* shared/tests: add tests for libnm-core-auxThomas Haller2019-04-251-11/+14
| | | | | | | | | | These tests cannot (easily) be under "shared/nm-libnm-core-aux/tests" because libnm/libnm-core requires code under shared while "nm-libnm-core-aux" requires libnm/libnm-core. With autotools that is not problem, but with meson we include sub directories in a particular order and there is no way to foward declare stuff (AFAIK). To avoid the circular dependency, add the tests to "clients/common/tests", which is always built last.
* shared: build helper "libnm-libnm-core-{intern|aux}.la" library for libnm-coreThomas Haller2019-04-181-22/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | "libnm-core" implements common functionality for "NetworkManager" and "libnm". Note that clients like "nmcli" cannot access the internal API provided by "libnm-core". So, if nmcli wants to do something that is also done by "libnm-core", , "libnm", or "NetworkManager", the code would have to be duplicated. Instead, such code can be in "libnm-libnm-core-{intern|aux}.la". Note that: 0) "libnm-libnm-core-intern.la" is used by libnm-core itsself. On the other hand, "libnm-libnm-core-aux.la" is not used by libnm-core, but provides utilities on top of it. 1) they both extend "libnm-core" with utlities that are not public API of libnm itself. Maybe part of the code should one day become public API of libnm. On the other hand, this is code for which we may not want to commit to a stable interface or which we don't want to provide as part of the API. 2) "libnm-libnm-core-intern.la" is statically linked by "libnm-core" and thus directly available to "libnm" and "NetworkManager". On the other hand, "libnm-libnm-core-aux.la" may be used by "libnm" and "NetworkManager". Both libraries may be statically linked by libnm clients (like nmcli). 3) it must only use glib, libnm-glib-aux.la, and the public API of libnm-core. This is important: it must not use "libnm-core/nm-core-internal.h" nor "libnm-core/nm-utils-private.h" so the static library is usable by nmcli which couldn't access these. Note that "shared/nm-meta-setting.c" is an entirely different case, because it behaves differently depending on whether linking against "libnm-core" or the client programs. As such, this file must be compiled twice.
* shared: move most of "shared/nm-utils" to "shared/nm-glib-aux"Thomas Haller2019-04-181-21/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | From the files under "shared/nm-utils" we build an internal library that provides glib-based helper utilities. Move the files of that basic library to a new subdirectory "shared/nm-glib-aux" and rename the helper library "libnm-core-base.la" to "libnm-glib-aux.la". Reasons: - the name "utils" is overused in our code-base. Everything's an "utils". Give this thing a more distinct name. - there were additional files under "shared/nm-utils", which are not part of this internal library "libnm-utils-base.la". All the files that are part of this library should be together in the same directory, but files that are not, should not be there. - the new name should better convey what this library is and what is isn't: it's a set of utilities and helper functions that extend glib with funcitonality that we commonly need. There are still some files left under "shared/nm-utils". They have less a unifying propose to be in their own directory, so I leave them there for now. But at least they are separate from "shared/nm-glib-aux", which has a very clear purpose.
* shared: move udev helper to separate directory "shared/nm-udev-aux"Thomas Haller2019-04-181-5/+5
| | | | | | | | We built (among others) two libraries from the sources in "shared/nm-utils": "libnm-utils-base.la" and "libnm-utils-udev.la". It's confusing. Instead use directories so there is a direct correspondence between these internal libraries and the source files.
* shared: split C-only helper "shared/nm-std-aux" utils out of "shared/nm-utils"Thomas Haller2019-04-181-2/+25
| | | | | | | | | | | | | "shared/nm-utils" contains general purpose utility functions that only depend on glib (and extend glib with some helper functions). We will also add code that does not use glib, hence it would be good if the part of "shared/nm-utils" that does not depend on glib, could be used by these future projects. Also, we use the term "utils" everywhere. While that covers the purpose and content well, having everything called "nm-something-utils" is not great. Instead, call this "nm-std-aux", inspired by "c-util/c-stdaux".
* build: include c-stdaux in c-util and nettools toolsThomas Haller2019-04-141-0/+17
| | | | | This is now a dependency for the internal tools. Add the include directive first, before upgrading the libraries.
* systemd: merge branch systemd into masterThomas Haller2019-04-041-0/+1
|
* shared: add "shared/nm-libnm-core-utils.h" utilsThomas Haller2019-03-251-0/+2
| | | | | | | | | | | | | | | | | | | | | | | We have code in "shared/nm-utils" which are general purpose helpers, independent of "libnm", "libnm-core", "clients" and "src". We have shared code like "shared/nm-ethtool-utils.h" and "shared/nm-meta-setting.h", which is statically linked, shared code that contains libnm related helpers. But these helpers already have a specific use (e.g. they are related to ethtool or NMSetting metadata). Add a general purpose helper that: - depends (and extends) libnm-core - contains unrelated helpers - can be shared (meaning it will be statically linked). - this code can be used by any library user of "libnm.so" (nmcli, nm-applet) and by "libnm-core" itself. Thus, "src/" and "libnm/" may also use this code indirectly, via "libnm-core/".
* build/meson: add intermediate shared/nm-utils base libraryThomas Haller2019-02-051-46/+64
| | | | | | | | | | Like also done for autotools, create and use intermediate libraries from "shared/nm-utils/". Also, replace "shared_dep" by "shared_nm_utils_base_dep". We don't need super fine-grained selection of what we link. We can always link in "shared/libnm-utils-base.a", and let the linker throw away unsed parts.
* libnm: use "libnm-systemd-shared.a" in "libnm-core.la" (and "libnm.so")Thomas Haller2019-01-021-0/+25
| | | | | | | | | | | | It's not yet used, but it will be. We will need nm_sd_utils_unbase64mem() to strictly validate WireGuard settings, which contain keys in base64 encoding. Note that we also need a stub implementation for logging. This will do nothing for all logging from "libnm-systemd-shared.a". This makes sense because "libnm.so" as a library should not log directly. Also, "libnm.so" will only use a small portion of "libnm-systemd-shared.a" which doesn't log anything. Thus this code is unused and dropped by the linker with "--gc-sections".
* systemd: move basic systemd library to shared/nm-utilsThomas Haller2019-01-021-0/+61
| | | | | | | | | | | | | | | | For better or worse, we already pull in large parts of systemd sources. I need a base64 decode implementation (because glib's g_base64_decode() cannot reject invalid encodings). Instead of coming up with my own or copy-paste if from somewhere, reuse systemd's unbase64mem(). But for that, make systemd's basic bits an independent static library first because I will need it in libnm-core. This doesn't really change anything except making "libnm-systemd-core.la" an indpendent static library that could be used from "libnm-core". We shall still be mindful about which internal code of systemd we use, and only access functionality that is exposed via "systemd/nm-sd-utils-shared.h".
* shared,core: add "nm-errno.h"Thomas Haller2018-12-271-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | This will be our extension on top of <errno.h>. We want to use (integer) error numbers, that can both contain native errors from <errno.h> and our own defines, both merge in one domain. That is, we will reserve a small range of integers for our own defines (that hopefully won't clash with errors from <errno.h>). We can use this at places where GError is too cumbersome to use. The advantage is, that our error numbers extend <errno.h> and can be mixed. This is what "src/platform/nm-netlink.h" already does with nl_errno(). Next, the netlink errors from there will be merged into "nm-errno.h". Also, platform has NMPlatformError, which are a distinct set of error numbers. But these work differently in the sense that negative values represent codes from <errno.h> and positive numbers are our own platform specific defines. NMPlatformError will also be merged into "nm-errno.h". "nm-errno.h" will unify the error handling of platform and netlink, making it more similar to what we are used to from systemd, and give room to extend it for our own purpose.
* build: meson: Add trailing commasIñigo Martínez2018-12-201-1/+1
| | | | | | | Add missing trailing commas that avoids getting noise when another file/parameter is added and eases reviewing changes[0]. [0] https://gitlab.gnome.org/GNOME/dconf/merge_requests/11#note_291585
* shared/tests: add test for "shared/nm-utils"Thomas Haller2018-10-181-0/+28
| | | | | | | | | "shared/nm-utils" is a loose collection of utility functions. There is a certain aim that they can be used independently. However, they also rely on each other. Add a test that we can build a minimal shared library with these tools, independent of libnm-core.
* shared: move nm_utils_get_monotonic_timestamp*() to shared/nm-utils.Thomas Haller2018-10-181-0/+2
| | | | | | | | | This is independent functionality that only depends on linux API and glib. Note how "nm-logging" uses this for getting the timestamps. This makes "nm-logging.c" itself dependen on "src/nm-core-utils.c", for little reason.
* build/meson: don't rebuild c-siphash.c but link against static libraryThomas Haller2018-10-181-2/+0
|
* build: autodetect ebpf supportBeniamino Galvani2018-09-191-1/+1
|
* build: allow disabling eBPF support in n-acdbg/n-acd-updateBeniamino Galvani2018-09-181-2/+10
| | | | | | | | | | Add a configure option to disable eBPF support in n-acd. Note that, even if eBPF is not supported, n-acd requires a kernel > 3.19, which means that the setsockopt(..., SO_ATTACH_BPF) option must be defined. To allow building on older kernels without modifying the n-acd code, we inject the SO_ATTACH_BPF value as a preprocessor define in the compiler the command line.
* acd: adapt NM code and build optionsBeniamino Galvani2018-09-181-2/+18
| | | | | Adapt the nm-acd-manager.c code to the new API and also tweak build options to the new project structure.
* build: compile the c-rbtree libraryBeniamino Galvani2018-09-181-0/+13
|
* shared: add "nm-io-utils.h"Thomas Haller2018-09-041-0/+1
|
* shared: add nm-secret-utils.h helperThomas Haller2018-09-041-0/+1
| | | | | | | | | | | | | | | We already had nm_free_secret() to clear the secret out of a NUL terminated string. That works well for secrets which are strings, it can be used with a cleanup attribute (nm_auto_free_secret) and as a cleanup function for a GBytes. However, it does not work for secrets which are binary. For those, we must also track the length of the allocated data and clear it. Add two new structs NMSecretPtr and NMSecretBuf to help with that.
* libnm, cli, ifcfg-rh: add NMSettingEthtool settingThomas Haller2018-08-101-0/+2
| | | | | | | | | | | | | | | | | | | Note that in NetworkManager API (D-Bus, libnm, and nmcli), the features are called "feature-xyz". The "feature-" prefix is used, because NMSettingEthtool possibly will gain support for options that are not only -K|--offload|--features, for example -C|--coalesce. The "xzy" suffix is either how ethtool utility calls the feature ("tso", "rx"). Or, if ethtool utility specifies no alias for that feature, it's the name from kernel's ETH_SS_FEATURES ("tx-tcp6-segmentation"). If possible, we prefer ethtool utility's naming. Also note, how the features "feature-sg", "feature-tso", and "feature-tx" actually refer to multiple underlying kernel features at once. This too follows what ethtool utility does. The functionality is not yet implemented server-side.
* build/meson: fix naming of shared_nm_meta_setting_c variableThomas Haller2018-08-101-1/+1
|
* build/meson: fix meson build for shared filesThomas Haller2018-05-311-36/+46
| | | | | | | | | | | | | | | | | | | | | | | The files in shared/nm-utils are not compiled as one static library, instead each subproject that needs (parts of) them, re-compiles the files individually. The major reason for that is, because we might have different compile flags, depending on whether we build libnm-core or libnm-util/libnm-glib. Actually, I think that is not really the case, and maybe this should be refactored, to indeed build them all as a static library first. Anyway, libnm-util, libnm-glib, clients' common lib, they all need a different set of shared files that they should compile. Refactor "shared/meson.build" to account for that and handle it like autotools does. Another change is, that "shared_c_siphash_dep" no longer advertises "include_directories: include_directories('c-siphash/src')". We don't put c-siphash.h into the include search path. Users who need it, should include it via "#include <c-siphash/src/c-siphash.h>". The only exception is when building shared_n_acd library, which is not under our control.
* all: replace systemd's siphash24 with c-siphashThomas Haller2018-05-311-2/+1
| | | | | | | | | | | | Originally, we used "nm-utils/siphash24.c", which was copied from systemd's source tree. It was both used by our own NetworkManager code, and by our internal systemd fork. Then, we added "shared/c-siphash" as a dependency for n-acd. Now, drop systemd's implementation and use c-siphash also for our internal purpose. Also, let systemd code use c-siphash, by patching "src/systemd/src/basic/siphash24.h".
* build: don't add shared/nm-utils directory to include search pathThomas Haller2018-05-311-1/+0
| | | | | | | | | | | | All users are supposed to include files from nm-utils by fully specifying the path. -I.*shared/nm-utils is wrong. Only, systemd code likes to include "siphash24.h" directly. Instead of adding "-Ishared/nm-utils" to the search path, add an intermediary header to sd-adapt. Note, that in the meantime we anyway should rework siphash24 to use shared/c-siphash instead. This also fixes build for meson, which was broken recently.
* build: meson: link NM against n-acdBeniamino Galvani2018-04-181-0/+25
|
* meson: Improve dependency systemIñigo Martínez2018-01-101-4/+10
| | | | | | | | | | | | | | | | | | | | Some targets are missing dependencies on some generated sources in the meson port. These makes the build to fail due to missing source files on a highly parallelized build. These dependencies have been resolved by taking advantage of meson's internal dependencies which can be used to pass source files, include directories, libraries and compiler flags. One of such internal dependencies called `core_dep` was already in use. However, in order to avoid any confusion with another new internal dependency called `nm_core_dep`, which is used to include directories and source files from the `libnm-core` directory, the `core_dep` dependency has been renamed to `nm_dep`. These changes have allowed minimizing the build details which are inherited by using those dependencies. The parallelized build has also been improved.
* build: add initial support for meson build systemIñigo Martínez2017-12-131-0/+39
meson is a build system focused on speed an ease of use, which helps speeding up the software development. This patch adds meson support along autotools. [thaller@redhat.com: rebased patch and adjusted for iwd support] https://mail.gnome.org/archives/networkmanager-list/2017-December/msg00022.html