Commit Graph

30304 Commits

Author SHA1 Message Date
Thomas Haller
54119d4105 dhcp: drop internal systemd DHCPv4 client
This is long replaced by nettools' n-dhcp4 client.
Drop it.

We still require NMDhcpSystemd for the DHCPv6 client.

Note that "[main].dhcp=systemd" now falls back to the internal client.
But this option was undocumented and internal anyway.
2022-04-14 14:51:02 +02:00
Thomas Haller
b1575e814f dhcp: don't use systemd's dhcp_lease_load() in nettools' n-dhcp4 ip4_start() 2022-04-14 14:51:02 +02:00
Thomas Haller
c44b49db6f glib-aux: add nm_parse_env_file() helpers for parsing systemd's env-files
We write lease files for internal DHCP client ("systemd" and "nettools")
in a systemd-specific format. We want to drop systemd code, so we need
to have our own parsing code.

Granted, nettools only writes a single "ADDRESS=" line, so parsing that
would be easy. On the other hand, systemd's parser is not complicated
either (in particular, if we can steal their implementation). Also, it's
a commonly used format in systemd, so having the parser would allow us
to parse similar formats.

Also, we could opt to choose that format, where it makes sense.
2022-04-14 14:51:02 +02:00
Thomas Haller
7df494bc9a glib-aux: add nm_ascii_is_{whitespace,newline}() helper 2022-04-14 14:51:02 +02:00
Thomas Haller
4b9ea28cd4 tests: improve nmtst_assert_strv() helper macro 2022-04-14 14:51:01 +02:00
Thomas Haller
c20e3a72e2 release: bump version to 1.39.1 (development) 2022-04-14 13:42:16 +02:00
Thomas Haller
6bada7fb9e contrib/rpm: reorder variable in spec file and set rpm_version
On recent Fedora and RHEL we no longer have differing "rpm_version"
and "real_version". So usually "rpm_version" is just the same as
"real_version".

Update the template spec file to reflect that. For the "build_clean.sh"
script, we anyway always set them both to "__VERSION__".
2022-04-14 12:47:07 +02:00
Thomas Haller
335afba2e6 c-stdaux: re-import git-subtree for 'src/c-stdaux'
git subtree pull --prefix src/c-stdaux git@github.com:c-util/c-stdaux.git main --squash
2022-04-13 12:49:59 +02:00
Thomas Haller
e5b6639624 Squashed 'src/c-stdaux/' changes from 9582a563c25e..f20e1cf2dfb1
f20e1cf2dfb1 build: verify cflags do not contain spaces
5333735eeb74 build: export cflags via declare_dependency()
d050374b1c1a build: export basic CFLAGS

git-subtree-dir: src/c-stdaux
git-subtree-split: f20e1cf2dfb177e77cc946331ed2d2a83169d8b9
2022-04-13 12:49:04 +02:00
Thomas Haller
a0c92bb9a4 c-stdaux: re-import git-subtree for 'src/c-stdaux'
git subtree pull --prefix src/c-stdaux git@github.com:c-util/c-stdaux.git main --squash
2022-04-13 11:03:41 +02:00
Thomas Haller
5da47deadd Squashed 'src/c-stdaux/' changes from 8652c488b8f1..9582a563c25e
9582a563c25e build: update dependency handling
c1cda3600991 test: remove possible wrong warning in possible unused variable

git-subtree-dir: src/c-stdaux
git-subtree-split: 9582a563c25e75896794a7b32e4d6b0f0bdfa19a
2022-04-13 11:01:09 +02:00
Thomas Haller
2fff437955 n-dhcp4: re-import git-subtree for 'src/n-dhcp4'
git subtree pull --prefix src/n-dhcp4 git@github.com:nettools/n-dhcp4.git master --squash
2022-04-13 10:57:58 +02:00
Thomas Haller
aba56902d1 Squashed 'src/n-dhcp4/' changes from 281f431756e3..64513e31c01a
64513e31c01a connection: dynamically allocate the receive buffer
2b55ae2f0bda merge branch 'bengal:lease-boot-file'
d0f13d174b1a lease: add an accessor for the file name
0c64aedd80bf lease: fix n_dhcp4_client_lease_get_server_identifier()
745ca63afb44 lease: fix typo
b9d907d32ec0 Make n_dhcp4_client_lease_get_basetime publicly visible

git-subtree-dir: src/n-dhcp4
git-subtree-split: 64513e31c01a88db54c89321f89bcc85da27ffc5
2022-04-13 10:57:10 +02:00
Beniamino Galvani
a5a5654f18 n-dhcp4/connection: dynamically allocate the receive buffer
Each connection object includes a 64KiB scratch buffer used for
receiving packets. When many instances of the client are created,
those buffers use a significant amount of memory. For example, 500
clients take ~30MiB of memory constantly reserved only for those
buffers.

Since the buffer is used only in the function and is never passed
outside, a stack allocation would suffice; however, it's not wise to
do such large allocations on the stack; dynamically allocate it.

https://github.com/nettools/n-dhcp4/issues/26
https://github.com/nettools/n-dhcp4/pull/27

64513e31c0
2022-04-13 10:56:50 +02:00
Thomas Haller
197e73ac7c dhcp/dhclient: fix setting "src" attribute for certain routes
Fixes: 2dc7a3d9f9 ('dhcp: set "src" for DHCPv4 routes')
2022-04-13 10:43:27 +02:00
Thomas Haller
8e5f60dfd3 dhcp/nettools: reword code comment in dhcp4_event_cb()
Also drop the "FIXME" tag. There is nothing to fix here.
2022-04-13 10:27:50 +02:00
Thomas Haller
24dab91a66 glib-aux/trivial: add code comment to nm_str_buf_get_str_unsafe() 2022-04-13 09:25:06 +02:00
Thomas Haller
2c5bacd416 std-aux: add NM_UTILS_GET_NEXT_REALLOC_SIZE_488 define 2022-04-13 09:23:28 +02:00
Thomas Haller
cb98616e02 ndisc/tests: relex check in test_dns_solicit_loop()
Dunno why this happens. Just silence it.

  nm:ERROR:../src/core/ndisc/tests/test-ndisc-fake.c:649:test_dns_solicit_loop: assertion failed (data.counter == 3): (2 == 3)
2022-04-12 18:45:29 +02:00
谢致邦 (XIE Zhibang)
b6eb237a27 supplicant: Disable WPA3 transition mode when PMF is set to disabled
According to WPA3_Specification_v3.0 section 2.3, when operating in
WPA3-Personal transition mode an AP:

- shall set MFPC to 1, MFPR to 0.

Therefore, do not operate in WPA3-Personal transition mode when PMF is set to
disabled. This also provides a way to be compatible with some devices that are
not fully compatible with WPA3-Personal transition mode.

Signed-off-by: 谢致邦 (XIE Zhibang) <Yeking@Red54.com>

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1186
2022-04-11 18:55:49 +02:00
Thomas Haller
4c67970e4c platform: log skipped addresses in nm_platform_ip_address_sync()
This is generally useful. Don't only log with more logging.
2022-04-11 11:47:48 +02:00
Thomas Haller
7f427ac4e6 platform: ensure the platform cache is up to date during nm_platform_ip_address_sync()
Since commit 528a63d9cc ('platform: avoid unnecessary configuration of
IP address in nm_platform_ip_address_sync()'), we no longer configure the
IP address if it is in the platform cache. But the cache might not be
up to date. Process any pending netlink events.

https://bugzilla.redhat.com/show_bug.cgi?id=2073926

Fixes: 528a63d9cc ('platform: avoid unnecessary configuration of IP address in nm_platform_ip_address_sync()')
2022-04-11 11:44:02 +02:00
Thomas Haller
0f2708f86a NEWS: update 2022-04-08 17:53:21 +02:00
Thomas Haller
0119d56dca platform: merge branch 'th/platform-address-order' (part 2)
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1168
2022-04-08 16:00:08 +02:00
Thomas Haller
9ce4a16523 glib-aux: add assertions for valid prefix length 2022-04-08 15:59:50 +02:00
Thomas Haller
a850e438a7 glib-aux/tests: avoid invalid prefix length in test_platform_ip_address_pretty_sort_cmp()
Next we are going to assert that the prefix length is valid.
The test needs to have valid prefix lengths too. Adjust.
2022-04-08 15:59:50 +02:00
Thomas Haller
0cf9db42d4 glib-aux: use uint32 type for prefix length parameter
Of course, the prefix length cannot be larger than 32 or 128.
But as C does implicit conversions, a buggy prefix length can
lead to a (wrongly) valid prefix length.

Make the type uint32, to prevent that (at least for common cases,
unless you pass a huge 64 bit integer).
2022-04-08 15:59:50 +02:00
Thomas Haller
b5a06dedd4 glib-aux: move nm_utils_ip4_address_clear_host_address() to header so it can be inlined 2022-04-08 15:59:50 +02:00
Thomas Haller
d7990b359b glib-aux: move ip address utils in "nm-shared-utils.h" header
Some were duplicated. Drop those.

Some function were in an order where they required forward declarations.
Reorder.
2022-04-08 15:59:49 +02:00
Thomas Haller
3a545fd041 platform: use nm_utils_ip4_address_clear_host_address()
We have this util function, presumably because it's good to have it.
Use it.
2022-04-08 15:59:49 +02:00
Thomas Haller
4fc25d523a platform: guard logging statements with check whether logging is enabled 2022-04-08 15:59:49 +02:00
Thomas Haller
27752bfd5b glib-aux: assert that nm_utils_to_string_buffer_init() does not use the global buffer
For convenience, most to-string methods call nm_utils_to_string_buffer_init().
This allows to omit the string buffer and use a global (thread-local)
buffer.

That "convenience" seems error prone. Start drop it.

Start by adding a g_return_if_reached() assertion to catch the cases
that use it.
2022-04-08 15:59:49 +02:00
Thomas Haller
b87afac8e8 all: avoid using global string buffer for to-string methods
These string functions allow to omit the string buffer. This is for
convenience, to use a global (thread-local) buffer. I think that is
error prone and we should drop that "convenience" feature.

At various places, pass a stack allocated buffer.
2022-04-08 15:59:49 +02:00
Thomas Haller
02a8d21e4e all: use "NM_UTILS_TO_STRING_BUFFER_SIZE" macro 2022-04-08 15:59:49 +02:00
Thomas Haller
36e709c021 all: add "NM_UTILS_TO_STRING_BUFFER_SIZE" macro
I want to get rid of "_nm_utils_to_string_buffer" (or at least, limit
and control its use). Currently it's used all over the place only
to get the size of it. Add a define instead.
2022-04-08 15:59:48 +02:00
Thomas Haller
528a63d9cc platform: avoid unnecessary configuration of IP address in nm_platform_ip_address_sync()
We call sync many times. Often there is nothing to update. Check the
cache first, before (re) adding it.

Note that many addresses have a limited lifetime, that is, a lifetime
that keeps counting down with seconds granularity. For those (common)
cases we will only avoid the call to kernel if there are two syncs
within less than a second.
2022-04-08 15:59:48 +02:00
Thomas Haller
a815212214 platform: add nm_platform_ip_address_get() helper 2022-04-08 15:59:48 +02:00
Thomas Haller
ef1b60c061 platform: add semantic comparison for IP addresses and add "nm_platform_vtable_address"
We already have a comparison of NMPlatformIPXAddress with the modes
"full" and "id". The former is needed to fully compare two addresses,
the latter as identity for tracking addresses in the cache.

In NetworkManager we also use the NMPlatformIP[46]Address structure to
track the addresses we want to configure. When we add them in kernel,
we will later see them in the platform cache. However, some fields
will be slightly different. For example, "addr_source" address will
always be "kernel", because that one is not a field we configure in
kernel. Also, the "n_ifa_flags" probably differ (getting "permanent"
and "secondary" flags).

Add a compare function that can ignore such differences.

Also add nm_platform_vtable_address for accessing the IPv4 and IPv6
methods generically (based on an "IS_IPv4" variable).
2022-04-08 15:59:48 +02:00
Thomas Haller
7c92663f8d platform: make NMPlatformVTableAddress struct smaller and pack NMPObjectType 2022-04-08 15:59:48 +02:00
Thomas Haller
deb37401e9 platform: make "now" timestamp an in/out parameter to nmp_utils_lifetime_get()
nmp_utils_lifetime_get() calculates the lifetime of addresses,
and it bases the result on a "now" timestamp.

If you have two addresses and calculate their expiry, then we want to
base it on top of the same "now" timestamp, meaning, we should
only call nm_utils_get_monotonic_timestamp_sec() once. This is also a
performance optimization. But much more importantly, when we make a
comparison at a certain moment, we need that all sides have the same
understanding of the current timestamp.

But nmp_utils_lifetime_get() does not always require the now timestamp.
And the caller doesn't know, whether it will need it (short of knowing
how nmp_utils_lifetime_get() is implemented). So, make the now parameter
an in/out argument. If we pass in an already valid now timestamp, use
that. Otherwise, fetch the current time and also return it.
2022-04-08 15:59:48 +02:00
Thomas Haller
3bd5d2bca9 platform: avoid duplicated code in _nmp_object_stackinit_from_type() 2022-04-08 15:59:48 +02:00
Thomas Haller
31299473cd platform: rename local variable in nm_platform_ip_address_sync() 2022-04-08 15:59:48 +02:00
Thomas Haller
de9f174d51 platform: make "idx" argument in _addr_array_clean_expired() mandatory
There is only one caller of _addr_array_clean_expired(), and it always
provides the "idx" pointer.
2022-04-08 15:59:47 +02:00
Thomas Haller
305f11069f platform: add ascending/descending functions for ip6_address_scope_cmp*()
It seems easier to read, than passing a boolean parameter.
2022-04-08 15:59:47 +02:00
Thomas Haller
6bc9b73c55 platform: allocate result array when needed in nm_platform_ip_{address,route}_get_prune_list()
It is rather unlikely, that we call this function with no existing
routes/addresses. Hence, usually this does not safe an allocation
of the GPtrArray.

However, it's slightly less code and makes more sense this way
(instead of checking afterwards, whether the array is empty and
destroy it).
2022-04-08 15:59:47 +02:00
Thomas Haller
fcb4033a81 platform: add logging statements to nm_platform_ip_address_sync() for printf() debugging
The code is disabled at compile time. It's only useful for printf
debugging to modify the source to get more logging.
2022-04-08 15:59:47 +02:00
Thomas Haller
3f4586532f glib-aux: add nm_utils_get_monotonic_timestamp_sec_cached() helper 2022-04-08 15:59:47 +02:00
Thomas Haller
8b95693985 platform: merge branch 'th/platform-address-order' (part 1)
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1168
2022-04-08 15:55:36 +02:00
Thomas Haller
619dc2fcab platform: track IPv4 subnets with prefix length in nm_platform_ip_address_sync()
The entire point of the dance in nm_platform_ip_address_sync() is to ensure that
conflicting IPv4 addresses are in their right order, that is, they have
the right primary/secondary flag.

Kernel only sets secondary flags for addresses that are in the same
subnet, and we also only care about the relative order of addresses
that are in the same subnet. In particular, because we rely on kernel's
"secondary" flag to implement this.

But kernel only treads addresses as secondary, if they share the exact
same subnet. For example, 192.168.0.5/24 and 192.168.0.6/25 would not
be treated as primary/secondary but just as unrelated addresses, even if
the address cleared of it's host part is the same.

This means, we must not only hash the network part of the addresses, but
also the prefix length. Implement that, by tracking the full NMPObject.
2022-04-08 15:54:13 +02:00
Thomas Haller
e1431b43a2 platform: move known_subnets variable to inner scope in nm_platform_ip_address_sync() 2022-04-08 15:54:12 +02:00