Commit graph

2701 commits

Author SHA1 Message Date
Lubomir Rintel
2e8f43e379 wwan/device-modem: don't enter available state until registered
Based on Ubuntu's "Modify NMDeviceModem's available logic" patch by
Tony Espy <espy@canonical.com>. The original commit message:

This patch modifies NMDeviceModem's available logic such that the device
is only considered available if the modem_state is
>= NM_MODEM_STATE_REGISTERED.  NMDevice defines 'available' as meaning the
device is in such a state that it can be activated.  This change prevents
NM from trying to activate a modem which is not yet ready to be activated.

Bug-Ubuntu: https://bugs.launchpad.net/bugs/1445080
https://github.com/NetworkManager/NetworkManager/pull/312
2019-03-12 16:02:04 +01:00
Lubomir Rintel
bf0c4e6ac2 all: codespell fixes
Codespel run with the same arguments as described in
commit 58510ed566 ('docs: misc. typos pt2').
2019-03-11 12:01:44 +01:00
Beniamino Galvani
505d2adbc2 device: restore IPv6 addresses when the link comes up
When the link goes down the kernel removes IPv6 addresses from the
interface. In update_ext_ip_config() we detect that addresses were
removed externally and drop them from various internal
configurations. Don't do that if the link is down so that those
addresses will be restored again on link up.
2019-03-09 15:31:46 +01:00
Beniamino Galvani
39b7257208 core: allow ignoring addresses when intersecting ip configs
Add a new argument to nm_ip_config_* helpers to also ignore addresses
similarly to what we already do for routes. This will be used in the
next commit; no change in behavior here.
2019-03-09 15:30:22 +01:00
Beniamino Galvani
056470a4ba device: reset the ipv6 DAD counter when the link comes up
We can detect false DAD failures if the link goes down. Don't try to
prevent them, but just reset the counter if the link goes down.
2019-03-09 15:27:54 +01:00
Beniamino Galvani
72385f363c device: don't try to add IPv6LL address to a down interface
When the interface is down DAD failures becomes irrelevant and we
shouldn't try to add a link-local address even if the configuration
contains other IPv6 addresses.
2019-03-09 15:25:47 +01:00
Lubomir Rintel
90fe78eb7f wwan/ofono: pass the right argument to manager proxy callback
Otherwise it will be dereferencing NULL when invoked.

Fixes: 58712c9546 ('ofono: take D-Bus proxy for ConnectionManager asynchronously')

https://github.com/NetworkManager/NetworkManager/pull/313
2019-03-08 13:40:18 +01:00
Thomas Haller
7dd44d6dc8 core: assert for valid NM_DEVICE_DEVICE_TYPE setting 2019-03-07 22:40:13 +01:00
Benjamin Berg
8d9365a973 core,wifi-p2p: Fix Wi-Fi P2P device type
The device type was set to the GType rather than a new value in the
NMDeviceType enum.

Add the corresponding enum entry, fix the device type and set the
routing priority to the same value as generic devices.
2019-03-07 22:17:09 +01:00
Thomas Haller
3990c92fbf wireguard: update TODO list for WireGuard devices 2019-03-07 17:54:25 +01:00
Thomas Haller
e46ba01867 libnm: rename and expose nm_utils_base64secret_decode() in libnm
A NetworkManager client requires an API to validate and decode
a base64 secret -- like it is used by WireGuard. If we don't have
this as part of the API, it's inconvenient. Expose it.

Rename it from _nm_utils_wireguard_decode_key(), to give it a more
general name.

Also, rename _nm_utils_wireguard_normalize_key() to
nm_utils_base64secret_normalize(). But this one we keep as internal
API. The user will care more about validating and decoding the base64
key. To convert the key back to base64, we don't need a public API in
libnm.

This is another ABI change since 1.16-rc1.
2019-03-07 17:54:25 +01:00
Beniamino Galvani
d2e95856e9 wifi-p2p: fix failed assertion when releasing supplicant interface
Fix the following failed assertion:

  <debug> device[0x11dfec0] (p2p-dev-wlp4s0): P2P: Releasing WPA supplicant interface.
  <debug> supplicant: setting WFD IEs for P2P operation
  (../src/devices/nm-device.c:14769):_set_state_full: runtime check failed: (priv->in_state_changed == FALSE)
  <info>  device (p2p-dev-wlp4s0): state change: unmanaged -> unavailable (reason 'supplicant-failed', sys-iface-state: 'external')
  <debug> device[0x11dfec0] (p2p-dev-wlp4s0): add_pending_action (1): 'waiting-for-supplicant'

supplicant_interfaces_release() can be called during a state change
(for example by device_state_changed()) and so it can't trigger
another state change.

nm_device_wifi_p2p_set_mgmt_iface() now doesn't force an immediate
state change and only schedules a recheck-available. This means that
the device can be in an available state without
priv->mgmt_iface. Adapt the code to deal gracefully with that
situation. In particular, we need to cancel pending timeout sources
(priv->sup_timeout_id) that use the management interface.

Fixes: 27bc2cb22a

https://github.com/NetworkManager/NetworkManager/pull/302
2019-03-06 08:03:54 +01:00
Thomas Haller
626beaf83e wireguard: implement direct "peer-routes" for WireGuard allowed-ips ranges 2019-03-05 09:53:21 +01:00
Thomas Haller
d5e93ae613 wireguard: add "mtu" setting for WireGuard profiles
This adds new API for 1.16.0 and is an ABI break since 1.16-rc1.
2019-03-05 09:53:21 +01:00
Thomas Haller
096247e60b device: expose nm_device_ip_config_new() as internal API 2019-03-05 09:53:21 +01:00
Thomas Haller
5e71f01605 device: merge stage3 and stage4 ip-config function for IPv4 and IPv6 2019-03-05 09:53:21 +01:00
Thomas Haller
03b708f7f7 device/trivial: rename wwan_ip_config to dev2_ip_config
dev2_ip_config (formerly wwan_ip_config) is only set by nm_device_set_dev2_ip_config()
(formerly nm_device_set_wwan_ip_config()), which is only called by NMDeviceModem.

For NMDeviceWireGuard we will also inject additional configuration
in the parent class. Rename and give it a wider purpose. The new name
merely indicates that this IP configuration is injected by a subclass
of NMDevice.
2019-03-05 09:53:21 +01:00
Thomas Haller
99abcf0105 device: merge IPv4 and IPv6 variant of nm_device_set_wwan_ip_config() 2019-03-05 09:53:21 +01:00
Thomas Haller
ee63e008d1 device: avoid setting an empty dev_ip_config_4 for activate_schedule_ip_config_result()
An empty NMIP4Config instance should have the same effect as %NULL.
Don't create it.
2019-03-05 09:53:21 +01:00
Thomas Haller
2f88523eef device/trivial: rename dev_ip4_config field
So that it follows the naming pattern of similar fields,
that exist in a variant for IPv4 and IPv6.
2019-03-05 09:53:21 +01:00
Thomas Haller
515e003eff device: unify IPv4 and IPv6 handling of IP state of device 2019-03-05 09:53:21 +01:00
Thomas Haller
ca14df5619 device/trivial: rename ip-state fields in NMDevicePrivate
Now they follow the naming pattern of ending in "_4" / "_6".
We will merge them and alias them to an "_x" array, like done
for similar fields.
2019-03-05 09:53:21 +01:00
Thomas Haller
2076550d8f device/trivial: rename IpState to NMDeviceIPState
It will be moved to a header file.
2019-03-05 09:53:21 +01:00
Thomas Haller
1585eaf473 device: unify IPv4 and IPv6 device methods for IP configs
It is preferable to treat IPv4 and IPv6 in a similar manner.
This moves the places where we differ down the call-stack.

It also make it clearer how IPv6 behaves differently. I think this
is a bug, but leave it for now.

+         /* If IP had previously failed, move it back to IP_CONF since we
+          * clearly now have configuration.
+          */
+         if (priv->ip6_state == IP_FAIL)
+              _set_ip_state (self, AF_INET6, IP_CONF);
2019-03-05 09:53:21 +01:00
Thomas Haller
2be022ad68 core: use nm_connection_get_setting_ip_config() helper 2019-03-05 09:53:21 +01:00
Thomas Haller
8f6a8d0517 libnm,core: fix device TYPE for Wi-Fi P2P devices
Don't use "wifip2p" for the type description.

    $ nmcli device
    DEVICE             TYPE      STATE         CONNECTION
    wlan0              wifi      connected     x
    p2p-dev-wlan0      wifip2p   disconnected  --

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/87
2019-02-26 09:13:03 +01:00
Thomas Haller
b1f6d53bc4 build/meson: increase timeouts for some tests
The defaults for test timeouts in meson is 30 seconds. That is not long
enough when running

  $ NMTST_USE_VALGRIND=1 ninja -C build test

Note that meson supports --timeout-multiplier, and automatically
increases the timeout when running under valgrind. However, meson
does not understand that we are running tests under valgrind via
NMTST_USE_VALGRIND=1 environment variable.

Timeouts are really not expected to be reached and are a mean of last
resort. Hence, increasing the timeout to a large value is likely to
have no effect or to fix test failures where the timeout was too rigid.
It's unlikely that the test indeed hangs and the increase of timeout
causes a unnecessary increase of waittime before aborting.
2019-02-23 07:20:49 +01:00
Thomas Haller
46bc5feb99 device: fix suppressing warning log about unsupported IPv6LL handling
Wrongly did not suppress the message

    <warn>  [1550844832.3749] device (tunl0): failed to disable userspace IPv6LL address handling (not-supported)

Fixes: d18f40320d
2019-02-22 15:32:17 +01:00
Beniamino Galvani
de1022285a device: do ARP announcements only after masters have a slave
Delay ARP announcements for masters until the first interfaces gets
enslaved. There is no point in doing it before as the ARP packets
would be dropped in most cases; also, if the first slave is added when
we already started announcing, the MAC of the master is going to
change and so the remaining ARPs will have a wrong "sender mac
address" field.

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

https://github.com/NetworkManager/NetworkManager/pull/301
2019-02-22 14:30:40 +01:00
Thomas Haller
2148d09482 core/wireguard: add support for WireGuard peers
That is slightly complex, because we need to (DNS) resolve the endpoints,
and we also have to retry periodically. For example, initially we may be
unable to resolve an endpoint, but later we may be.

What is also interesting is that during assume and reapply, we may not
have all information in the profile. Most notably, the private keys will
be missing. We need to cope with that and not reconfigure keys. However,
we still need to resolve names and update the endpoints.
2019-02-22 11:01:04 +01:00
Thomas Haller
7f455f0519 core/wireguard: add basic support for creating wireguard devices
Configuring peers (and allowed-ips of the peers) is not
yet supported.
2019-02-22 11:00:11 +01:00
Thomas Haller
b521f426ab libnm,cli: add NMSettingWireGuard
For now only add the core settings, no peers' data.

To support peers and the allowed-ips of the peers is more complicated
and will be done later. It's more complicated because these are nested
lists (allowed-ips) inside a list (peers). That is quite unusual and to
conveniently support that in D-Bus API, in keyfile format, in libnm,
and nmcli, is a effort.
Also, it's further complicated by the fact that each peer has a secret (the
preshared-key). Thus we probably need secret flags for each peer, which
is a novelty as well (until now we require a fixed set of secrets per
profile that is well known).
2019-02-22 11:00:10 +01:00
Thomas Haller
b7d4ad8547 wifi-p2p: drop WiFi-P2P "group-owner" property from D-Bus API and libnm
It's not yet implemented server-side.

Until it is clear that we need this property and until it is implemented,
drop it again from public API.

See-also: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/80#note_118004
2019-02-21 15:34:55 +01:00
Jonathan Kang
243af16c5b Add polkit action for Wi-Fi scans
Previously, Wi-Fi scans uses polkit action
"org.freedesktop.NetworkManager.network-control". This is introduced
in commit 5e3e19d0. But in a system with restrict polkit rules, for
example "org.freedesktop.NetworkManager.network-control" was set as
auth_admin. When you open the network panel of GNOME Control Center, a
polkit dialog will keep showing up asking for admin password, as GNOME
Control Center scans the Wi-Fi list every 15 seconds.

Fix that by adding a new polkit action
"org.freedesktop.NetworkManager.wifi.scan" so that distributions can
add specific rule to allow Wi-Fi scans.

[thaller@redhat.com: fix macro in "shared/nm-common-macros.h"]

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/68
2019-02-21 13:49:17 +01:00
Benjamin Berg
8fd5505ed5 device: Set WFD IEs when connecting to P2P device
Set the WFD IEs before trying to connect to a P2P device. Reset the
value when cancelling or when disconnecting.
2019-02-21 10:10:20 +01:00
Benjamin Berg
3d12dbc0a7 Remove WFD IEs property from P2P device
While this can be considered a property of the P2P device, the API will
require setting it through the settings when activating a connection. As
such, having a (read only) property on the device is not very useful, so
remove it again.
2019-02-21 10:10:20 +01:00
Beniamino Galvani
b5efcf08f4 all: move nm_utils_bin2hexstr_full() to shared
reuse++
2019-02-21 09:36:17 +01:00
Benjamin Berg
3a2aa5632d device: Recheck P2P availability after setting a supplicant interface
The newly set interface may already be in a READY state. In that case,
the device should progress into the DISCONNECTED state rather than
remaining in the UNAVAILABLE state.
2019-02-19 15:00:48 +01:00
Benjamin Berg
3e079e87a5 device: Destroy P2P device with its parent Wifi device
This can for example happen when a wifi device is unmanaged.
2019-02-19 14:04:37 +01:00
Benjamin Berg
27bc2cb22a device: Ensure P2P device is unavailable without wpa_supplicant
Put the device into UNAVAILABLE state when the corresponding WPA
supplicant management interface is unset. This is important to
explicitly clear any pending state changes that are not permissible when
there is no management interface.
2019-02-19 14:01:39 +01:00
Beniamino Galvani
29984c07cd ovs: fix dispose()
input and output must be freed only when not NULL.

Also, ovsdb_disconnect() should do nothing if there is no client.

Fixes: 830a5a14cb
2019-02-17 19:39:08 +01:00
Beniamino Galvani
b92f2c9323 ovs: don't leak a GCancellable on connection failure
Every time we clear priv->client we should also clear the cancellable
or it will be leaked.

Fixes: 830a5a14cb
2019-02-17 19:39:08 +01:00
Beniamino Galvani
139b9974fa ovs: fix leak of json objects
Fixes: 830a5a14cb
2019-02-17 19:39:07 +01:00
Beniamino Galvani
8d9685ef98 ovs: use nm_auto_decref_json 2019-02-17 19:39:07 +01:00
Thomas Haller
1423ad24c0 wifi/iwd: fix compiler warning about pointer cast in powered_changed()
../src/devices/wifi/nm-device-iwd.c: In function ‘powered_changed’:
    ../src/devices/wifi/nm-device-iwd.c:2336:15: warning: assignment from incompatible pointer type [enabled by default]
         interface = g_object_ref (priv->dbus_device_proxy);
                   ^
2019-02-17 11:14:08 +01:00
Thomas Haller
c3751a25a1 device: add mechanism to invoke act_stage2_config() function also for external/assume case
Usually, for external/assume we skip calling act_stage2_config().

Add a flag that allows the device to indicate that it always wants
to be called. This is useful, if the device wants to do some initialization
also for external/assume cases.
2019-02-14 08:00:29 +01:00
Thomas Haller
b45b087bbe device: split activate_stage2_device_config() steps for assumed/external check
Instead of performing a series of steps inside one check for
"!nm_device_sys_iface_state_is_external_or_assume (self)", perform
all steps individually (under the same check).

There is no change in behavior, but this is more logical to me.
We perform a series of steps, depending on condition. Each step
individually depends on a set of conditions, instead of checking
for a set of conditions and doing a series of independent steps.
2019-02-14 08:00:29 +01:00
Thomas Haller
afdf2a21df device: abort device activation if tc_commit() fails in stage2
After we change the device's state to NM_DEVICE_STATE_FAILED,
we must abort processing the current stage.

Fixes: e4bdb21909
2019-02-14 08:00:29 +01:00
Thomas Haller
6f35efe6fe policy: treat WireGuard devices as VPN for DNS
WireGuard devices are (will be) regular NMDevice implementations,
but NMDnsManager should treat them like VPN.

For that, reuse the device's type and nm_device_get_route_metric_default().
2019-02-14 08:00:29 +01:00
Thomas Haller
27169047c5 wifi-p2p: add FIXME comment for handling group_owner in NMDeviceWifiP2P 2019-02-13 16:01:03 +01:00