Commit graph

180 commits

Author SHA1 Message Date
Jan Luebbe
f9c72dee3e wifi: support ap-mode with wpa_supplicant
A new value for NM80211Mode is introduced (NM_802_11_MODE_AP) and the
new mode is passed to wpa_supplicant analogous to adhoc-mode.
The places which need to know the interface mode have been extended to
handle the new mode.

If the configuration does not contain a fixed frequency, a channel is
selected the same way as with adhoc-mode before.
2012-10-17 12:08:11 -05:00
Dan Williams
4cccab61ab supplicant: handle some D-Bus spawn errors better
If D-Bus fails to spawn the supplicant it sometimes returns a method
timeout error instead of a spawn error.  We've seen that happen on
F18 when systemd is used to autolaunch the supplicant.  That causes
NM to assume that the supplicant crashed and thus never try to talk
to it again, on the assumption that (a) it crashed and (b) it will
crash again if we try to use it, and thus we'll be in a spawn loop.

First, (a) is not necessarily the case, and second, the supplicant
doesn't crash like that anymore.  So we're pretty safe to just talk
to the supplicant if it starts later instead of ignoring it if
we detect the timeout error.
2012-10-06 17:08:53 -05:00
Dan Williams
ee22af6961 wifi: handle supplicant's deauthentication disconnect reason
Recent versions of wpa_supplicant have a "DisconnectReason" property
that, upon a deauthentication event, contains an IEEE 802.11
"Reason Code" for why the disconnect may have occurred.  We may
want to use this in the future, so add the infrastructure to pass it
around to supplicant listeners.
2012-09-20 10:11:36 -05:00
Dan Williams
1d7949e66c build: fix up includes; prefer builddir over srcdir
WiMAX failed distcheck if the iwmxsdk devel files were installed but
--enable-wimax=no was used, since the distcheck configure bits found
the iwmxsdk headers, defaulted WiMAX support to 'on', and then proceeded
to use the generated headers from the top srcdir, where of course
wimax was turned off (due to --enable-wimax=no).  Instead, everything
should use the headers from the builddir, which reflects the options
that 'make distcheck' actually selects.

At the same time, re-order various includes everywhere to ensure that
the builddir paths come before the srcdir paths to prevent this from
happening in the future.
2012-08-06 17:27:17 -05:00
Dan Williams
e9457176f5 wifi: use supplicant's last_scan time for on-demand scan checking
And return errors when we refuse an on-demand scan.
2012-06-07 15:06:48 -05:00
Dan Williams
c0131f767f wifi: kill usage of deprecated GTimeVal
We don't care about microsecond precision, so we don't need
GTimeVal anyway.  Just use time(2).
2012-06-07 15:06:48 -05:00
Dan Williams
c3d3a3d16a supplicant: handle interface state 'disabled'
Been around for a while; happens if the interface goes away or is
rfkilled.  Recognize it for now but we don't do anything with it
yet.
2012-05-11 17:15:40 -05:00
Dan Williams
565d1e2557 wifi: don't report supplicant interface is READY until we've read properties
NMDeviceWifi and a few other things expect the interface will
move from STARTING to READY and then on to other states.  But the
state was getting set to the actual supplicant interface state
immediately when the first properties were read (which include
the State property) and thus the READY state got bypassed.  But
we also want to read stuff like the capabilities before letting
the interface be used.

So first, ensure the supplicant interface object actually uses the
READY state like its callers expect, and second, don't set the
READY state until we actually know what we need to know about it.
2012-05-04 13:48:54 -05:00
Dan Williams
62888a13c9 wifi: probe-scan for hidden SSIDs 2012-05-02 17:33:17 -05:00
Dan Williams
1b40d82b74 wifi: cache number of available scan SSIDs
Which we'll use later for better handling of non-broadcasting
networks by probing for them.
2012-05-02 17:33:17 -05:00
Dan Williams
5cd9b1e22f wifi: don't remove APs still known to the supplicant
Because the supplicant doesn't have a BSS property for "last seen"
we have to fake that by listening to PropertiesChanged events for
stuff like signal strength, which usually changes a bit from scan
to scan.  But in case it doesn't change, we'll never get that PC
signal, and thus we'll never update our internal 'last seen'
timestamp, and thus the AP will get removed from the NM scan list
even if it was in the supplicant's last scan results.

So, if the AP if we haven't receieved a BssRemoved signal for the
AP yet don't remove it from the NM scan list.  One caveat is that
if the supplicant's DEFAULT_BSS_EXPIRATION_AGE value is greater
than NM's AP expiration age, NM will by consequence use the
supplicant's value instead.  At the moment the supplicant sets
DEFAULT_BSS_EXPIRATION_AGE to 180 seconds while NM's is 360.
2012-03-02 18:17:34 -06:00
Dan Williams
ca3c39abd3 wifi: let WEXT be disabled with --with-wext=no
It's still enabled by default if you don't pass --with-wext=no.
But now it's possible to build without WEXT entirely.
2012-02-29 23:11:04 -06:00
Jiří Klimeš
23b73b1354 supplicant: fix an error in demarshalling object path
This message was printed:
GLib-GObject-CRITICAL **: g_value_get_string: assertion `G_VALUE_HOLDS_STRING (value)' failed
It showed out it came from g_cclosure_marshal_VOID__STRING() in BSSRemoved signal.
The signal parameter is object path, so use g_cclosure_marshal_VOID__BOXED instead.
2012-02-27 16:17:13 +01:00
Colin Walters
74ec56d956 build: fix srcdir != builddir for new generated headers 2012-02-22 16:27:28 -06:00
Dan Williams
7902787263 wifi: fix compatibility with wpa_supplicant 0.7.x
The standard D-Bus PropertiesChanged signals are only in 1.0 and
later, so we also have to listen to the deprecated signals for
older supplicant versions.  We can revert this commit when we
drop support for wpa_supplicant 0.7.x.
2012-02-22 14:45:19 -06:00
Dan Williams
92412357c3 wifi: ensure APs remain in scan list when supplicant updates them
The port to the new supplicant D-Bus API for NM 0.9 had one unfinished
piece, which was to remove old APs from the scan list when the
supplicant returned no scan results or there was a scan error.  In
this case, the removal code would not be called.  This wasn't much
of a problem until 836f7d177e which
began removing APs from the scan list correctly in this case.

This uncovered a bug in NM's wpa_supplicant management code, which
was that NM only updates its internal AP object 'last seen' timestamp
when the AP is reported by the supplicant as a completely new BSS
(in merge_scanned_ap()).  But the new supplicant D-Bus interface
only reports the BSS as "new" when the supplicant doesn't know about
the BSS, either because it is a new BSS or because it's been removed
from the supplicant's scan list at some point in the past.

Thus for BSSes that are consistently kept in the supplicant's scan
list, because the wifi driver is actually doing its job and reporting
them consistently in scan results, NM would not be updating the
'last seen' value for the corresponding NM AP objects.  Due to
836f7d177e this would cause APs that
should be kept to be removed from the NM scan list.

To fix this, have the NMAccessPoint object track which supplicant
dbus object it came from, and have NMSupplicantInterface listen for
PropertyChanged signals for those APs the supplicant knows about.
When something changes (like signal strength as the result of updated
scan results) update the AP's 'last seen' timestamp since it clearly
still exists in the scan list.  This way we update the timestamp both
when the supplicant finds a new AP and when it updates the properties
of existing APs.
2012-02-20 15:06:05 -06:00
Dan Winship
839eab5564 Use glib-mkenums to generate enum types
Rather than generating enum classes by hand (and complaining in each
file that "this should really be standard"), use glib-mkenums.

Unfortunately, we need a very new version of glib-mkenums in order to
deal with NM's naming conventions and to fix a few other bugs, so just
import that into the source tree temporarily.

Also, to simplify the use of glib-mkenums, import Makefile.glib from
https://bugzilla.gnome.org/654395.

To avoid having to run glib-mkenums for every subdirectory of src/,
add a new "generated" directory, and put the generated enums files
there.

Finally, use Makefile.glib for marshallers too, and generate separate
ones for libnm-glib and NetworkManager.
2012-02-15 11:42:15 -05:00
Dan Williams
5581114726 supplicant: early exit if EAP-FAST is not supported by the supplicant
EAP-FAST used to require some patches to OpenSSL which aren't always
applied.  We can't depend on the supplicant supporting EAP-FAST like
we can for EAP methods that don't require any special support from
external libraries.  To ensure the error gets reported correctly and
early, fail the configuration step if EAP-FAST isn't supported by
the supplicant but the connection requests it.
2012-02-07 23:46:12 -06:00
Jiří Klimeš
b127fda19f supplicant: fix crash when connecting without both 'password' and 'password-raw'
It is the case e.g. for EAP-TLS. This regression was caused by commit
b08e2b8932.
2012-01-30 18:29:13 +01:00
Jiří Klimeš
2c52303f59 supplicant: fix checking config for EAP-FAST authentication
We do not want to break other methods, when EAP-FAST specific error condition
is detected: no PAC file provided and automatic PAC provisioning is disabled.
2012-01-30 18:07:35 +01:00
Jiří Klimeš
ba977b6a91 supplicant: use connection UUID instead of D-Bus path for config purposes 2012-01-27 13:04:10 +01:00
Jiří Klimeš
5cb75feee0 supplicant: handle parameters for EAP-FAST authentication 2012-01-27 12:54:12 +01:00
Colin Walters
dab7dfaf35 build: fix srcdir != builddir
nm-version.h is in ${top_builddir}/include.
2012-01-09 14:20:36 -06:00
Dan Williams
5f15918817 core: expose supplicant credentials request/reply functionality
Let the NMDevice listen for credentials requests and reply to them.
2011-12-19 19:47:43 -06:00
Dan Williams
2726c23c54 wifi: detect whether supplicant supports credentials requests
We'll use this to request identity and passwords in-band during
the connection attempt instead of sending them all at the
beginning.  This should allow better handling of wrong
passwords (since we'll know we need to request them from the
user interactively) and better error codes when things fail.
2011-12-19 17:21:41 -06:00
Evan Broder
b08e2b8932 supplicant: If password field is empty, check password-raw 2011-11-21 23:50:54 -06:00
Evan Broder
2c484fbc77 supplicant: Validate password as a UTF-8 string, not a byte array
The 802.1x password for MS-CHAPv2 can be up to 256 UCS-2 characters,
so we need to validate the password as UTF-8 to make sure we don't
reject valid passwords containing non-ASCII characters
2011-11-21 23:50:46 -06:00
Evan Broder
ef9551bcf3 supplicant: Add a new validation type for UTF-8 strings 2011-11-21 23:50:43 -06:00
Ludwig Nussel
b0e6033ba9 wifi: fix stop condition of EAP method check while loop 2011-10-10 16:12:10 -05:00
Dan Williams
7afba44329 supplicant: check supported EAP methods for EAP-FAST 2011-10-06 13:32:23 -05:00
Evan Broder
1e2984a5c2 supplicant: Don't leak secrets, even if they're probably invalid 2011-09-15 10:17:30 -05:00
Evan Broder
0b8097a26a supplicant: incorporate subject_match and altsubject_matches into supplicant config (bgo #341323) 2011-08-19 18:20:49 -05:00
Evan Broder
ca968105da supplicant: add new separator option to ADD_STRING_LIST_VAL macro 2011-08-19 18:20:49 -05:00
Daniel Gnoutcheff
1a98391dc4 supplicant: fix DBus signal signatures
The DBus signatures registered (via dbus_g_proxy_add_signal) for the
fi.w1.wpa_supplicant.Interface.{BSSAdded,ScanDone} signals were
incorrect.  That prevented us from receiving wifi ap scan results, at
least in the case where wpa_supplicant has DBus introspection disabled.
2011-07-29 16:34:03 -05:00
Dan Williams
f742b06304 wifi: handle a few more possible D-Bus activation errors
There's two possibilities for errors from D-Bus when trying to
activate the supplicant; either we ignore the error and wait
for the supplicant to restart or be started, or it's a hard
error and we can't continue without risking worse behavior (ie
out of memory, supplicant spawns but exits immediately, etc).
This adds a few more harmless errors to the first category
which can happen if the supplicant's .service file exists
but the supplicant does not, in which case we just wait for
it to magically show up later.
2011-07-28 09:54:06 -05:00
Dan Williams
a27cd8e5d9 wifi: allow supplicant disconnect request more often
Use a broader range of supplicant interface states to determine
when to tell the supplicant to idle; we want to allow the
disconnect in all of these states, not just some of them.

Second, allow the active network to be removed from the supplicant's
list in most of these states, even when the supplicant interface is
inactive or disconnected.
2011-06-29 18:19:55 -05:00
Jiří Klimeš
74954136dd supplicant: remove unused D-Bus dbus_g_bus_get() call from test-supplicant-config.c 2011-06-14 16:03:28 +02:00
Dan Williams
a0fd14500e wifi: enable background scanning for WPA Enterprise
Enable the supplicant's optimized background scanning functionality
for WPA Enterprise setups so that roaming works correctly.  Otherwise
there are issues pingponging between APs and having an up-to-date
scan list for roaming, since NM only scans every 2 minutes.  The
supplicant can trigger optimized scans based on signal quality
thresholds and such and make these roaming decisions much better
than NM can.
2011-04-27 16:22:54 -05:00
Dan Williams
937359a67b supplicant: use ap_scan=0 for wired connections
Somehow this got dropped in the port to the new supplicant D-Bus
interface a few months ago.
2011-04-01 18:50:10 -05:00
Dan Williams
11ca4c7a91 supplicant: add 'authenticating' state
Caused a harmless warning, but lets add it anyway.
2011-03-17 13:42:21 -05:00
Kjartan Maraas
c2b4b9c1d7 build: fix return types (bgo #644665)
Some functions were returning FALSE or 0 instead of NULL.
2011-03-14 01:05:51 -05:00
Dan Williams
f9ceafd4a1 Merge remote branch 'origin/master' into rm-userset 2011-01-12 15:46:37 -06:00
Dan Williams
e3ba9162c2 supplicant: fix state handling after READY has been reached
We only want to prevent regression to > READY after READY has
been reached, since the interface state will track the supplicant
connection state which legitimately jumps around.
2010-12-11 12:33:15 -06:00
Dan Williams
ea16af7c18 supplicant: fix up return arguments for Disconnect and RemoveNetwork 2010-12-11 12:31:10 -06:00
Dan Williams
1cd17ac896 supplicant: fix leak updating BSS properties 2010-12-11 11:59:40 -06:00
Dan Williams
0a8f7aeb56 core: use #defines for NMDBusManager signal names
Helps catch typos at compile time instead of runtime.
2010-12-10 11:36:55 -06:00
Dan Williams
a08dd2c39d supplicant: fix handling when supplicant cannot be service activated
If the supplicant cannot be service activated, wait until it shows up
on the bus instead of sitting around doing nothing.  This fixes a small
regression introduced when the _READY state was added to the supplicant
interface object.
2010-12-07 13:58:49 -06:00
Dan Williams
fb6cde508c supplicant: convert blob handling to new supplicant interface 2010-11-22 22:34:04 -06:00
Dan Williams
f5e084c668 supplicant: convert association paths to new supplicant interface 2010-11-22 09:05:09 -06:00
Dan Williams
6ecb45ddf0 wifi: convert scanning to new supplicant interface 2010-11-22 08:40:21 -06:00