Commit graph

2022 commits

Author SHA1 Message Date
Beniamino Galvani
cd65351d29 device: fix _dev_addrgenmode6_set()
If addrgenmode=0 is already set, the function should still toggle
disable_ipv6 if needed, to stop the generation of temporary addresses.

Also, it should store the last set value into 'previous_mode_val'.

Fixes-test: @ipv6_keep_external_routes
2021-11-18 16:21:33 +01:00
Beniamino Galvani
bd7b5aa707 device: don't disable IPv6 when NM is managing IPv6
If NM set addrgenmode=none, it's because it manages the IPv6 in user
space. In such case it should never disable IPv6.
2021-11-18 16:21:33 +01:00
Beniamino Galvani
a319193333 device: fix optional 802.1X authentication
If the authentication is optional, we are going to re-enter stage2. Set
the "ready" variable so that we can return success immediately and
skip to stage3.
2021-11-18 16:21:33 +01:00
Beniamino Galvani
de5e1eb9e5 device: don't fail immediately on DHCP expiry
If we had a lease and it expired, don't fail immediately. The client
will try to obtain a new lease and it will send a NO_LEASE_TIMEOUT
event once it fails. Only at that time we should fail.
2021-11-18 16:21:33 +01:00
Fernando Fernandez Mancera
e9bd8b3dac device: fix wrong assignment in ip_state_other comparison
Fixes: 0b05c5adb4b0 ('device: fail when a addr family fails and the other is disabled')
2021-11-18 16:21:33 +01:00
Beniamino Galvani
70676b3d0a l3cfg: set ipv6 token
Fixes-test: @ipv6_token
2021-11-18 16:21:33 +01:00
Beniamino Galvani
d2fc0984a1 l3cd: add ipv6 token 2021-11-18 16:21:33 +01:00
Thomas Haller
682d2c842a core: drop redundant "gateway" variable for NMIPConfig
The "gateway" variable was redundant to best_default_route. It was
somewhat convenient to have, because the best_default_route pointer
might change, but the next hop might still be the same. So it was easy
to track whether it changes.

But it's also redundant information. By relying on best_default_route
alone we have all the information we need.
2021-11-18 16:21:32 +01:00
Beniamino Galvani
bcf31a9b29 device: fix assertion failure on master carrier change
Fix the following assertion failure:

 "nm_assert(NM_DEVICE_GET_PRIVATE(self)->act_request.obj);"

  0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  1  __GI_abort () at abort.c:79
  2  g_assertion_message () at gtestutils.c:2533
  3  g_assertion_message_expr () at gtestutils.c:2556
  4  activation_source_invoke_or_schedule (self=0x55b543884610 [NMDeviceBridge], func=0x55b542e8c940 <activate_stage3_ip_config>, do_sync=0) at src/core/devices/nm-device.c:8854
  5  nm_device_set_carrier (self=0x55b543884610 [NMDeviceBridge], carrier=1) at src/core/devices/nm-device.c:6217
  6  device_link_changed (user_data=user_data@entry=0x55b543884610) at src/core/devices/nm-device.c:6479
  7  g_idle_dispatch (source=0x55b5438577d0, callback=0x55b542e95980 <device_link_changed>, user_data=0x55b543884610) at gmain.c:5579
  8  g_main_dispatch (context=0x55b543719bc0) at gmain.c:3193
  9  g_main_context_dispatch (context=context@entry=0x55b543719bc0) at gmain.c:3873
  10 g_main_context_iterate (context=0x55b543719bc0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3946
2021-11-18 16:21:32 +01:00
Beniamino Galvani
cc3ec40513 device: fail when a addr family fails and the other is disabled
Fixes-test: @ipv4_method_shared_with_already_running_dnsmasq
2021-11-18 16:21:32 +01:00
Beniamino Galvani
8f8e912e3b core: also export 0.0.0.0 as gateway in IP configuration
The IP configuration exported over D-Bus for a device has a "gateway"
property. If the device has a default route without a gateway, before
the L3 rework the gateway used to be exported as "0.0.0.0". That seems
useful to indicate that the device has a default route, but without
a next hop. Restore that behavior.

Fixes-test: @preserve_route_to_generic_device
2021-11-18 16:21:32 +01:00
Beniamino Galvani
9380d3c715 device: fix waiting for IPv6 autoconf addresses
When NM is restarted and the previous connection gets assumed,
addresses are already configured; in such case we don't need to wait.
2021-11-18 16:21:32 +01:00
Beniamino Galvani
a2d96a5c2e vlan: preserve external IP changes on parent MAC update
When the parent MAC is updated, a VLAN device also updates its MAC and
then performs a new commit to restore IP configuration. This should
not remove addresses added externally. Change the commit type to
UPDATE.

Fixes-test: @static_route_persists_mac_change
2021-11-18 16:21:32 +01:00
Beniamino Galvani
96850933bb core: ignore external routes when generating connections 2021-11-18 16:21:32 +01:00
Beniamino Galvani
d8d6ecf37a l3cfg: remove event down source on finalize 2021-11-18 16:21:32 +01:00
Beniamino Galvani
8fb8e334b8 device: wait that IPv6 autoconf addresses become non-tentative
Fixes-test: @ipv6_preserve_cached_routes
2021-11-18 16:21:32 +01:00
Beniamino Galvani
98da62642b device: enable IPv6 in ip6_managed_setup()
IPv6 must be enabled when the device enters the DISCONNECTED state.
2021-11-18 16:21:31 +01:00
Beniamino Galvani
b86388bef3 core: avoid stale entries in the DNS manager
When a virtual interface is removed externally, the device is
unrealized and the ifindex is cleared; this also detaches the existing
l3cfg from the device. At this point the l3cd entry for the device
lingers forever in the DNS manager.

Emit a last L3CD_CHANGED so that the old entry gets removed.

Fixes-test: @disconnect_from_pppoe
2021-11-18 16:21:31 +01:00
Beniamino Galvani
443c380f29 core: update hostname when addresses on platform change 2021-11-18 16:21:31 +01:00
Beniamino Galvani
c7ecaeb103 device: prefer non-LL and non-deprecated IPv6 address for hostname 2021-11-18 16:21:31 +01:00
Beniamino Galvani
a1de041184 device: reschedule a assume check after platform changes 2021-11-18 16:21:31 +01:00
Beniamino Galvani
36a97ad9ec device: set up IPv6 before start manual method 2021-11-18 16:21:31 +01:00
Beniamino Galvani
e5d28be022 wwan: don't start generic IP configuration methods for NMDeviceModem 2021-11-18 16:21:31 +01:00
Beniamino Galvani
92e1b6650c wwan: fix signal definition 2021-11-18 16:21:31 +01:00
Beniamino Galvani
63ae9cd035 wwan: schedule stage2 when ppp-mgr gets an ifindex 2021-11-18 16:21:31 +01:00
Beniamino Galvani
8d40d03a2c dhcp: honor the send_hostname property 2021-11-18 16:21:31 +01:00
Beniamino Galvani
32443ef3b5 dns: fix assertion failure
nm_l3_config_data_get_searches() and nm_l3_config_data_get_domains()
require an 'out_len' argument.
2021-11-18 16:21:30 +01:00
Beniamino Galvani
e9c17fcc9b l3cfg: default to 'main' route table sync mode
If no l3cd specifies a route table sync mode, use 'main' as default.

Fixes-test: @ipv6_route_set_route_with_tables_reapply
2021-11-18 16:21:30 +01:00
Beniamino Galvani
23d61367b3 core: set the route table for the ipv6 link-local method
Previously the prefix route fe80::/64 was always added to the main
table.

Fixes-test: @ipv6_route_set_route_with_tables
2021-11-18 16:21:30 +01:00
Beniamino Galvani
e732cb9a70 device: clear shared4 l3cd on disconnect
Fixes-test: @vlan_connection_down_with_autoconnect
Fixes-test: @vlan_disconnect_device_with_autoconnect
2021-11-18 16:21:30 +01:00
Thomas Haller
58287cbcc0 core: rework IP configuration in NetworkManager using layer 3 configuration
Completely rework IP configuration in the daemon. Use NML3Cfg as layer 3
manager for the IP configuration of an interface. Use NML3ConfigData as
pieces of configuration that the various components collect and
configure. NMDevice is managing most of the IP configuration at a higher
level, that is, it starts DHCP and other IP methods. Rework the state
handling there.

This is a huge rework of how NetworkManager daemon handles IP
configuration. Some fallout is to be expected.

It appears the patch deletes many lines of code. That is not accurate, because
you also have to count the files `src/core/nm-l3*`, which were unused previously.

Co-authored-by: Beniamino Galvani <bgalvani@redhat.com>
2021-11-18 16:21:29 +01:00
Thomas Haller
aeb2426e88
libnm: change default value for "dcb.app-fcoe-mode" property
String properties in libnm's NMSetting really should have NULL as a
default value. The only property that didn't, was "dcb.app-fcoe-mode".

Change the default so that it is also NULL.

Changing a default value is an API change, but in this case probably no
issue. For one, DCB is little used. But also, it's not clear who would
care and notice the change. Also, because previously verify() would reject
a NULL value as invalid. That means, there are no existing, valid profiles
that have this value set to NULL.  We just make NULL the default, and
define that it means the same as "fabric".

Note that when we convert integer properties to D-Bus/GVariant, we often
omit the default value. For string properties, they are serialized as
"s" variant type. As such, NULL cannot be expressed as "s" type, so we
represent NULL by omitting the property. That makes especially sense if
the default value is also NULL. Otherwise, it's rather odd. We change
that, and we will now always express non-NULL value on D-Bus and let
NULL be encoded by omitting the property.
2021-11-04 20:25:18 +01:00
Thomas Haller
38d81cfa89
ifcfg: always read/write KEY_DCB_APP_FCOE_MODE key
The settings plugin is not supposed to normalize the profile. It should
read/write what is, and let NMConnection handle what is valid and what
needs normalization.
2021-11-04 20:25:18 +01:00
Thomas Haller
572ce7b7a7
glib-aux/trivial: rename GBytes helper API
Give a consistent name.

A bit odd are now the names nm_g_bytes_hash() and nm_g_bytes_equal()
as they go together with nm_pg_bytes_hash()/nm_pg_bytes_equal().
But here the problem is more with the naming of "nm_p*_{equal,hash}()"
functions, which probably should be renamed to "nm_*_ptr_{equal,hash}()".
2021-11-04 20:25:18 +01:00
Thomas Haller
ea7ce48c00
trivial: fix code style
Fixes: de6d069dce ('ndisc: send router solicitations before expiry')
2021-11-04 20:23:07 +01:00
Harald van Dijk
58bfcffd59 core: support linking with LLD 13
LLD 13 adds -z start-stop-gc and makes it the default, resulting in:

    CCLD     src/core/NetworkManager-all-sym
  ld.lld: error: undefined symbol: __stop_connection_defaults
  >>> referenced by nm-config.c:0 (src/core/nm-config.c:0)
  >>>               libNetworkManager_la-nm-config.o:(read_config) in archive src/core/.libs/libNetworkManager.a
  >>> referenced by nm-config-data.c:1598 (src/core/nm-config-data.c:1598)
  >>>               libNetworkManager_la-nm-config-data.o:(nm_config_data_get_connection_default) in archive src/core/.libs/libNetworkManager.a
  >>> referenced by nm-config-data.c:0 (src/core/nm-config-data.c:0)
  >>>               libNetworkManager_la-nm-config-data.o:(nm_config_data_get_connection_default) in archive src/core/.libs/libNetworkManager.a

  ld.lld: error: undefined symbol: __start_connection_defaults
  >>> referenced by nm-config.c:0 (src/core/nm-config.c:0)
  >>>               libNetworkManager_la-nm-config.o:(read_config) in archive src/core/.libs/libNetworkManager.a
  >>> referenced by nm-config.c:0 (src/core/nm-config.c:0)
  >>>               libNetworkManager_la-nm-config.o:(read_config) in archive src/core/.libs/libNetworkManager.a
  >>> referenced by nm-config.c:0 (src/core/nm-config.c:0)
  >>>               libNetworkManager_la-nm-config.o:(read_config) in archive src/core/.libs/libNetworkManager.a
  >>> referenced 2 more times
  clang: error: linker command failed with exit code 1 (use -v to see invocation)

Add __attribute__((__retain__)) to prevent GC of the connection
defaults.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1008
2021-11-02 12:42:51 +01:00
Lubomir Rintel
73ac6dfb8a policy: send ip configs to the DNS manager earlier
Don't wait until the device is ACTIVATED -- pass them as soon as they're
valid. They should be applied at the moment the device enters ACTIVATED
state.

https://bugzilla.redhat.com/show_bug.cgi?id=2006677
2021-11-02 12:42:51 +01:00
Lubomir Rintel
5ec8ee47b4 Revert "core: make ActiveConnection emit StateChanged a bit later"
Thomas thinks this is a bad idea and probably is right:
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1000#note_1122853

This reverts commit 4ae846b9c6.
2021-11-02 12:42:51 +01:00
Lubomir Rintel
c6dc7a7ea7 Revert "core: make Device emit StateChanged a bit later"
Thomas thinks this is a bad idea and probably is right:
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1000#note_1122853

This reverts commit c75b7dd893.
2021-11-02 12:42:51 +01:00
Jonas Kümmerlin
de6d069dce ndisc: send router solicitations before expiry
There are routers out in the wild which won't send unsolicited
router advertisements.

In the past, these setups still worked because NetworkManager
used to send router solicitations whenever the half-life of
dns servers and dns domains expired, but this has been changed
in commit 03c6d8280c ('ndisc: don't call solicit_routers()
from clean_dns_*() functions').

We will now schedule router solicitation to be started again
about one minute before advertised entities expire.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/997
2021-11-02 10:32:14 +01:00
Beniamino Galvani
d8186b1253 core: better handle sd-resolved errors when resolving hostnames
If NM tries to resolve a link-local address, systemd-resolved returns
error "org.freedesktop.resolve1.NoNameServers" because those addresses
can only be resolved via other protocols like LLMNR or mDNS.

Previously NM would fall back to spawning the helper, which would ask
again to systemd-resolved via /etc/resolv.conf. In this way, a
synthetic result (or one obtained not from DNS) would be returned.

We must avoid non-DNS results. When systemd-resolved returns an error
that is not a D-Bus one (as MethodNotFound) but is a
"org.fd.resolve1.*" [1], we can assume that systemd-resolved is
running properly and we shall never fall back to spawning the helper.

[1] https://www.freedesktop.org/wiki/Software/systemd/resolved/#commonerrors

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/833
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1006
2021-10-29 16:43:27 +02:00
Lubomir Rintel
4ae846b9c6 core: make ActiveConnection emit StateChanged a bit later
We need to make sure StateChanged goes on the D-Bus only after the
policy is done dealing with the state change internally.

This is done so that we can be sure the DNS changes are committed at the
time "nmcli c up" returns.

https://bugzilla.redhat.com/show_bug.cgi?id=2006677
2021-10-28 13:21:15 +02:00
Lubomir Rintel
c75b7dd893 core: make Device emit StateChanged a bit later
We need to make sure StateChanged goes on the D-Bus only after the
policy is done dealing with the state change internally.

This is done so that we can be sure the DNS changes are committed at the
time "nmcli c up" returns.

https://bugzilla.redhat.com/show_bug.cgi?id=2006677
2021-10-27 15:53:16 +02:00
Fernando Fernandez Mancera
ff9b64c923 core: reload config for active devices
When NetworkManager is reloaded the config from active devices is not
being reloaded properly.

Related: https://bugzilla.redhat.com/1852445

Fixes: 121c58f0c4 ('core: set number of SR-IOV VFs asynchronously')

Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
2021-10-18 09:53:15 +02:00
Thomas Haller
30fa9949e5
l3cfg: fix "maybe-uninitialized" warning in _l3_commit_ndisc_params() 2021-10-17 14:59:31 +02:00
Thomas Haller
5c48c5d5d6
l3cfg: set IPv6 sysctls during NML3Cfg commit 2021-10-17 10:41:32 +02:00
Thomas Haller
4b270448e4
l3cfg: add addr_family parameter to nm_l3cfg_check_ready()
We have "ipv[46].may-fail", which are per-address family. This works
together with nm_l3cfg_check_ready(), where we check whether an
NML3ConfigData is ready. We need to have that check also per-address
family.
2021-10-17 10:41:31 +02:00
Robin Ebert
a2f6cde3eb
core: Save whether SetLinkDNSOverTLS is supported 2021-10-15 10:01:13 +02:00
Robin Ebert
b652202829
ifcfg-rh: add support for connection.dns-over-tls 2021-10-15 10:00:53 +02:00
Robin Ebert
1a98cf1669
core: add support for connection.dns-over-tls 2021-10-15 10:00:31 +02:00