Commit Graph

31688 Commits

Author SHA1 Message Date
Thomas Haller
139f4b4b2e build: pass both filenames to "tools/check-compare-generated.sh" script
It just feels nicer to be explicit about the filenames and
not rely on a specific naming.

Also, in meson we can directly pass the target as argument, which
expands to the filename but also adds a dependency.
2022-10-31 09:11:30 +01:00
Thomas Haller
489f65bf9c build/meson fix "gen-metadata-nm-settings-nmcli.xml.in" without enable_docs
Fixes: ab8fdb73e6 ('build: commit pre-generated "generate-docs-nm-settings-nmcli.xml" to git')
2022-10-31 09:11:30 +01:00
Thomas Haller
0ffe391f82 std-aux: fix build error due to __assert_fail() missing with NDEBUG
<assert.h> only defines __assert_fail() if NDEBUG is not on.
Fix that.

Fixes: 8e3299498d ('std-aux,glib-aux: rework nm_assert() implementations')
2022-10-29 21:43:33 +02:00
Thomas Haller
a13fa05754 libnm: merge branch 'th/libnm-fix-compare-dns'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1442
2022-10-28 17:55:42 +02:00
Thomas Haller
e72b1f49b3 libnm: minor refactoring on property_to_dbus() and add comment
Add a comment. Also, restructure the check so that it is (hopefully)
easier to read.
2022-10-28 17:54:16 +02:00
Thomas Haller
991a20b4b2 libnm: fix comparing "ipv[46].dns" properties
nm_setting_diff() ends up calling the compare_fcn() hook. Previously,
the hook for "dns" was _nm_setting_property_compare_fcn_default()
and the hook for "dns-data" was _nm_setting_property_compare_fcn_ignore().

That's wrong. _nm_setting_property_compare_fcn_default() converts
the property to D-Bus and compares the GVariant. However, "dns" has
to_dbus_only_in_manager_process set, so it wouldn't

Fixes: 63eaf168d1 ('libnm: add "dns-data" replacement for "ipv[46].dns" properties on D-Bus')
2022-10-28 17:54:15 +02:00
Thomas Haller
0f0468b208 libnm: fix _nm_setting_property_compare_fcn_default() for "to_dbus_only_in_manager_process"
property_to_dbus() gets called for two reasons. Once from
_nm_setting_to_dbus(). In that case, we want to honor
to_dbus_only_in_manager_process().

It gets also called from _nm_setting_property_compare_fcn_default(),
with ignore_flags set. In that case, we don't want to ignore the property
as the hook really wants to compare them.

Fixes: c8392018ca ('libnm: refactor to-dbus on the client skipping to serialize legacy properties')
2022-10-28 17:54:15 +02:00
Thomas Haller
6414b016a7 libnm/tests: test comparing "ipv[46].dns" properties 2022-10-28 17:54:15 +02:00
Thomas Haller
64b1b2f453 libnm/tests: use g_assert_cmpint() in ensure_diffs() test
Just gives a better failure message. These checks fail often, when new
code gets added.
2022-10-28 17:54:14 +02:00
Thomas Haller
b2d1d14772 build/autotools: adjust hack for gettext() for other Makefile versions
On rhel-8.7, we use a different gettext version, so the Makefile
looks different. Adjust patch the source.

Fixes: 7ee0da3eaf ('build: don't "update-po" during make dist')
2022-10-28 12:23:04 +02:00
Thomas Haller
0622ed7051 cli: cleanup connecting state change signal
It seems really ugly, to pass a callback function of wrong
signature. Granted, it probably works due to the C calling
convention, but it seems odd.

Use callbacks of the proper type instead. Then we also don'
need g_signal_connect_swapped().

While at it, rename. "connected_state_cb()" seems a bad name.
2022-10-28 08:52:08 +02:00
Thomas Haller
4fa20ce710 platform/tests: don't use translations in test tool
Otherwise, this file would need to be included in POTFILES.in.
This is unnecessary.

Fixes: 06cf1f5e2d ('platform/tests: extend monitor tool to dump the state of NMPlatform')
2022-10-27 15:18:54 +02:00
Thomas Haller
3a8decd9cf hostname: rename nm_hostname_manager_write_hostname() to set_static_hostname() 2022-10-27 15:18:54 +02:00
Thomas Haller
37ab511ed4 glib-aux: add nm_dbus_connection_call_get() helper 2022-10-27 13:46:17 +02:00
Thomas Haller
1b60c1ecba dns: merge branch 'th/dot-sni'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/528

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1434
2022-10-27 09:17:03 +02:00
Thomas Haller
3970489219 NEWS: update 2022-10-27 09:15:26 +02:00
Thomas Haller
bdb124852f libnm: unify IPv4/IPv6 forms of DNS to GVariant helper 2022-10-27 09:11:40 +02:00
Thomas Haller
d5be1c706e dns/resolved: set DoT server name (SNI) in systemd-resolved
Unfortunately, for this we require SetLinkDNSEx() API from v246.
That adds extra complexity.

If the configuration contains no server name, we continue using
SetLinkDNS(). Otherwise, at first we try using SetLinkDNSEx().
We will notice if that method is unsupported, reconfigure with
SetLinkDNS(), and set a flag to not try that again.
2022-10-27 09:11:38 +02:00
Thomas Haller
ba33942734 dns/resolved: cleanup detection of supported API in "nm-dns-systemd-resolved.c"
- rename the "has_" variables to have the same name as the API that they
  check.
- do an if-else-if for checking the operation when detecting support.

This just feels nicer. No strong reasons.
2022-10-27 09:11:35 +02:00
Thomas Haller
c68e148b02 core: extend NML3ConfigData:nameserver to track DNS as string
The DNS name can now also contain the DoT server name. It's not longer a
binary IP address only.

Extend NML3ConfigData to account for that. To track the additional
data, use the string representation. The alternative to have a separate
type that contains the parsed information would be cumbersome too.
2022-10-27 09:11:33 +02:00
Thomas Haller
6f9090538f dns: accept DoT SNI server name in "ipv[46].dns" settings 2022-10-27 09:11:31 +02:00
Thomas Haller
a20aae326f nmcli: drop validation of DNS name in nmcli
Now, nm_setting_ip_config_add_dns() no longer asserts that
the name is a valid DNS nameserver. Instead, that is handled
by nm_connection_verify().

Also, the DNS property is going to be extended to support
specifying the SNI server name for DNS over TLS. The validation
would need to be extended.

Instead, drop the validation from nmcli. nmcli often needs to understand
what is happening. But in this case, it doesn't need to know (or
validate) the exact text. Don't duplicate the validation and let
libnm (or the daemon) reject invalid settings.
2022-10-27 09:11:29 +02:00
Thomas Haller
053d0a0768 libnm: fix inconsistencies and assertions of "ipv[46].dns" handing
- nm_setting_ip_config_add_dns() and nm_setting_ip_config_remove_dns_by_value()
  used to assert that the provided input is valid. That is not
  documented and highly problematic.
  Our parsing code for keyfile, ifcfg-rh and GVariant rightly just call
  add. Likewise, nmcli. We cannot reasonably expect them to pre-validate
  the input. Why would we anyway?
  This is wrong in particular because we usually want the user to be
  able to construct invalid settings. That is often necessary, because
  whether a value is valid depends on other values. So in general, we
  can only validate when all properties are set. We have
  nm_connection_verify() for that, and asserting/validating during add
  is very wrong. Note that "add" still filters out duplicates, which
  may be an inconsistency, but well.
  Also, the user could set any bogus value via the NM_SETTING_IP_CONFIG_DNS
  property. Those should be allowed to be removed, and the same values
  should be allowed to be added via the add method.

- add() does a normalization, presumably so that the values look nice.
  Do the same normalization also when using the NM_SETTING_IP_CONFIG_DNS
  property setter.

- previously, the setter could also set unnormalized values. As
  nm_setting_ip_config_remove_dns_by_value() looked for the normalized
  value, you couldn't remove such values anymore. That is fixed now,
  by letting the property setter do the same normalization.

- don't allocate a GPtrArray unless we need it. No need for the extra
  allocation.

- in the property setter, first set the new value before destroying the
  previous GPtrArray. It might not be possible, but it's not clear to me
  whether the strv argument from the GValue is always deep-copied or
  whether it could contain strings to the DNS property itself.
2022-10-27 09:11:28 +02:00
Thomas Haller
d8ea008372 wifi/iwd: merge ip[46]_config_to_iwd_config()
It is almost always wrong, to split IPv4 and IPv6 behaviors at a high level.
Most of the code does something very similar. Combine the two functions.
and let them handle the difference closer to where it is.
2022-10-27 09:11:27 +02:00
Thomas Haller
63eaf168d1 libnm: add "dns-data" replacement for "ipv[46].dns" properties on D-Bus
On D-Bus, the properties "ipv[46].dns" are of type "au" and "aay",
respectively.

Btw, in particular "au" is bad, because we put there a big-endian
number. There is no D-Bus type to represent big endian numbers, so "u"
is bad because it can cause endianess problem when trying to remote
the D-Bus communication to another host (without explicitly
understanding which "u" properties need to swap for endinness).

Anyway. The plain addresses are not enough. We soon will also support
the DNS-over-TLS server name, or maybe a DoT port number. The previous
property was not extensible, so deprecate it and replace it by
"dns-data".

This one is just a list of strings. That is unlike "address-data" or
"route-data", which do a similar thing but are "a{sv}" dictionaries.
Here a string is supposed to be sufficient also for the future. Also,
because in nmcli and keyfile will will simply have a string format for
representing the extra data, not a structure (unlike for routes or
addresses).
2022-10-27 09:11:26 +02:00
Thomas Haller
3297b079b2 libnm: rework _nm_setting_use_legacy_property() to minimize dictionary lookups
The previous could would first check whether the new property is not
set. In almost all cases, the new property is actually set.

We can get away with fewer lookups, by checking for the expected things
first.
2022-10-27 09:11:25 +02:00
Thomas Haller
c8392018ca libnm: refactor to-dbus on the client skipping to serialize legacy properties
We have 4 legacy properties ("ipv[46].addresses", "ipv[46].routes") that
got replaced by newer variants ("ipv[46].address-data", "ipv[46].route-data").

When the client side of libnm (_nm_utils_is_manager_process) serializes
those properties, it must only serialize the newer version. That is so
that the forward/backward compatibility works as intended.

Previously, there was the NM_SETTING_PARAM_LEGACY GObject property flag.
That was fine, but not very clear.

For one, the legacy part of those properties is only about D-Bus. In
particular, they are not deprecated in libnm, keyfile, or nmcli. Thus
the name wasn't very clear.

Also, in the meantime we have more elaborate property meta data, that
goes beyond the meta data of the GObject property.

Move NM_SETTING_PARAM_LEGACY to NMSettInfoProperty.to_dbus_only_in_manager_process.
I think, this is a better name. It's also right at

```
     _nm_properties_override_gobj(
         properties_override,
         g_object_class_find_property(G_OBJECT_CLASS(setting_class), NM_SETTING_IP_CONFIG_ROUTES),
         NM_SETT_INFO_PROPERT_TYPE_DBUS(NM_G_VARIANT_TYPE("a(ayuayu)"),
                                        .to_dbus_fcn   = ip6_routes_to_dbus,
                                        .compare_fcn   = _nm_setting_ip_config_compare_fcn_routes,
                                        .from_dbus_fcn = ip6_routes_from_dbus, ),
         .to_dbus_only_in_manager_process = TRUE,
         .dbus_deprecated                 = TRUE, );
```

that is, directly at the place where we describe how the D-Bus property behaves.
2022-10-27 09:11:24 +02:00
Thomas Haller
b1ec664869 libnm: cleanup from/to dbus callbacks in ip[46]-config 2022-10-27 09:11:23 +02:00
Thomas Haller
05d0b81130 libnm: mark deprecated D-Bus properties in meta data
This has no effect (yet), but we will generate documentation
from this information. Also, it's just self-documenting code.
2022-10-27 09:11:23 +02:00
Thomas Haller
0fd7691b09 libnm: add NMSettInfoProperty.{,dbus_}deprecated flag to mark deprecated properties 2022-10-27 09:11:22 +02:00
Thomas Haller
bb9a9b8ee1 libnm: add extra arguments to _nm_properties_override_dbus() 2022-10-27 09:11:22 +02:00
Thomas Haller
e94abbc465 libnm: rename internal to/from dbus functions 2022-10-27 09:11:21 +02:00
Thomas Haller
8e3202e499 policy: refactor all_devices_not_active() to any_devices_active()
The double negation is hard to understand.
2022-10-26 13:50:50 +02:00
Beniamino Galvani
63f4783c59 core: merge branch 'bg/ipv6-dad'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1366
2022-10-26 13:31:03 +02:00
Beniamino Galvani
8e85c86add dhcp: improve detection of DADFAILED addresses
Instead of assuming any address that disappeared was because of a DAD
failure, check explicitly that either:

 - the address is still present with DADFAILED flag (in case it was a
   permanent address), or

 - the address was removed and platform recorded that it had the
   DADFAILED flag.
2022-10-26 10:08:53 +02:00
Beniamino Galvani
922ef4344e ndisc: log DAD failures at info level
A DAD failure is in most cases a symptom of a network
misconfiguration; as such it must be logged in the default
configuration (info level).

While at it, fix other log messages.
2022-10-26 10:08:53 +02:00
Beniamino Galvani
addb4e3a0c device: generate a new AC6 address when DAD fails
For addresses that fail DAD we need to call nm_ndisc_dad_failed() to
generate a new address if addrgenmode is stable-privacy.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1046
2022-10-26 10:08:53 +02:00
Beniamino Galvani
15d55e5a68 device: use nm_l3cfg_check_ready() in _dev_ipac6_ndisc_config_changed()
Instead of open coding the check for ready addresses, use
nm_l3cfg_check_ready().
2022-10-26 10:05:16 +02:00
Beniamino Galvani
5da8e0666b ndisc: accept multiple addresses in nm_ndisc_dad_failed()
Since we evaluate platform changes in a idle handler, there can be
multiple DAD failure at the same time that must generate a single
ndisc.configuration-change signal.

The function is unused at the moment.
2022-10-26 08:54:29 +02:00
Beniamino Galvani
afa208c862 core: return conflicting addresses from nm_l3cfg_check_ready()
It can be useful to know which addresses are conflicting, return them
from nm_l3cfg_check_ready().
2022-10-26 08:54:29 +02:00
Beniamino Galvani
19c0018f58 l3cfg: don't accept AF_UNSPEC in nm_l3cfg_check_ready()
All the callers pass either AF_INET or AF_INET6, drop support for
AF_UNSPEC; this simplifies the function for the next commit that adds
a @conflicts argument.
2022-10-26 08:54:29 +02:00
Beniamino Galvani
9feffe7ad4 platform: detect dadfailed IPv6 addresses during pruning
If an address is removed during pruning and it had the TENTATIVE flag
before, the most likely cause of the removal is that it failed DAD. It
could also be that the user removed it at the same time we needed to
resync the platform cache, but that seems more unlikely.
2022-10-26 08:54:29 +02:00
Beniamino Galvani
3f84ee27a0 platform: add mechanism to report removed IPv6 addresses that failed DAD 2022-10-26 08:54:29 +02:00
Thomas Haller
06bf0707ee platform/tests: merge branch 'th/platform-1'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1440
2022-10-26 08:25:59 +02:00
Thomas Haller
ff9f413fcc platform/tests: use nmtst_inet6_from_string() instead of *nmtst_inet6_from_string_p() 2022-10-26 08:24:29 +02:00
Thomas Haller
edfb4e578e platform/tests: add nmtst_inet6_from_string() helper
This returns a struct (not a pointer like nmtst_inet6_from_string_p()).
It is thus consistent with nmtst_inet4_from_string().
2022-10-26 08:24:28 +02:00
Thomas Haller
2786a30a7c platform/tests: rename nmtst_inet6_from_string() to nmtst_inet6_from_string_p()
This helper returns a pointer (to a thread local variable).
2022-10-26 08:24:28 +02:00
Thomas Haller
06cf1f5e2d platform/tests: extend monitor tool to dump the state of NMPlatform
This is useful for manual testing ("manual", in the sense that you can
write a script that tests the behavior of the platform cache, without
humanly reading the logfile).

Usage:

To write the content of the platform cache once:

  ./src/core/platform/tests/monitor -P -S './statefile'

To keep monitor running, and update the state file:

  ./src/core/platform/tests/monitor -S './statefile'
2022-10-26 08:24:28 +02:00
Thomas Haller
3654fc8145 platform/tests: make "external_command" int type
The variable is passed to nmtstp_run_command_check_external(), which accepts
-1 to mean choose randomly. Change the function signature to reflect that.
2022-10-26 08:24:28 +02:00
Thomas Haller
358d4c691d glib-aux: add nm_auto_unref_gdatetime cleanup macro 2022-10-26 08:24:22 +02:00