Commit Graph

27030 Commits

Author SHA1 Message Date
Michael Biebl
e9c6561ffa systemd: basic/missing_syscall: fix syscall numbers for mips*
Thanks Christian Brauner @brauner

cd20659891

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/545
2020-10-08 10:36:10 +02:00
Thomas Haller
865265313c shared/c-rbtree: reimport
git subtree pull --prefix shared/c-rbtree git@github.com:c-util/c-rbtree.git master --squash
2020-10-07 16:22:03 +02:00
Thomas Haller
a417583558 Squashed 'shared/c-rbtree/' changes from 7624b79b26d0..bd1c14dc0d93
bd1c14dc0d93 c-rbtree: reduce alignment constraints

git-subtree-dir: shared/c-rbtree
git-subtree-split: bd1c14dc0d939edf6186057d4ed7a623e21c5209
2020-10-07 16:21:47 +02:00
David Rheinsberg
1554936e33 c-rbtree: reduce alignment constraints
There are some Debian-supported architectures where `max_align_t` is
only aligned to 4-bytes. This is unfortunate and breaks our assumptions.
While glibc-malloc still guarantees 8 / 16 bytes alignment, this is not
necessarily guaranteed by the C standard (and alternative allocators
will deviate (see jemalloc, for instance)).

Fortunately, we only need 2 flags, so a 4-byte alignment is more than
enough.

Reported-by: Thomas Haller
Signed-off-by: David Rheinsberg <david.rheinsberg@gmail.com>

https://github.com/c-util/c-rbtree/pull/4
2020-10-07 16:20:42 +02:00
Thomas Haller
6cf7c6739f platform/tests: skip test_platform_ip_address_pretty_sort_cmp() on non-amd64 archs
The test only works on amd64, because it relies on the memory layout of
the structures.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/546
2020-10-07 09:10:09 +02:00
Thomas Haller
3576f54100 platform/tests: print details about test failure for test_platform_ip_address_pretty_sort_cmp()
When the test is about to fail, print the wrong data to help debugging
the test failure.
2020-10-07 09:01:17 +02:00
Thomas Haller
4fc7973498 platform/tests: adjust regeneration of test code for test_platform_ip_address_pretty_sort_cmp()
Since re-formatting our source code, the generated output no longer
matched the required formatting. Adjust it.
2020-10-07 08:48:13 +02:00
Alfonso Sánchez-Beato
9c8275bedc platform: use also statvfs() to check for udevd
Check whether or not there is a running udevd by using statvfs() on
"/sys" and use access() as a fallback. This is in line with what is
done by systemd [1] and helps in case NM is not really running in a
container but has been confined by a MAC so it does not have full
access to sysfs (access() returns EACCES).

[1] https://github.com/systemd/systemd/blob/v246/src/basic/stat-util.c#L132

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/639
2020-10-06 19:01:24 +02:00
Thomas Haller
441f9b3c14 tests: adjust timeouts for test nm_utils_kill_child()
The test spawns processes and tries to kill them, with timeouts and retry.
That is inherently racy, and it's hard to deterministically test the
interesting cases, without having unstable tests.

Try to adjust the timeout, to make it more stable:

    14:02:27 /builds/NetworkManager/NetworkManager/tools/run-nm-test.sh --called-from-make /builds/NetworkManager/NetworkManager/build    --launch-dbus=auto /builds/NetworkManager/NetworkManager/build/src/tests/test-core-with-expect
    --- stdout ---
    # random seed: R02S7748fae8fc946b7a755b72efb5815250
    1..5
    # Start of general tests
    ok 1 /general/nm_utils_monotonic_timestamp_as_boottime
    # NetworkManager-DEBUG: <debug> [1601992953.4091] kill child process 'test-s-1-3' (18615): sending SIGKILL...
    # NetworkManager-DEBUG: <debug> [1601992953.4242] kill child process 'test-s-1-3' (18615): waiting for process to terminate after sending no signal (0) and SIGKILL...
    # NetworkManager-DEBUG: <debug> [1601992953.4257] kill child process 'test-s-1-3' (18615): after sending no signal (0) and SIGKILL, process 18615 exited by signal 9 (20807 usec elapsed)
    Bail out! GLib:ERROR:../src/tests/test-core-with-expect.c:154:test_nm_utils_kill_child_sync_do: Did not see expected message NetworkManager-DEBUG: *<debug> [*] kill child process 'test-s-1-3' (*): waiting up to 1 milliseconds for process to terminate normally after sending no signal (0)...
    Bail out! test:ERROR:../src/tests/test-core-with-expect.c:457:test_nm_utils_kill_child: assertion failed (exit_status == 0): (6 == 0)
    --- stderr ---
    **
    GLib:ERROR:../src/tests/test-core-with-expect.c:154:test_nm_utils_kill_child_sync_do: Did not see expected message NetworkManager-DEBUG: *<debug> [*] kill child process 'test-s-1-3' (*): waiting up to 1 milliseconds for process to terminate normally after sending no signal (0)...
    **
    test:ERROR:../src/tests/test-core-with-expect.c:457:test_nm_utils_kill_child: assertion failed (exit_status == 0): (6 == 0)
    /builds/NetworkManager/NetworkManager/tools/run-nm-test.sh: line 279: 18325 Aborted                 "${NMTST_DBUS_RUN_SESSION[@]}" "${NMTST_LIBTOOL[@]}" "$NMTST_VALGRIND" --quiet --error-exitcode=$VALGRIND_ERROR --leak-check=full --gen-suppressions=all "${NMTST_SUPPRESSIONS[@]}" --num-callers=100 --log-file="$LOGFILE" "$TEST" "$@"
2020-10-06 16:40:56 +02:00
Thomas Haller
2928269852 CONTRIBUTING: add comments about our clang-format and various adjustments of markdown 2020-10-06 15:48:27 +02:00
Thomas Haller
f9517c7fbb build/release: before release check that all gitlab-ci tests ran successfully 2020-10-06 15:47:29 +02:00
Thomas Haller
838c3d6795 wifi/iwd: merge branch 'balrog-kun:iwd-fixes'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/640
2020-10-06 14:18:58 +02:00
Andrew Zaborowski
1c1f4a3b40 iwd: Subscribe to object-added/removed ObjectManager signals
GDBusObjectManagerClient's interface-added and interface-removed signals
are not emitted when the new interfaces are added to a completely new
object or the removal results in the object disappearing.  In other
words one interface is never reported both through interface-added and
object-added (or -removed) signals.  This kind of makes sense but isn't
documented explicitly so interface-added seemed to correspond to DBus
InterfacesAdded signals which it doesn't.

We need to watch for both kinds of signals and although most things
work without us receiving the signals at all, it causes some race
conditions.  For example on hotplug, devices wouldn't transition to
"disconnected" if a device was discovered by NMManager before it
appeared on IWD's dbus interface because that scenario relied on the
dbus signal.
2020-10-06 14:17:14 +02:00
Andrew Zaborowski
c2c68ce169 iwd: Disable periodic scanning when connected
The automatic scanning every 20 seconds while connected has been
annoying users because of the extra connection latency, drop it.  The
UIs are supposed to be requesting scans whenever an AP list update is
needed (?).
2020-10-06 14:13:14 +02:00
Andrew Zaborowski
d2b0c5af63 iwd: Disconnect signals in NMDeviceIwd's dispose
Fix a crash on device unplugging caused by keeping our signal handlers
for GDBusProxies connected after a call to dispose().  Do this by
replacing most cleanup steps by a nm_device_iwd_set_dbus_object(self, NULL)
call which is more meticulous.
2020-10-06 14:13:14 +02:00
Thomas Haller
7fe76f54e3 build: fix "create-exports-NetworkManager.sh" to fail if "nm" fails
Despite `set -e`, the shell script does not fail if the command in the
here document fails. This can happen if binutils' "nm" fails.

  NM=/bin/false "./tools/create-exports-NetworkManager.sh" --called-from-build "."
2020-10-06 13:30:50 +02:00
Thomas Haller
1ace723d38 NEWS: update 2020-10-06 10:18:00 +02:00
Thomas Haller
53a56a5106 build/travis: remove travis integration
We already build a large variety of configurations in gitlab-ci,
we don't need yet another configuration to run tests on travis-ci.
Also, because the travis-ci setup is outdated and we don't look
at it. Let's focus on gitlab-ci instead.
2020-10-05 23:18:12 +02:00
Thomas Haller
b7e08f685d systemd: workaround compilation failures against old glibc
Building against older libc/kernel headers can fail, because our glue
code for systemd has issues. Fix them by forward declaring "struct
statx" and by disabling parts of "socket-util.c".
2020-10-05 23:12:01 +02:00
Thomas Haller
5e83bac5aa contrib/release: restore original branch in dry-run mode
In dry-run mode, reset the branch to the state where it was before.

Also, in real mode delete the temporary "release-branch" branch on
success.
2020-10-05 19:35:04 +02:00
Beniamino Galvani
a74cb152f2 release: bump version to 1.29.0 (development) 2020-10-05 18:48:29 +02:00
Beniamino Galvani
4adf6afda5 release: bump version to 1.27.90 (1.28-rc1) 2020-10-05 18:43:28 +02:00
Beniamino Galvani
42aa292907 NEWS: update 2020-10-05 18:33:19 +02:00
Beniamino Galvani
fa7f83b26a systemd: merge branch systemd into master 2020-10-05 17:10:24 +02:00
Beniamino Galvani
aaf882b859 systemd: update code from upstream (2020-10-05)
This is a direct dump from systemd git.

======

SYSTEMD_DIR=../systemd
COMMIT=b182195acc3f5eeb97b2b4b60d36796b399e5a01

(
  cd "$SYSTEMD_DIR"
  git checkout "$COMMIT"
  git reset --hard
  git clean -fdx
)

git ls-files -z :/src/systemd/src/ \
                :/shared/systemd/src/ \
                :/shared/nm-std-aux/unaligned.h | \
  xargs -0 rm -f

nm_copy_sd_shared() {
    mkdir -p "./shared/systemd/$(dirname "$1")"
    cp "$SYSTEMD_DIR/$1" "./shared/systemd/$1"
}

nm_copy_sd_core() {
    mkdir -p "./src/systemd/$(dirname "$1")"
    cp "$SYSTEMD_DIR/$1" "./src/systemd/$1"
}

nm_copy_sd_stdaux() {
    mkdir -p "./shared/nm-std-aux/"
    cp "$SYSTEMD_DIR/$1" "./shared/nm-std-aux/${1##*/}"
}

nm_copy_sd_core "src/libsystemd-network/arp-util.c"
nm_copy_sd_core "src/libsystemd-network/arp-util.h"
nm_copy_sd_core "src/libsystemd-network/dhcp-identifier.c"
nm_copy_sd_core "src/libsystemd-network/dhcp-identifier.h"
nm_copy_sd_core "src/libsystemd-network/dhcp-internal.h"
nm_copy_sd_core "src/libsystemd-network/dhcp-lease-internal.h"
nm_copy_sd_core "src/libsystemd-network/dhcp-network.c"
nm_copy_sd_core "src/libsystemd-network/dhcp-option.c"
nm_copy_sd_core "src/libsystemd-network/dhcp-packet.c"
nm_copy_sd_core "src/libsystemd-network/dhcp-protocol.h"
nm_copy_sd_core "src/libsystemd-network/dhcp6-internal.h"
nm_copy_sd_core "src/libsystemd-network/dhcp6-lease-internal.h"
nm_copy_sd_core "src/libsystemd-network/dhcp6-network.c"
nm_copy_sd_core "src/libsystemd-network/dhcp6-option.c"
nm_copy_sd_core "src/libsystemd-network/dhcp6-protocol.h"
nm_copy_sd_core "src/libsystemd-network/lldp-internal.h"
nm_copy_sd_core "src/libsystemd-network/lldp-neighbor.c"
nm_copy_sd_core "src/libsystemd-network/lldp-neighbor.h"
nm_copy_sd_core "src/libsystemd-network/lldp-network.c"
nm_copy_sd_core "src/libsystemd-network/lldp-network.h"
nm_copy_sd_core "src/libsystemd-network/network-internal.c"
nm_copy_sd_core "src/libsystemd-network/network-internal.h"
nm_copy_sd_core "src/libsystemd-network/sd-dhcp-client.c"
nm_copy_sd_core "src/libsystemd-network/sd-dhcp-lease.c"
nm_copy_sd_core "src/libsystemd-network/sd-dhcp6-client.c"
nm_copy_sd_core "src/libsystemd-network/sd-dhcp6-lease.c"
nm_copy_sd_core "src/libsystemd-network/sd-ipv4acd.c"
nm_copy_sd_core "src/libsystemd-network/sd-ipv4ll.c"
nm_copy_sd_core "src/libsystemd-network/sd-lldp.c"
nm_copy_sd_core "src/libsystemd/sd-event/event-source.h"
nm_copy_sd_core "src/libsystemd/sd-event/event-util.c"
nm_copy_sd_core "src/libsystemd/sd-event/event-util.h"
nm_copy_sd_core "src/libsystemd/sd-event/sd-event.c"
nm_copy_sd_core "src/libsystemd/sd-id128/id128-util.c"
nm_copy_sd_core "src/libsystemd/sd-id128/id128-util.h"
nm_copy_sd_core "src/libsystemd/sd-id128/sd-id128.c"
nm_copy_sd_core "src/systemd/_sd-common.h"
nm_copy_sd_core "src/systemd/sd-dhcp-client.h"
nm_copy_sd_core "src/systemd/sd-dhcp-lease.h"
nm_copy_sd_core "src/systemd/sd-dhcp-option.h"
nm_copy_sd_core "src/systemd/sd-dhcp6-client.h"
nm_copy_sd_core "src/systemd/sd-dhcp6-lease.h"
nm_copy_sd_core "src/systemd/sd-dhcp6-option.h"
nm_copy_sd_core "src/systemd/sd-event.h"
nm_copy_sd_core "src/systemd/sd-id128.h"
nm_copy_sd_core "src/systemd/sd-ipv4acd.h"
nm_copy_sd_core "src/systemd/sd-ipv4ll.h"
nm_copy_sd_core "src/systemd/sd-lldp.h"
nm_copy_sd_core "src/systemd/sd-ndisc.h"
nm_copy_sd_shared "src/basic/alloc-util.c"
nm_copy_sd_shared "src/basic/alloc-util.h"
nm_copy_sd_shared "src/basic/async.h"
nm_copy_sd_shared "src/basic/cgroup-util.h"
nm_copy_sd_shared "src/basic/env-file.c"
nm_copy_sd_shared "src/basic/env-file.h"
nm_copy_sd_shared "src/basic/env-util.c"
nm_copy_sd_shared "src/basic/env-util.h"
nm_copy_sd_shared "src/basic/errno-util.h"
nm_copy_sd_shared "src/basic/escape.c"
nm_copy_sd_shared "src/basic/escape.h"
nm_copy_sd_shared "src/basic/ether-addr-util.c"
nm_copy_sd_shared "src/basic/ether-addr-util.h"
nm_copy_sd_shared "src/basic/extract-word.c"
nm_copy_sd_shared "src/basic/extract-word.h"
nm_copy_sd_shared "src/basic/fd-util.c"
nm_copy_sd_shared "src/basic/fd-util.h"
nm_copy_sd_shared "src/basic/fileio.c"
nm_copy_sd_shared "src/basic/fileio.h"
nm_copy_sd_shared "src/basic/format-util.c"
nm_copy_sd_shared "src/basic/format-util.h"
nm_copy_sd_shared "src/basic/fs-util.c"
nm_copy_sd_shared "src/basic/fs-util.h"
nm_copy_sd_shared "src/basic/hash-funcs.c"
nm_copy_sd_shared "src/basic/hash-funcs.h"
nm_copy_sd_shared "src/basic/hashmap.c"
nm_copy_sd_shared "src/basic/hashmap.h"
nm_copy_sd_shared "src/basic/hexdecoct.c"
nm_copy_sd_shared "src/basic/hexdecoct.h"
nm_copy_sd_shared "src/basic/hostname-util.c"
nm_copy_sd_shared "src/basic/hostname-util.h"
nm_copy_sd_shared "src/basic/in-addr-util.c"
nm_copy_sd_shared "src/basic/in-addr-util.h"
nm_copy_sd_shared "src/basic/io-util.c"
nm_copy_sd_shared "src/basic/io-util.h"
nm_copy_sd_shared "src/basic/list.h"
nm_copy_sd_shared "src/basic/log.h"
nm_copy_sd_shared "src/basic/macro.h"
nm_copy_sd_shared "src/basic/memory-util.c"
nm_copy_sd_shared "src/basic/memory-util.h"
nm_copy_sd_shared "src/basic/mempool.c"
nm_copy_sd_shared "src/basic/mempool.h"
nm_copy_sd_shared "src/basic/missing_fcntl.h"
nm_copy_sd_shared "src/basic/missing_random.h"
nm_copy_sd_shared "src/basic/missing_socket.h"
nm_copy_sd_shared "src/basic/missing_stat.h"
nm_copy_sd_shared "src/basic/missing_syscall.h"
nm_copy_sd_shared "src/basic/missing_type.h"
nm_copy_sd_shared "src/basic/parse-util.c"
nm_copy_sd_shared "src/basic/parse-util.h"
nm_copy_sd_shared "src/basic/path-util.c"
nm_copy_sd_shared "src/basic/path-util.h"
nm_copy_sd_shared "src/basic/prioq.c"
nm_copy_sd_shared "src/basic/prioq.h"
nm_copy_sd_shared "src/basic/process-util.c"
nm_copy_sd_shared "src/basic/process-util.h"
nm_copy_sd_shared "src/basic/random-util.c"
nm_copy_sd_shared "src/basic/random-util.h"
nm_copy_sd_shared "src/basic/set.h"
nm_copy_sd_shared "src/basic/signal-util.c"
nm_copy_sd_shared "src/basic/signal-util.h"
nm_copy_sd_shared "src/basic/siphash24.h"
nm_copy_sd_shared "src/basic/socket-util.c"
nm_copy_sd_shared "src/basic/socket-util.h"
nm_copy_sd_shared "src/basic/sort-util.h"
nm_copy_sd_shared "src/basic/sparse-endian.h"
nm_copy_sd_shared "src/basic/stat-util.c"
nm_copy_sd_shared "src/basic/stat-util.h"
nm_copy_sd_shared "src/basic/stdio-util.h"
nm_copy_sd_shared "src/basic/string-table.c"
nm_copy_sd_shared "src/basic/string-table.h"
nm_copy_sd_shared "src/basic/string-util.c"
nm_copy_sd_shared "src/basic/string-util.h"
nm_copy_sd_shared "src/basic/strv.c"
nm_copy_sd_shared "src/basic/strv.h"
nm_copy_sd_shared "src/basic/strxcpyx.c"
nm_copy_sd_shared "src/basic/strxcpyx.h"
nm_copy_sd_shared "src/basic/time-util.c"
nm_copy_sd_shared "src/basic/time-util.h"
nm_copy_sd_shared "src/basic/tmpfile-util.c"
nm_copy_sd_shared "src/basic/tmpfile-util.h"
nm_copy_sd_shared "src/basic/umask-util.h"
nm_copy_sd_shared "src/basic/user-util.h"
nm_copy_sd_shared "src/basic/utf8.c"
nm_copy_sd_shared "src/basic/utf8.h"
nm_copy_sd_shared "src/basic/util.c"
nm_copy_sd_shared "src/basic/util.h"
nm_copy_sd_shared "src/shared/dns-domain.c"
nm_copy_sd_shared "src/shared/dns-domain.h"
nm_copy_sd_shared "src/shared/web-util.c"
nm_copy_sd_shared "src/shared/web-util.h"
nm_copy_sd_stdaux "src/basic/unaligned.h"
2020-10-05 16:56:33 +02:00
Thomas Haller
6220b08c78 platform: reorder fields in NMPClass struct
Almost always we don't care about the order of our fields inside
structs. Hence, choose an order in which holes due to memory alignment
are minimized.
2020-10-05 15:54:09 +02:00
Thomas Haller
0d7bf62aac test/trivial: rename ASSERT_nmp_cache_is_consistent() function to nmtst_assert_nmp_cache_is_consistent()
We sometimes expose test-only functions as part of our API, to give direct
access to unit tests. Such functions should have a "NMTST" prefix. Rename.
2020-10-05 15:46:42 +02:00
Thomas Haller
f2b5812af3 platform: add typedefs for casting functions pointers to improve formatting
The autogenerated formating in these cases is rather ugly. Instead,
introduce a typedef and use that for casting the function pointer.
2020-10-05 15:46:42 +02:00
Thomas Haller
c6308162cf platform: fix formatting for _vt_cmd_plobj_id_cmp()/_vt_cmd_plobj_id_hash_update() 2020-10-05 15:46:42 +02:00
Thomas Haller
978145f8ba shared: return NULL from nm_malloc_maybe_a() when asking for zero bytes
The documentation of g_alloca()/alloca() isn't clear about what
happens when asking for zero bytes. Make it clear, by always returning
NULL.

Also, add a static assertion that @alloca_maxlen is a well-defined
positive integer.
2020-10-02 11:51:33 +02:00
Thomas Haller
456d26d816 platform/tests: fix bug in nmtstp_ip_address_check_lifetime() calculating timeouts with unsigned integers
As one of the arguments in unsigned, the calculation is performed as
unsigned integers. That can actually lead to the wrong result. Fix it by
casting to the right (signed) types.
2020-10-01 17:37:15 +02:00
Thomas Haller
dc559a9af7 platform/trivial: use in_addr_t type for address in nm_platform_ip4_address_get() 2020-10-01 17:35:14 +02:00
Thomas Haller
f7f979cda6 shared: add nm_ether_addr_to_string() helper 2020-10-01 17:35:14 +02:00
Thomas Haller
c36eedf4d8 shared: add ether_addr field of type NMEtherAddr to NMIPAddr union 2020-10-01 17:35:13 +02:00
Thomas Haller
77ad359442 l3cfg: merge branch 'th/l3cfg-11'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/637
2020-09-30 10:41:09 +02:00
Thomas Haller
e83a6f5898 l3cfg: combine notify_type and payload data in NM_L3Cfg_SIGNAL_NOTIFY signal
Emitting signals is relatively expensive, because the arguments have to be packed
into a GValue. Avoid some overhad by only passing one signal argument: the notify-data
which also contains the type. Also with this we can use g_cclosure_marshal_VOID__POINTER.

Also, it's nice to have the type field part of the notify-data. Because clearly
the notify-data union is unusable without knowing the type. That means, if a user
passes the notify-data to a function, they anyway would also need to pass along
the type.
2020-09-30 09:49:24 +02:00
Thomas Haller
ef198d0202 l3cfg: in NML3Cfg also track the current NMPlatformLink of the platform cache
NML3Cfg tends to perform actions on an idle handler. That means, when
it configures something on platform, it tends to ignore the changes and
process them later.

That means the currently tracked NMPObject with the platform link may
not be the same as NMPlatform currently has cached.

Instead, track them both, and extend the API so that it's clear that
there is a difference. You now need to say whether you want the instance
from the platform cache (the "next") or the currently used instance. Of
course, after the idle handler runs, "next" and the current one
converge.

This is useful because we want to reason about the link state (also) by
looking a our NML3Cfg instance. Since it already is connected to
platform, it can expose the same NMPObject.
2020-09-30 09:49:23 +02:00
Thomas Haller
5ed1027cab l3cfg: cleanup nm_l3cfg_platform_commit() API and function to schedule commit on idle
- add nm_l3cfg_platform_commit_on_idle_schedule() so that internal (and
  external) code can schedule a commit on an idle handler. This already
  existed, but is exposed now.

- rename nm_l3cfg_platform_commit() to simply nm_l3cfg_commit(). There
  is no other form than "platform" commit, so the name was
  unnecessarily long.

- also don't let nm_l3cfg_commit() return a boolean success. It's not
  useful, because commits can be triggered internally (by NML3Cfg
  itself) or by other users. Instead, there is the "post-commit" event,
  and anybody who cares about such a failure would need to handle it
  there.
2020-09-30 09:49:23 +02:00
Thomas Haller
11c80ccf19 l3cfg: add NM_L3_CONFIG_NOTIFY_TYPE_PLATFORM_CHANGE notification
Our NML3Cfg instance is the IP configuration manage of one ifindex.
Often users have an NML3Cfg instance at hand, but they still need to
react to platform signals. Instead of requiring those users to register
their own signal (which also gets notifications about uninteresting
interfaces), re-emit the signal from NML3Cfg.

We already had NM_L3_CONFIG_NOTIFY_TYPE_PLATFORM_CHANGE_ON_IDLE which
does something similar, but collects multiple changes and emits them
on an idle handler.
2020-09-30 09:49:22 +02:00
Thomas Haller
432d7f2151 l3cfg: add NM_L3_CONFIG_MERGE_FLAGS_ONLY_FOR_ACD merge flag
This flag indicates that the NML3ConfigData should be ignored for most
purposes, except for doing ACD.

Note that as users can call nm_l3cfg_add_config() multiple times for
the same NML3ConfigData, a higher layer that enables ACD/IPv4LL can
then decide to actually use the configuration, while some layers
only have it hooked up to do ACD.
2020-09-30 09:49:22 +02:00
Thomas Haller
b4aa35e72d l3cfg: extend nm_l3cfg_add_config() to accept default route table and metric
Now that NMPlatformIP[46]Route can contain a wildcard table/metric, we
can set the effectivey table/metric per NML3ConfigData that we merge.
Pass it to nm_l3cfg_add_config().
2020-09-30 09:49:21 +02:00
Thomas Haller
9cf49804d8 l3cfg: add nm_l3cfg_get_multi_idx() accessor 2020-09-30 09:49:21 +02:00
Thomas Haller
02ad6416fd platform: add flags to NMPlatformIP[46]Route to allow overriding the route table and metric
When we (for example) receive a DHCP lease, we track the routes that
should be configured via NMPlatformIP[46]Route instances. Thus, this
structure does not only track the routes that are configured (and
cached in NMPlatform), but it is also used to track the routes that
we want to configure.

This is also the case with the "rt_source" field, which represents the
NMIPConfigSource enum for routes that we want to configure, but
for routes in the cache it corresponds to rtm_protocol.

Note that NMDhcpClient creates NMIP4Config instances, which tracks the
routes as NMPlatformIP4Route instances. Previously, NMDhcpClient didn't
have any way to leave the table/metric undecided, but this information
isn't part of the DHCP lease tself. Instead, NMDevice knows the table/metric
to use. This has various problems:

  - NMDhcpClient needs to know the table/metric, for no other purpose
    than to set the value when creating the NMIP4Config instance for the
    lease. We first pass the information down, only so that it can be
    returned with the lease information.

  - during reapply or when connectivity check changes, the effectively
    used table/metric can change. Previously, we would have to
    re-generate the NMIP4Config instances.

Improve that by allowing to leave the table/metric undecided. Higher
layers can decide the effective metric to use.
2020-09-30 09:49:21 +02:00
Thomas Haller
1558e9a323 platform: have union in NMPLinkAddress for NMEtherAddr 2020-09-30 09:49:21 +02:00
Thomas Haller
f74b7718b3 shared: add typedefs for integers for different endianness
Kernel uses such typedefs (__le32) and systemd too (le32_t).
As we don't want to rely on systemd headers in our code
base, let's also define them.

They have of course very little effect beside making it clearer to
the reviewer that a certain variable is not supposed to be in native
endianness.
2020-09-30 09:49:20 +02:00
Thomas Haller
b019950eaf shared: include "stdint.h" in our base headers
While we often use and prefer the glib typedefs (like guint32), there
are places where we want to use the fixed width integer types from C99.

In particular, next we will introduce typedefs like nm_le64_t for
integers in different endianness.

Also, here we are about "nm-std-aux", so the glib typedefs are not
available.

I feel a header like <stdint.h> is such a basic C requirement, that
is should just be available to us everywhere.
2020-09-30 09:49:20 +02:00
Thomas Haller
d9ca728005 shared: add nm_ether_addr_cmp()/nm_ether_addr_equal() helpers 2020-09-30 09:49:20 +02:00
Thomas Haller
f37dd5d394 shared: move NM_CMP*() macros to "nm-std-aux.h"
I would need these macros earlier in "nm-glib-aux/nm-shared-utils.h",
so it would be sufficient to just move them.

However, when I already move them, move them to "nm-std-aux/nm-std-aux.h"
because they don't need a glib dependency.
2020-09-30 09:48:26 +02:00
Thomas Haller
1c3f7d823e libnm/trivial: fix indentation for NMSettingWirelessWakeOnWLan enum 2020-09-29 18:23:18 +02:00
Thomas Haller
f9d0489123 all: use C-style comments for "clang-format on|off" 2020-09-29 18:22:18 +02:00