Commit graph

757 commits

Author SHA1 Message Date
Dan Williams
13c77b09eb wifi: move NMAccessPoint getters/setters to top
Allows us to remove some no longer used prototypes from the headers.
Remove some pointless comments at the same time.
2015-05-06 15:21:31 -05:00
Dan Williams
ea9ae4cd76 wifi: move NMAccessPoint GObject stuff to the bottom 2015-05-06 15:20:31 -05:00
Dan Williams
e482f853f6 wifi: remove supplicant-forgotten current AP from list on disconnect
NM never removes the current AP from the AP list, to prevent NM from
indicating that it's connected, but to nothing.  But the supplicant
can remove that AP from its list at any time (out of range, turned off,
etc), leading to a priv->current_ap that is no longer known to the
supplicant but still exists in the NM AP list.  Since the supplicant
has forgotten it, NM will never receive a removal signal for it.

To ensure that a supplicant-forgotten priv->current_ap is removed
from the NM AP list when priv->current_ap is cleared or changed, mark
any AP removed by the supplicant as 'fake'.  It will then always be
removed in set_current_ap() and not linger in the AP list forever like
a zombie.
2015-05-06 15:14:06 -05:00
Dan Williams
910c62d8c7 wifi: follow supplicant's scan list instead of managing AP lifetime internally
Instead of tricky logic to merge APs and age them, just tell the
supplicant what our aging parameters are, and rely on it to handle
removal from the list.  Notable behavioral changes are:

* APs will now be removed when they haven't been seen for two
consecutive scans in which they would have been included.  This
means that when the scan interval is short, out-of-range APs will
be removed much more quickly than the previous 360 seconds.

* APs now live at most 250 seconds (twice our longest scan interval)
instead of the previous 360 seconds.

* The problem with wpa_supplicant < 2.3 not notifying that a BSS has
been seen in the scan if none of its properties actually changed is
now avoided, because an AP is only removed when the supplicant removes it

In general these changes should make the scan list more responsive, at
the cost of slightly more instability in the list due to the unreliability
of WiFi scanning.  But it also removes a layer of complexity and
abstraction from NetworkManager, pushing the scan results list closer
to that which the hardware reports.
2015-05-06 15:14:06 -05:00
Dan Williams
be370859ef wifi: condense AP list dump log message
Remove the trailing message, and indicate when the last scan
took place and when the next one will happen.
2015-05-06 15:14:06 -05:00
Dan Williams
6ee7e22acb wifi: make nm_ap_dump() print on one line 2015-05-06 15:14:04 -05:00
Thomas Haller
8ebb8d0d0f device: allow reloading of the ignore-carrier flag
Now on SIGHUP, when reloading NetworkManager configuration, also reload
the ignore-carrier flag.

While a device is activated, the reload is ignored until the device
deactivates.

Maybe it would be simpler just not to cache ignore_carrer and let it
take effect immediately. But not caching ignore_carrer has the
additional downside that every call to is_available must check the
specs -- which in sum is potentially expensive for something that
almost never changes.

https://bugzilla.gnome.org/show_bug.cgi?id=748050
2015-05-05 16:53:51 +02:00
Thomas Haller
2d333a1769 config: make ignore-carrier option reloadable
Only move the ignore-carrier option from NMConfig to
NMConfigData. The ignore-carrier option is still
immutable after startup.

https://bugzilla.gnome.org/show_bug.cgi?id=748050
2015-05-05 16:51:19 +02:00
Dan Williams
388b7830f3 platform: don't wait for udev before announcing links 2015-05-01 14:25:55 -05:00
Dan Williams
3006df940c core: add generic NMDevice function to recheck availability
And use it everywhere.
2015-05-01 14:18:29 -05:00
Thomas Haller
bdaaf9849b platform: don't accept lowering IPv6 hop-limit from RA (CVE-2015-2924)
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6fd99094de2b83d1d4c8457f2c83483b2828e75a
http://seclists.org/oss-sec/2015/q2/46
https://bugzilla.redhat.com/show_bug.cgi?id=1209902
https://bugzilla.redhat.com/show_bug.cgi?id=1209903
2015-04-29 14:14:20 +02:00
Mathieu Trudel-Lapierre
f3b8285be5 wifi: expose the last_seen property for a NMAccessPoint
https://mail.gnome.org/archives/networkmanager-list/2015-April/msg00053.html
2015-04-29 07:49:23 +02:00
Thomas Haller
7f8149bdb7 wifi: avoid assertion in request_wireless_scan() passing NULL to nm_utils_ssid_to_utf8() 2015-04-23 16:38:51 +02:00
Thomas Haller
c6529a9d74 platform: add self argument to platform functions
Most nm_platform_*() functions operate on the platform
singleton nm_platform_get(). That made sense because the
NMPlatform instance was mainly to hook fake platform for
testing.

While the implicit argument saved some typing, I think explicit is
better. Especially, because NMPlatform could become a more usable
object then just a hook for testing.

With this change, NMPlatform instances can be used individually, not
only as a singleton instance.

Before this change, the constructor of NMLinuxPlatform could not
call any nm_platform_*() functions because the singleton was not
yet initialized. We could only instantiate an incomplete instance,
register it via nm_platform_setup(), and then complete initialization
via singleton->setup().
With this change, we can create and fully initialize NMPlatform instances
before/without setting them up them as singleton.

Also, currently there is no clear distinction between functions
that operate on the NMPlatform instance, and functions that can
be used stand-alone (e.g. nm_platform_ip4_address_to_string()).
The latter can not be mocked for testing. With this change, the
distinction becomes obvious. That is also useful because it becomes
clearer which functions make use of the platform cache and which not.

Inside nm-linux-platform.c, continue the pattern that the
self instance is named @platform. That makes sense because
its type is NMPlatform, and not NMLinuxPlatform what we
would expect from a paramter named @self.

This is a major diff that causes some pain when rebasing. Try
to rebase to the parent commit of this commit as a first step.
Then rebase on top of this commit using merge-strategy "ours".
2015-04-21 17:51:34 +02:00
Thomas Haller
ccba1b1e2d trivial: fix spelling in comments 2015-04-20 11:27:56 +02:00
Jiří Klimeš
fc6373bea9 device: add nm-plugin-missing property indicating NM device plugin not available
It is useful for indicating that the device type is supported but the required
plugin is not installed.
2015-04-20 10:00:28 +02:00
Jiří Klimeš
8257940606 core: (trivial) fix spelling in comments 2015-04-20 09:45:57 +02:00
Thomas Haller
255f30c362 device/logging: downgrade log level of "Activation: Stage x of 5" messages
Only downgrade the <info> levels to <debug>. Leave
warnings unchanged.

https://bugzilla.redhat.com/show_bug.cgi?id=1212196
2015-04-18 21:41:40 +02:00
Thomas Haller
b91b8a035c core/logging: reduce info logging messages for devices
https://bugzilla.redhat.com/show_bug.cgi?id=1212196
2015-04-18 21:41:40 +02:00
Thomas Haller
9983e4eff5 device/logging: log connection UUID when activating connection
It is often hard to understand whether we activate an assumed
connection. Only the UUID is unique.
2015-04-18 21:41:40 +02:00
Thomas Haller
756b756c2c device: expose nm_device_has_capability() function 2015-04-18 21:41:40 +02:00
Thomas Haller
2117bef864 device: use NMDeviceCapabilities enum for device capabilities 2015-04-18 21:41:40 +02:00
Dan Winship
721e917cb6 wimax: drop WiMAX support (bgo #747846)
Even Fedora is no longer shipping the WiMAX SDK, so it's likely we'll
eventually accidentally break some of the code in src/devices/wimax/
(if we haven't already). Discussion on the list showed a consensus for
dropping support for WiMAX.

So, remove the SDK checks from configure.ac, remove the WiMAX device
plugin and associated manager support, and deprecate all the APIs.

For compatibility reasons, it is still possible to create and save
WiMAX connections, to toggle the software WiMAX rfkill state, and to
change the "WIMAX" log level, although none of these have any effect,
since no NMDeviceWimax will ever be created.

nmcli was only compiling in support for most WiMAX operations when NM
as a whole was built with WiMAX support, so that code has been removed
now as well. (It is still possible to use nmcli to create and edit
WiMAX connections, but those connections will never be activatable.)
2015-04-17 12:42:23 -04:00
Beniamino Galvani
3e8d828008 wifi: fix memleak in nm_ap_update_from_properties()
Fixes: 59c8192b22
2015-04-13 21:39:21 +02:00
Lubomir Rintel
bcc79cc0eb device: turn off "unmanaged unless IFF_UP externally" for veth
We currently don't manage a veth inside a container despite we should because
it's an externally configured software interface and thus waits for IFF_UP.

Given veths are prevented from being managed outside of a container by an udev
rule anyway it's safe to lift the external IFF_UP requirement for them.
2015-04-13 13:51:27 +02:00
Lubomir Rintel
adb6e9afb1 device: move the decision whether to wait for IFF_UP a virtual function
We'd like to override it for veths.
2015-04-13 13:51:27 +02:00
Dan Williams
fbf60536f9 wifi: fall back to band matching when frequency matching fails
Some dual-band access points use the same BSSID in both the 5GHz
and 2.4GHz bands, so obviously frequency must be taken into account
when matching.  But no AP should ever use the same SSID/BSSID pair
concurrently in the same band on different frequencies.

Some APs also dynamically channel hop when they detect interference,
or when they restart, they do so on a different channel after finding
the channel with the lowest interference.  To assure that we don't
end up with stale scan list entries when the AP has switched to
another channel in the same band, fall back to band matching
when merging new scan results.
2015-04-10 10:17:45 -05:00
Dan Williams
227de48a91 wifi: remove unused AP 'broadcast' property
Nothing ever read the value.
2015-04-10 10:17:45 -05:00
Dan Williams
85aac315c0 wifi: always strict-match access points when merging
The only reason to allow lazy matching was to update a fake
current AP when its real scan result comes in.  Now that NM
tracks the current AP based on the the supplicant's current
BSS, a fake current AP will be replaced when the real scan
result arrives.  So it's pointless to update the fake one
when it'll just be removed soon.
2015-04-10 10:17:45 -05:00
Dan Williams
f191e204ac wifi: trivial whitespace fixup 2015-04-10 10:17:45 -05:00
Dan Williams
0bdee17402 wifi: update AP properties from supplicant signals 2015-04-10 10:17:45 -05:00
Dan Williams
37760fdc83 wifi: use supplicant's CurrentBSS as the current AP
Instead of keeping track of it internally, and attempting to fuzzy-match
access points and stuff, just use the supplicant's information.  If the
supplicant doesn't know what AP it's talking to, then we've got more
problems than just NM code.

The theory here is that when starting activation, we'll use the given
access point from the scan list that the supplicant already knows about.
If there isn't one yet (adhoc, hidden, or AP mode) then we'll create
a fake AP and add it to the scan list.

Once the supplicant has associated to the AP, it'll notify about the
current BSS which we then look up in the scan list, and set
priv->current AP to that.  If for some reason the given AP isn't yet
in our scan list (which often happens for adhoc/AP) then we'll just
live with the fake AP until we get the scan result, which should happen
very soon.

We don't need to do any fuzzy-matching to find the current AP because
it will either always be one the supplicant knows about, or a fake one
that the supplicant doesn't know about that will be replaced soon anyway.
2015-04-10 10:17:44 -05:00
Dan Williams
6b8df2035e wifi: use a hash table to track access points 2015-04-10 10:17:44 -05:00
Lubomir Rintel
d78f4614a0 device: use "new-activation" reason when deactivating for another activation
"user-requested" has a side effect of disabling autoconnect.

Fixes: 600489003f
2015-04-08 10:00:14 +02:00
Lubomir Rintel
1ad193a017 device,libnm,cli: add "new-activation" reason for device state change
It will be used when the device is disconnected for new connection activation.
2015-04-08 10:00:11 +02:00
Lubomir Rintel
c1c3d7e145 device: translate NM_DEVICE_STATE_REASON_UNKNOWN to "unknown" 2015-04-08 09:59:24 +02:00
Dan Winship
37a5bfcbeb supplicant-manager, wifi: (trivial) fix signal argument types
A few places in the NMSupplicantInterface API and in NMDeviceWifi's
use of it were still using "GHashTable *properties" where they should
have been using "GVariant *properties". (This didn't cause any actual
problems because nothing was looking at those arguments.)

(Also fix a comment typo.)
2015-04-06 16:13:03 -04:00
Dan Winship
473cfec01c bluetooth: port bluez4 code to gdbus 2015-04-03 16:58:40 -04:00
Dan Winship
9926ba376a libnm, core: use typechecked proxy_call methods 2015-04-03 16:58:40 -04:00
Dan Winship
1a0bc83c39 libnm, core: use _nm_dbus_signal_connect() 2015-04-03 16:58:40 -04:00
Lubomir Rintel
4cb97cf66f manager: remove a connection from device if we're activating it on another device
The connection now might be being activated on another device. Defer the
removal until we're sure the activation request will proceed and only add the
active connection afterwards.

https://bugzilla.gnome.org/show_bug.cgi?id=730492
2015-04-03 18:59:33 +02:00
Dan Williams
568a8d1da9 bridge/bond/team: device availability shouldn't depend on IFF_UP (bgo #746918)
The merge of lr/udev-unmanaged-fd731014 made all devices wait until
udev found them, but that makes these three device types fail activate
when created by NM itself.

Since their availability depended on IFF_UP, they could not be
activated (eg, 'nmcli con up team0') until they were IFF_UP.  But
when they are created by NM, although NM knows the ifindex the
platform ignores the interface until udev finds it.  Thus immediately
after creating the interface in _internal_activate_device() it
won't be known to the platform, so the nm_device_is_available()
check that controls whether the device moves to DISCONNECTED
will fail.  This prevents any activation and emits the message:

"Connection 'foo' is not available on the device %s at this time."

because the device is still in the UNAVAILABLE state.

danw asked why we care about IFF_UP for these devices, and I can't
remember why, and I don't think it makes sense to require now.

https://bugzilla.gnome.org/show_bug.cgi?id=746918
2015-04-02 15:10:43 -05:00
Dan Williams
a8299f6ae9 team: ratelimit teamd spawning 2015-04-02 14:44:41 -05:00
Dan Williams
24a764e831 team: respawn teamd when it exits instead of failing activation (rh #1145988)
teamd can recover interface state on its own, so if it died unexpectedly
we don't need to fail the device.  Also, if for some reason a teamd is
already up and running when activating the interface, we can ask for
its configuration and if it has the same configuration we are about to
use, just talk to the existing copy instead of killing it.
2015-04-02 14:44:31 -05:00
Bernd Edlinger
1282b468bd wifi: clear WPAS_REMOVED_TAG when scanning Wi-Fi AP
(cherry picked from commit 47c505523c72b6454dec4681c0edda535c3a2e91)

https://bugzilla.gnome.org/show_bug.cgi?id=733105
2015-04-02 17:42:58 +02:00
Lubomir Rintel
0f71335d52 device: use UNMANAGED reason instead of REMOVED when unmanaging devices upon quit
Since f85513b (device: do not touch sysctls after the device was removed) the
device is not unconfigured/cleaned up when it's removed. When we're quitting
the device is not actually removed, we're just unmanaging it -- let's just
use a different reason so that the cleanup runs.

Fixes: f85513b8e4
2015-04-02 11:19:55 -04:00
Lubomir Rintel
dc1928a0d0 device: progress the device activation if it has a valid assumed connection
If we detect a LL address and this not decide to readd it, don't stop at
ip-config; progress to ip-check.

Fixes: 396dc2b3b4
2015-04-01 14:59:16 +02:00
Dan Williams
99a6201264 core: use dev_id when calculating the interface IPv6 IID (rh #1101809)
Some device types (s390 OSA and ipvlan) can use the same link-layer address
for multiple virtual interfaces, and the kernel used the dev_id property
to differentiate these devices when constructing the IID.  NM should do
this too to prevent IID clashes.

https://bugzilla.redhat.com/show_bug.cgi?id=1101809
2015-03-27 15:11:34 -05:00
Lubomir Rintel
498d45e85f Revert "core: make veth devices default-unmanaged for now"
This reverts commit ebeaeaed4d.

No need to hardwire these as unmanaged anymore, an udev rule will take care of
it.
2015-03-23 15:13:02 +01:00
Lubomir Rintel
fd41aa451b libnm,core: don't mix up enum types
Touches a weak spot on clang's soul.
2015-03-19 11:48:49 +01:00