Commit graph

30 commits

Author SHA1 Message Date
Beniamino Galvani
2d06a4e11a supplicant: set error when interface creation fails and was cancelled
https://bugzilla.redhat.com/show_bug.cgi?id=1823164

Fixes: b83f07916a ('supplicant: large rework of wpa_supplicant handling')
(cherry picked from commit fb023cc6e8)
2020-04-21 17:27:49 +02:00
Thomas Haller
11797f4ad4 supplicant: fix crash setting supplicant state down
When we receive a "InterfaceRemoved" signal, we will end up calling
set_state_down(). That emits a "state" change signal, which causes
NMDeviceWifi to unref the supplicant interface. This may already
give up the last reference, and we cleanup the supplicant state
(by again calling set_state_down()). When we return, set_state_down()
will crash because it operates on an already destroyed instance.

Avoid that by keeping a reference to the interface during set_state_down().

Fixes: b83f07916a ('supplicant: large rework of wpa_supplicant handling')

https://bugzilla.redhat.com/show_bug.cgi?id=1815058
2020-03-20 11:34:01 +01:00
Thomas Haller
6c837a366b supplicant: combine multiple log lines about supported supplicant features
For many purposes, the supplicant features are not very interesting (as
they are also mostly static for a certain release/distribution). Combine
the multiple logging lines into one.

Also, sort the NMSupplCapType enum values consistently with the order
in which we log them.

Also, rename the logging output for features to match the enum name.
E.g. "FAST" instead of "EAP-FAST".

Now:

  > supplicant: supported features: AP+ PMF+ FILS- P2P+ FT+ SHA384+ MESH+ FAST+ WFD+
2020-03-18 09:52:16 +01:00
Thomas Haller
b83f07916a supplicant: large rework of wpa_supplicant handling
Avoid GDBusProxy, instead use GDBusConnection directly. I very much
prefer this because that way we have explicit control over what happens
on D-Bus. With GDBusProxy this is hidden under another layer of complex
code. The hardest part when using a D-Bus interface is to manage the
state via an asynchronous medium. GDBusProxy contains state about the
D-Bus interface and duplicate the state that we track. This makes it hard
to reason about things.

Rework creation of NMSupplicantInterface. Previously, a NMSupplicantInterface
had multiple initialization states. In particular, the first state would not
yet tie the interface to a certain D-Bus object path. Instead, NMSupplicantInterface
would try and retry to create the D-Bus object.
Now, NMSupplicantManager has an asynchronous method to create interface
instances. The manager only creates an interface instance after the D-Bus
path is known. That means, a NMSupplicantInterface instance is now
strongly tied to a name-owner and D-Bus path.

It follows that the state of NMSupplicantInterface can only go from STARTING,
via the supplicant states, to DOWN. Never back. That was already previously
the case that the state from DOWN was final and once the 3 initial
states were passed, the interface's state would never go back to the initial
state. Now this is more strict and more formalized. The 3 initialization states
are combined.

I think the tighter state handling simplifies users of NMSupplicantInterface.
See for example "nm-device-ethernet.c". It's still complicated, because handling
state is fundamentally difficult.

NMSupplicantManager will take care to D-Bus activate wpa_supplicant only
when necessary (poke). Previously, creating the manager instance
would always start suppliant service. Now, it's started on demand.
2020-03-12 10:16:22 +01:00
Thomas Haller
984e94f01d supplicant: expose nm_supplicant_driver_to_string() helper function
Will be useful later.
2020-02-14 09:48:37 +01:00
Thomas Haller
6cb728e977 supplicant: use nm_utils_gbytes_to_variant_ay() in nm_supplicant_manager_set_wfd_ies() 2020-02-10 19:11:50 +01:00
Thomas Haller
c5e0bae8b4 supplicant: track supplicant interface instances in manager via embedded CList 2020-02-10 19:11:50 +01:00
Thomas Haller
0df15330ae supplicant/trivial: give WPAS defines an NM prefix
Defines in our header files should all have an NM specific prefix.

Rename.

Also rename the related defines in the source file. Usually declarations
in a source file should not have an NM prefix. But here they have for
consistency.
2020-02-10 19:11:50 +01:00
Thomas Haller
8eb1bfa87f supplicant: rework handling of capabilities (features) to use capabilities enumeration
We keep adding capabilities. Tracking them individually via boolean (or
ternary) properties is cumbersome.

Instead, use an enum NMSupplCapType and a corresponding bitmask
NMSupplCapMask. The latter can track whether a capability is detected,
detected to be absent or not detected (unknown).
2020-02-10 19:11:50 +01:00
Thomas Haller
abff46cacf all: manually drop code comments with file description 2019-10-01 07:50:52 +02:00
Lubomir Rintel
24028a2246 all: SPDX header conversion
$ find * -type f |xargs perl contrib/scripts/spdx.pl
  $ git rm contrib/scripts/spdx.pl
2019-09-10 11:19:56 +02:00
Lubomir Rintel
6779733870 supplicant-interface: detect mesh support
This ensures that we know whether wpa_supplicant was built with
CONFIG_MESH enabled.

[andreas.kling@peiker-cee.de: add add PROP_MESH_SUPPORT to
set_property()]
2019-07-29 10:28:22 +02:00
Lubomir Rintel
f5cd641c05 supplicant: detect SHA384 support 2019-07-25 12:31:19 +02:00
Lubomir Rintel
3d0d1a21c8 supplicant: detect 802.11r fast BSS transition (FT) 2019-07-25 12:31:19 +02:00
Thomas Haller
c0e075c902 all: drop emacs file variables from source files
We no longer add these. If you use Emacs, configure it yourself.

Also, due to our "smart-tab" usage the editor anyway does a subpar
job handling our tabs. However, on the upside every user can choose
whatever tab-width he/she prefers. If "smart-tabs" are used properly
(like we do), every tab-width will work.

No manual changes, just ran commands:

    F=($(git grep -l -e '-\*-'))
    sed '1 { /\/\* *-\*-  *[mM]ode.*\*\/$/d }'     -i "${F[@]}"
    sed '1,4 { /^\(#\|--\|dnl\) *-\*- [mM]ode/d }' -i "${F[@]}"

Check remaining lines with:

    git grep -e '-\*-'

The ultimate purpose of this is to cleanup our files and eventually use
SPDX license identifiers. For that, first get rid of the boilerplate lines.
2019-06-11 10:04:00 +02:00
Thomas Haller
696cf38f45 supplicant: avoid G_VARIANT_BUILDER_INIT() from glib 2.50
G_VARIANT_BUILDER_INIT() was only added in glib 2.50, hence we cannot use
it.

Maybe nm-glib.h should provide a compat macro, but the macro relies
on the magic number GVSB_MAGIC_PARTIAL, which is private to glib.
It's not clear that we can savely provide such a compat implementation
for older glib variants.

Fixes: 642f15f2f6
2019-02-21 13:27:34 +01:00
Benjamin Berg
642f15f2f6 supplicant: Add API to set WFD IEs
This API allows setting the global WFDIEs property of wpa_supplicant.
Ideally it would be better if this property was per-device, but this is
a limitation of wpa_supplicant.
2019-02-21 10:10:20 +01:00
Thomas Haller
a3370af3a8 all: drop unnecessary includes of <errno.h> and <string.h>
"nm-macros-interal.h" already includes <errno.h> and <string.h>.
No need to include it everywhere else too.
2019-02-12 08:50:28 +01:00
Thomas Haller
d25ed0820c all: don't use "static inline" in source files
For static functions inside a module, the compiler determines on its own
whether to inline the function.

Also, "inline" was used at some places that don't immediatly look like
candidates for inlining. It was most likely a copy&paste error.
2019-02-06 09:31:00 +01:00
Benjamin Berg
15b7b36718 supplicant: Allow creating an interface from object path
wpa_supplicant will create a new interface for P2P devices. In this case
we need to fetch the supplicant interface using the object path and then
fetch the interface name via dbus to setup the IP interface of the P2P
device later.
2018-12-13 09:20:55 +01:00
Benjamin Berg
e2a99cabda supplicant: Detect P2P and WFD support
Add detection for P2P and WFD support in wpa_supplicant and pass the
information to the NMSupplicantInterface.
2018-12-13 09:20:55 +01:00
Masashi Honma
0109615c4e supplicant: enable FILS only when wpa_supplicant supports it
Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
2018-01-16 15:01:59 +01:00
Beniamino Galvani
a72ffe230b supplicant: enable PMF only when wpa_supplicant supports it 2017-04-15 10:37:33 +02:00
Thomas Haller
ec2681d4db all: use nm_clear_g_cancellable() 2017-03-13 12:00:23 +01:00
Thomas Haller
7d6b8bab70 all: use NM_CACHED_QUARK_FCN() instead of G_DEFINE_QUARK()
I think NM_CACHED_QUARK_FCN() is better because:

- the implementation is in our hand, meaning it is clear that
  putting a "static" before NM_CACHED_QUARK_FCN() is guaranteed to
  work -- without relying on G_DEFINE_QUARK() to be defined in a way
  that this works (in fact, we currently never do that and instead
  make all functions non-static).
- it does not construct function names by appending "_quark".
  Thus you can grep for the entire function name and finding
  the place where it is implemented.
- same with the stings, where the new macro doesn't stringify the
  argument, which is less surpising. Again, now you can grep
  for the string including the double quoting.

(yes, I really use grep to understand the source-code)
2017-02-10 14:33:52 +01:00
Thomas Haller
ec805a6ce6 supplicant: update capabilities before marking manager as running
(cherry picked from commit 19ceaa1dc9)
2017-01-18 18:58:38 +01:00
Thomas Haller
6b6db3124a supplicant: update whether EAP-FAST is supported for existing supplicant-interface
As the fast-supported flag changes, update the existing supplicant
interfaces with the new information.

Also, by default assume it is supported.

(cherry picked from commit 872b9ec5ea)
2017-01-18 18:58:38 +01:00
Thomas Haller
1caae3743d supplicant: fix detection of EAP-FAST
At least with my supplicant, the capability is called
all-upper-case "FAST".

The check used case-insensitive, but that was broken
by a previous change.

Fixes: 9f5f141100
(cherry picked from commit 66ff601ecf)
2017-01-18 18:58:36 +01:00
Beniamino Galvani
0150b644ed supplicant: add an enum to specify the driver
With macsec we now have 3 drivers and a boolean is no longer enough.
2017-01-16 17:37:14 +01:00
Thomas Haller
1706366351 build: rename "src/supplicant-manager" to "src/supplicant"
The supplicant directory does not only contain the manager
instance, but various files related to wpa-supplicant.

Rename.
2016-11-21 14:07:47 +01:00
Renamed from src/supplicant-manager/nm-supplicant-manager.c (Browse further)