Commit graph

324 commits

Author SHA1 Message Date
Andrew Zaborowski
228508a88c iwd: Don't require secrets for IWD Known Networks
This is mainly to enable using 8021x networks, which have to be
preprovisioned as an IWD config file to be supported and can not be
configured by asking the user for secrets over DBus, this is an IWD's
design choice.

Note that this assumes that secrets are only used during the Stage 2 of
the activation, i.e. for the wifi handshake, not in the later stages.
2017-12-21 11:07:56 +01:00
Andrew Zaborowski
b2ee8e8704 iwd: Track IWD Known Networks
Keep a list of IWD's Known Networks which are networks that have their
configurations stored by IWD including the secrets, either because they
have been connected to before or because they were preprovisioned on the
machine.
2017-12-21 11:07:55 +01:00
Andrew Zaborowski
ab8fc07640 iwd: Remove a stray return and a newline 2017-12-21 11:07:55 +01:00
Lubomir Rintel
6672c5e92e all: get rid of a handful of unused-but-set variables 2017-12-18 13:29:32 +01:00
Iñigo Martínez
d849366230 build: rename unit tests with the test- pattern
There are some tests located in different directories which are
using the same name. To avoid any confussion a prefix was used to
name the test and the target.

This patch uses the prefix just for the target, to avoid any
collision that may happen, and uses the `test-` pattern as the
name.

https://mail.gnome.org/archives/networkmanager-list/2017-December/msg00051.html
2017-12-14 20:07:38 +01:00
Iñigo Martínez
03637ad8b5 build: add initial support for meson build system
meson is a build system focused on speed an ease of use, which
helps speeding up the software development. This patch adds meson
support along autotools.

[thaller@redhat.com: rebased patch and adjusted for iwd support]

https://mail.gnome.org/archives/networkmanager-list/2017-December/msg00022.html
2017-12-13 15:48:50 +01:00
Thomas Haller
e96fabfc18 wifi: remove unused variables from iwd device 2017-12-13 14:30:13 +01:00
Thomas Haller
af6f2e49b4 wifi: downgrade logging level and support reloading "wifi-backend" configuration
NM_CONFIG_GET_DATA_ORIG is the configuration that was loaded the first time.
NM_CONFIG_GET_DATA is the currently loaded one. Sometimes we want to always
stick to the original configuration, if we don't support reloading the
parameter (for example main.plugins, because it would be cumbersome to properly
implementing loading/unloading setting plugins.

In this case however, we can allow reloading the configuration just fine.
Of course, this only matters, if the device appears after the configuration
is reloaded, for example by reloading the driver.

Also, don't log any warnings, unless necessary.
2017-12-13 14:15:35 +01:00
Andrew Zaborowski
4d1025f602 devices/wifi: Register an IWD PSK agent on dbus
Add the PSK agent support to support PSK networks.  Note that the PSK
itself will be saved by IWD on the first successful connection to the
network and will not be updated when it is changed by the user on the NM
side, this still needs fixing like a bunch of other problems.

[bgalvani@redhat.com: fix checking return value of nm_utils_random_bytes()]
2017-12-13 14:15:35 +01:00
Andrew Zaborowski
3967eca447 devices/wifi: Add the wifi-backend config option
Let the config file select between creating classes of NMDeviceWifi
(for the usual wpa_supplicant based devices) and NMDeviceIwd depending
on the new NetworkManager.conf setting.

[bgalvani@redhat.com: fix leaking @backend in create_device()]
2017-12-13 14:15:35 +01:00
Andrew Zaborowski
a25d99f54b devices/wifi: Track IWD devices, match to NMDeviceIwd objects
Add the NMIwdManager singleton to be responsible for matching
NMDeviceIwd objects created from platform devices, to IWD Device dbus
objects when they appear/disappear.
2017-12-13 14:15:35 +01:00
Andrew Zaborowski
ec1db966f7 devices/wifi: Add NMDeviceIwd class to support IWD backend
This is very similar to NMDeviceWifi but simplified to remove the things
currently unsupported and with calls to nm_platform_wifi_* and
nm_supplicant_* replaced with IWD DBus API calls.  Only unsecured
infrastructure-mode networks are supported here.

[bgalvani@redhat.com: fix compilation error after rebase for
  NMActRequestGetSecretsCallId]
[thaller@redhat.com: don't use _() macro strings server side.
  Translating strings only makes sense for clients that set environment
  variables accordingly.]
2017-12-13 14:15:35 +01:00
Andrew Zaborowski
89bbcb816b devices/wifi: Move is_manf_default_ssid to nm-wifi-utils.c
Move the function for easier code reuse.
2017-12-13 13:10:27 +01:00
Andrew Zaborowski
0ff9471837 devices/wifi: Move AP list utilities to nm-wifi-ap.c
Move three functions for easier code reuse.
2017-12-13 13:10:27 +01:00
Thomas Haller
51531c9539 core: merge nm_settings_get_connections_sorted() with nm_settings_get_connections_clone() 2017-11-27 14:04:11 +01:00
Thomas Haller
e5e291b65f core: refactor NMActRequestGetSecretsCallId typedef not to be a pointer to struct
Typedefs to structs are fine, but a typedef for a pointer seems confusing to
me. Let's avoid it.
2017-11-24 16:31:29 +01:00
Thomas Haller
816adbe89c device/olpc-mesh: reject autoconnect requests early via get_autoconnect_allowed()
OLPC devices cannot autoconnect, according to can_auto_connect().
We should instead reject any attempt to autoconnect earlier, via
get_autoconnect_allowed().

(cherry picked from commit 7074b88a6a)
2017-11-08 12:35:10 +01:00
Thomas Haller
1433682c28 device: inline NMDevice's implementation of can_auto_connect()
Derived classes should not modify or overwrite this essential behavior
of can_auto_connect(). It doesn't belong to the virtual function.

(cherry picked from commit 715aebe08a)
2017-11-08 12:35:10 +01:00
Thomas Haller
b49c6fb98a device: drop stub implementation of get_autoconnect_allowed() in NMDevice
(cherry picked from commit 9a7e668dbb)
2017-11-08 12:35:09 +01:00
Thomas Haller
72756994d4 wifi: use connection.auth-retries to handle authentication in NMDeviceWifi 2017-11-02 11:41:01 +01:00
Thomas Haller
e3a582202f wifi: refactor nm_wifi_utils_level_to_quality() not to assert
Apparantly, the assert might fail (on i386?). Unclear why that would possibly
happen. Anyway, replace the assert.
2017-10-30 14:14:18 +01:00
Thomas Haller
8cbb6d9e86 wifi/tests: add test whether nm_wifi_utils_level_to_quality() is in range 2017-10-30 14:14:17 +01:00
Thomas Haller
3434261811 core,clients: use our own string hashing function nm_str_hash()
Replace the usage of g_str_hash() with our own nm_str_hash().

GLib's g_str_hash() uses djb2 hashing function, just like we
do at the moment. The only difference is, that we use a diffrent
seed value.

Note, that we initialize the hash seed with random data (by calling
getrandom() or reading /dev/urandom). That is a change compared to
before.

This change of the hashing function and accessing the random pool
might be undesired for libnm/libnm-core. Hence, the change is not
done there as it possibly changes behavior for public API. Maybe
we should do that later though.

At this point, there isn't much of a change. This patch becomes
interesting, if we decide to use a different hashing algorithm.
2017-10-18 13:05:00 +02:00
Beniamino Galvani
239c59a627 src/devices: use macros for property and signal names 2017-09-18 15:40:31 +02:00
Thomas Haller
1aa36dde94 device: enable support for ipv6.dhcp-timeout
- cleanup data type and use guint32 consistently. We might want to
  introduce a new "infinity" value. But since libnm's
  NM_SETTING_IP_CONFIG_DHCP_TIMEOUT asserts against the range
  0 - G_MAXINT32, we cannot express it as -1 anyway. So, infinity
  will have the numerical value G_MAXINT32, hence guint32 is just
  fine.

- make use of existing ipv6.dhcp-timeout setting and add global
  default configuration in NetworkManager.conf

- instead of having subclasses call nm_device_set_dhcp_timeout(),
  add a virtual function get_dhcp_timeout().
2017-09-11 15:05:57 +02:00
Dan Williams
4acc17053b devices/wifi: move scan option processing to D-Bus request scan handler
Only the D-Bus bits use it, and we wouldn't pass a GVariant array around
in internal code anyway.  Also validate the scan options earlier rather
than waiting for the supplicant to tell us they are invalid.
2017-08-11 12:35:01 -05:00
Dan Williams
fd6ddcc794 devices/wifi: delegate connected periodic scanning to the supplicant (bgo #766482)
Enable background scanning for most WiFi connections except for
shared/AP and BSSID-locked ones.  Make the non-WPA-Enterprise
interval very, very long to effectively disable periodic scanning
while connected.

Related: https://bugzilla.gnome.org/show_bug.cgi?id=766482
2017-08-11 12:35:01 -05:00
Dan Williams
631ca80692 devices/wifi: flip meaning of scanning allowed signal
Change it to return TRUE when scanning is prohibited so that we
don't have to use use g_signal_emitv() and its special handling of
return values.  Make the return value only change when we don't
want the default behavior (which would be to allow the scan).

Also add a parameter to the signal indicating whether the scan is
user/dbus-requested or whether it's an internal periodic scan.
2017-08-11 11:59:58 -05:00
Thomas Haller
4ca3002b86 device: don't set MTU of device unless explicitly configured
Since commit 2b51d3967 "device: merge branch 'th/device-mtu-bgo777251'",
we always set the MTU for certain device types during activation. Even
if the MTU is neither specified via the connection nor other means, like
DHCP.

Revert that change. On activation, if nothing explicitly configures the
MTU, leave it unchanged. This is like what we do with ethernet's
cloned-mac-address, which has a default value "preserve".
So, as last resort the default value for MTU is now 0 (don't change),
instead of depending on the device type.

Note that you also can override the default value in global
configuration via NetworkManager.conf.

This behavior makes sense, because whenever NM actively resets the MTU,
it remembers the previous value and restores it when deactivating
the connection. That wasn't implemented before 2b51d3967, and the
MTU would depend on which connection was previously active. That
is no longer an issue as the MTU gets reset when deactivating.

https://bugzilla.redhat.com/show_bug.cgi?id=1460760
2017-06-13 15:05:30 +02:00
Thomas Haller
8870b7ab12 wifi: change logging about probe-scanning SSIDs
The SSID is not "hidden". It is the wildcard SSID.

See build_hidden_probe_list().
2017-06-03 17:46:06 +02:00
Thomas Haller
c5fb410998 wifi: fix completing Wi-Fi connection for AP mode
In AP mode we should not look up an access point. It is wrong to
do, and it ends up marking the connection as hidden.

It seems wrong to me that if the client explicitly set
hidden=FALSE before AddAndActivate(), that complete_connection()
would still set it to TRUE if it cannot find the access
point. That is, because complete_connection() does not know
whether hidden was omitted or set intentionally by the user.
2017-06-03 17:42:22 +02:00
Thomas Haller
74335004f3 wifi: exclude AP mode wifi connection from hidden-scan list
It makes no sense to scan for those.
2017-06-03 17:39:28 +02:00
Thomas Haller
5b4cf8f762 wifi: reject WPS PSK secret with non-UTF-8 characters (part 2)
We must reject '\0' characters inside the PSK as well.

Fixes: ac436dc2c4
2017-05-20 13:05:07 +02:00
Thomas Haller
d5c857307e wifi: properly handle floating GVariant in supplicant_iface_wps_credentials_cb()
g_variant_new_parsed() returns a floating reference. Later, we pass
the floating reference to nm_settings_connection_new_secrets(),
but don't transfer ownership.

That might not be a bug (I didn't check), but it requires that
nm_settings_connection_new_secrets() does not take a reference
to the secrets variant.

Convert the floating reference to a real reference to avoid
this dangerous pattern.

Fixes: 0eb7617504
2017-05-19 19:36:26 +02:00
Thomas Haller
ac436dc2c4 wifi: reject WPS PSK secret with non-UTF-8 characters
We pack the PSK byte array in a GVariant of type string,
hence all characters must be valid UTF-8.

Maybe we should do something more sophisticated but let's
just ignore such pass phrases.

Fixes: 0eb7617504
2017-05-19 19:36:10 +02:00
Thomas Haller
aaefa2b07f wifi: fix check for PSK for new WPS credentials
src/devices/wifi/nm-device-wifi.c:1855:20: error: logical ‘or’ of collectively exhaustive tests is always true [-Werror=logical-op]
      if (psk_len >= 8 || psk_len <= 63) {
                       ^~

Fixes: 0eb7617504
2017-05-18 18:21:27 +02:00
Lubomir Rintel
0eb7617504 wifi: attempt a WPS enroll when secrets are missing
If the supplicant returns the credentials, update the PSK in the
connection and disable further WPS enrollment attempts.
2017-05-15 12:59:55 +02:00
Lubomir Rintel
5c80571006 wifi/ap: maintain the WPS flags
Exposure of this property on D-Bus would be useful for the GUIs to encourage
the users to enter a PIN or push a button.

We'll also use it to decide whether a connection will initiate WPS
enrollment unless the user overrides the default.
2017-05-15 12:59:55 +02:00
Lubomir Rintel
a3040bf92f wifi/ap: add flags accessor
The wifi device will inspect this to decide whether to initiate a WPS enrollment
unless the user overrides the default.
2017-05-15 12:59:55 +02:00
Beniamino Galvani
acb70d84f9 supplicant: configure PMF for each connection
Now that we have a PMF connection property, get rid of the previous
code to globally enable/disable PMF and use the 'ieee80211w'
configuration option for each configured network when the supplicant
supports it.
2017-04-28 09:46:06 +02:00
Thomas Haller
94d9ee129d device: don't use platform singleton getter in device subclasses
Reduce the use of NM_PLATFORM_GET / nm_platform_get() to get
the platform singleton instance.

For one, this is a step towards supporting namespaces, where we need
to use different NMNetns/NMPlatform instances depending on in which
namespace the device lives.

Also, we should reduce our use of singletons. They are difficult to
coordinate on shutdown. Instead there should be a clear order of
dependencies, expressed by owning a reference to those singelton
instances. We already own a reference to the platform singelton,
so use it and avoid NM_PLATFORM_GET.
2017-04-18 15:49:14 +02:00
Lubomir Rintel
bacb68f3f6 wifi/test-general: don't do g_message() in test
An unexpected message causes the test to abort after the first line of
output.
2017-04-15 12:30:05 +02:00
Lubomir Rintel
0234172923 wifi: only attempt to set the scan MAC address when it actually changes
The address change involves setting the link down which causes the supplicant
interface to change state and in turn another scan attempt. This could lead to
a loop in case of broken drivers that are not able to change the MAC address
iff the MAC address is attempted at each scan request.

https://bugzilla.redhat.com/show_bug.cgi?id=1382741
2017-04-11 16:39:31 +02:00
Beniamino Galvani
21c22f2f96 wifi: fix HT max rate calculation
The rates of MCSs are not monotonically increasing.
2017-04-10 13:37:24 +02:00
James Kalbfleisch
cd91b7e119 wifi: parse the first 77 bits of the supported mcs set 2017-04-10 13:37:24 +02:00
Thomas Haller
2b64961d05 wifi: avoid buffer overflow reading IEs 2017-04-10 13:37:24 +02:00
Thomas Haller
961d572472 wifi: rename ieee80211_eid capability defines
IEEE_80211_IE_VHT_CAP has zero hits searching the internet.
WLAN_EID_VHT_CAPABILITY is how the same define is called by
kernel's "include/linux/ieee80211.h".

Use the same name as kernel.

Also, collect the maximum of @max_rate.
2017-04-10 13:37:24 +02:00
Thomas Haller
0c6097ccbe wifi/trivial: rename get_max_rate*() functions 2017-04-10 13:37:24 +02:00
Thomas Haller
5bd7ff2ec0 wifi: collect maximum max-bitrate in nm_wifi_ap_update_from_properties() 2017-04-10 13:37:24 +02:00
Thomas Haller
b0016d47f1 wifi: fix unsigned error return value for get_max_rate()
Signal error via 0, not -1.

Also, if the length of the array is unexpected, error out.
2017-04-10 13:37:24 +02:00