Commit Graph

15047 Commits

Author SHA1 Message Date
Dan Williams
53720c3837 merge: really implement DEACTIVATING state and fix re-activation crash (rh #1058843)
Really implement the DEACTIVATING state this time.  This now allows easy
"pre-down" hooks whenever we choose to implement that.

Next, fix a crash during re-activation where a pending activation request
mis-interpreted device state changes from a previous activation request
that was deactivating.
2014-02-25 18:05:55 -06:00
Dan Williams
e19f48ec26 core: better ignore deactivations before a new activation starts (rh #1058843)
When a new activation request comes in and the device is already
activated, two NMActRequests will exist for the device in parallel.
The old one handles de-activation of the device and is then disposed,
while the new one waits until the device is de-activated and then
takes over and starts the new activation.

Both requests are watching device state, and the new request may
mis-interpret the de-activation states and clean up its device pointer,
leading to assertion failures when the new activation starts.

To fix this (and because NMVPNConnection *does* always want to see
de-activation events from the device) remove the code that tries to
ignore de-activation from NMActiveConnection's device state handler.

Instead, have NMActRequest skip any reaction to device state changes
unless it is the current activation request on the device.  The VPN
code always wants to see the device's state, so it doesn't need this
check.
2014-02-25 18:03:03 -06:00
Dan Williams
4040198b47 core: queue re-activations to allow DEACTIVATING state
If a device is already activated, queue the new activation to allow
the transition through the DEACTIVATING state.

---

Also remove the "HACK" bits in nm_device_deactivate(). This hack was
added on 2007-09-25 in commit 9c2848d.  At the time, with user settings
services, if a client created a connection and requested that NM
activate it, NM may not have read the connection from the client over
D-Bus yet.  So NM created a "deferred" activation request which waited
until the connection was read from the client, and then began activation.

The Policy watched for device state changes and other events (like
it does now) and activated a new device if the old one was no longer
valid.  It specifically checked for deferred activations and then
did nothing.  However, when the client's connection was read, then
nm-device.c cleared the deferred activation bit, leading to a short
period of time where the device was in DISCONNECTED state but there
was no deferred activation, because the device only changes state to
PREPARE from the idle handler for stage1.  If other events happened
during this time, the policy would tear down the device that was
about to be activated. This early state transition to PREPARE
worked around that.

We need to remove it now though, because (a) the reason for its
existence is no longer valid, and (b) _device_activate() may now
be called from inside nm_device_state_changed() and thus it cannot
change to a new state inside the function.
2014-02-25 18:03:02 -06:00
Dan Williams
037c67f471 firewall: ignore UNKNOWN_INTERFACE errors
If the firewall didn't know about the interface, don't log errors
about it because there's nothing NM can do.  Also, sometimes NM
sends the not-IP interface, like when disconnecting WWAN when the
PPP interface is already gone.
2014-02-25 17:22:08 -06:00
Jiří Klimeš
3789412160 libnm-util: fix adding values to 'phase2-altsubject-matches'
It was mixed up with 'altsubject-matches'.
2014-02-25 18:42:24 +01:00
Thomas Haller
72f5542488 platform: downgrade error logging about NLE_DUMP_INTR on event socket
Such a failure can happen easily, because we now request an initial dump
to get AF_INET6 addresses in order to check for extended ifa flags support.

This is not critical, so downgrade the error log.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-25 16:31:53 +01:00
Jiří Klimeš
68066b40f2 libnm-util: fix verify_identity() in '802-1x' setting
We need to return FALSE on error, otherwise we pile GErrors and assert in
nm_setting_verify().
2014-02-25 15:57:54 +01:00
Jiří Klimeš
4141e69b3a settings: free memory in finalize(), not in dispose() in NMSecretAgent (rh #1061911)
Even if the code changed in master compared to the bug report, the issues would
still occur when we freed members in dispose.

https://bugzilla.redhat.com/show_bug.cgi?id=1061911
2014-02-25 14:27:48 +01:00
Thomas Haller
79f0f72b84 trivial: rename function in platform
To make the name analog to init_ip4_address, etc. which start with
init_*.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-24 22:06:07 +01:00
Thomas Haller
8b294541d8 platform: share the static buffer for platform to_string functions
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-24 21:58:51 +01:00
Thomas Haller
0024c72586 trivial: fix whitespace
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-24 21:35:33 +01:00
Thomas Haller
d3a2219cee replace snprintf by g_snprintf
Use the glib wrapper for snprintf.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-24 21:35:33 +01:00
Thomas Haller
6c0db3107e platform: align debugging output in platform signals
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-24 18:29:25 +01:00
Thomas Haller
184d93ea60 rdisc: print gateway for routes in rdisc debugging output
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-24 18:29:25 +01:00
Thomas Haller
076ca1e3e2 rdisc: fix invalid cast when printing addresses in config_changed()
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-24 18:29:25 +01:00
Jiří Klimeš
c2a1cb1a44 docs: use %TRUE, %FALSE macros instead of plain TRUE, FALSE values for gtkdoc 2014-02-24 17:00:39 +01:00
Thomas Haller
8a67713e9e cli: allow resetting the connection.master to NULL
Without this patch, the following two commands fail:
  nmcli connection modify em1 connection.master
  nmcli connection modify em1 connection.master ""

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-24 09:44:29 +01:00
Thomas Haller
93e4e0f8a1 core: minor fix to ensure we call platform functions with positive ifindex
Actually, get_ip_ifindex() should always return 0 or > 0. Just in case,
be extra careful and modify the conditions.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-23 22:31:49 +01:00
Thomas Haller
dd2ce3dfbc core: fix waiting for bringing up/taking down device
This fixes a regression introduced in 5074898591.
The while loop did only refetch the cached value (because the glib main loop
was blocked and only the cached device flags were checked).

Also, instead on relying of g_usleep(), wait until a maximum time of waiting
is expired. The duration of g_usleep() might not be very accurate.

Also, do no longer check the cached device state before setting the
device flag. The cache might be out of date, so we just set the flag.

https://bugzilla.gnome.org/show_bug.cgi?id=724363

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-23 22:31:49 +01:00
Thomas Haller
66f5256b94 core: add nm_platform_link_refresh() function to refresh the libnl cache for links
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-23 22:31:42 +01:00
Dan Winship
eac0573d5e platform: log warnings if macvlan/gre property reads fail 2014-02-21 13:54:02 -05:00
Dan Winship
4e273c4be8 platform: fix macvlan flags checking
You can't do an #ifdef on an enum value, so we were actually never
requesting IFLA_MACVLAN_FLAGS.
2014-02-21 13:54:02 -05:00
Dan Winship
95cf36fa8b platform: sanitize a boolean property
Make sure NMPlatformGreProperties->path_mtu_discovery is always TRUE
or FALSE, even if the value from the kernel is "2" or "16" or
something. (This makes it consistent with what we do for other boolean
netlink properties.)
2014-02-21 13:54:02 -05:00
Dan Williams
255cc3f707 merge: various WWAN fixes 2014-02-21 09:45:40 -06:00
Dan Williams
19089fb960 mobile: use gateway returned from ModemManager
If we get a gateway, use it.
2014-02-21 09:45:06 -06:00
Dan Williams
9d50e9dbd9 mobile: fix removal of ethernet interfaces owned by modems
If the kernel doesn't tag a modem's ethernet interface with
DEVTYPE=wwan then NetworkManager has no idea that's a modem
(and cannot be used until connected via the control port).
Since DEVTYPE=wwan devices get ignored by NM, so should these
interfaces when NM knows they are modems.

That got broken at some point for ModemManager1, because the
data port isn't read until the modem is connected.  NM only
looked for and removed the data-port-as-ethernet-device when
the modem was added, long before the MM1 data port was found.

ModemManager does provide a list of ports owned by the modem
though, which we can use at modem addition time to remove
an ethernet device that is controled by the modem.
2014-02-21 09:45:06 -06:00
Dan Williams
5c1dee10cd mobile: only change state to NEED_AUTH during activation (rh #1058308)
Auth requests only happen during activation and there's no need to
request secrets at any other time.  Ensure that the device state
won't change to NEED_AUTH except when activating.

(There's a case in NMModemBroadband where set_mm_enabled()
when the modem is locked may cause this, but we'll solve this
a different way later.)

https://bugzilla.redhat.com/show_bug.cgi?id=1058308
2014-02-21 09:45:06 -06:00
Dan Williams
4611aec5c2 mobile: consolidate secrets requests into NMDeviceModem
Both old and new ModemManager classes were doing the same thing, so
consolidate that into the superclass and save some LoC.
2014-02-21 09:45:06 -06:00
Dan Williams
12787f8565 mobile: fix disconnection on deactivation
When c4fc72c7 began using the DEACTIVATING state, the modem code
wasn't updated to handle this.  Because it only checked for
activating or ACTIVATED states to determine whether the modem was
previously connected, and thus when an MM disconnect was needed,
when the device enters the DISCONNECTED state it was no longer
considered previously active, and not disconnected.

Also, remove the NEED_AUTH handling from the modem code's device
state switch, because it does not appear to be needed.  The
modem will only enter NEED_AUTH when it requires PAP/CHAP secrets
during the connection attempt or when a PIN is required before
enabling the modem.  In both cases the modem won't yet be connected,
so this code will never be hit.
2014-02-21 09:45:06 -06:00
Thomas Haller
f8dcab53d9 libnm-glib: take reference in NMRemoteConnection before calling DBUS
We always have to take a reference to the NMRemoteConnection
before calling to DBUS, because the connection might be deleted
in the meantime.

https://bugzilla.gnome.org/show_bug.cgi?id=723168

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-21 16:20:29 +01:00
Thomas Haller
9968895e19 libnm-glib: accept omitting callback in nm_remote_connection_*
The functions nm_remote_connection_save(), nm_remote_connection_commit_changes(),
and nm_remote_connection_commit_changes_unsaved() indicate in the documentation,
that they allow omitting the callback argument. Remove invalid checks
for callback.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-21 16:20:29 +01:00
Dan Winship
932aa29026 trivial: fix configure.ac comment 2014-02-19 13:43:10 -05:00
Thomas Haller
31483e23d1 test: add valgrind suppressions
`make check` failed on fc20.armv7hl

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-18 20:33:10 +01:00
Thomas Haller
a6767f215e platform: refactor address_to_string() to return device as numeric if ifname is unknown
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-18 13:21:47 +01:00
Dan Winship
fae47c1916 tui: don't expand editor form to fullscreen horizontally
The form doesn't make use of the extra horizontal space, so it looks
bad to expand it rather than centering it.
2014-02-17 15:30:04 -05:00
Dan Winship
6ee48dc964 tui: fix flickering with large windows
Use newtPopWindowNoRefresh() rather than newtPopWindow() when
destroying a form, since often we have to destroy and then almost
immediately after re-create the same form, and we don't want that to
be visible.
2014-02-17 15:30:04 -05:00
Dan Winship
5d581b0d08 tui: handle Esc correctly from toplevel windows
The main "connect" and "edit" windows set the "escape-exits" flag, but
that just closed the form without exiting the app, leaving the user
trapped. Fix this by emitting a signal when the form quits, and
catching that. (And now we don't need to watch the "clicked" signal on
the quit buttons, since they have the "exit-on-activate" flag set.)
2014-02-17 15:30:04 -05:00
Dan Winship
12a2d64063 tui: handle Wi-Fi networks with multiple APs correctly 2014-02-17 15:30:04 -05:00
Dan Winship
62beb7a5b3 Fix NMManager:startup tracking again (rh #1030583) 2014-02-17 14:57:43 -05:00
Dan Winship
4f0c70e945 core: don't recursively schedule an autoactivate check on a device
NMPolicy's auto_activate_device() was immediately removing the device
from priv->pending_activation_checks, which meant that if
nm_manager_activate_connection() had some side effect that would cause
schedule_activation_check() to be called again, another
auto-activation check could be queued while the first was still in
progress (causing a warning). Fix this by not removing the device from
the list until the activation attempt is complete.

This requires some additional minor changes to correctly handle the
possibility of remove_device() being triggered as a side effect of
nm_manager_activate_connection().

Also merge activate_data_new() into schedule_activation_check() so
that all the "start an auto-activation" code is in one place.
2014-02-17 14:57:15 -05:00
Dan Winship
93285054ae Revert "core: fix warning about pending action "autoactivate""
This change removed the "autoactivate" pending action too soon,
creating a window where the device had no pending actions, allowing
the manager to declare startup complete while devices were still being
activated.

This reverts commit a16b7a8253.
2014-02-17 14:57:15 -05:00
Dan Winship
a217a742f1 core: remove some unused code
We never pass any delay_seconds value to schedule_activate_check()
except "0", so just remove that argument.
2014-02-17 14:57:15 -05:00
Giovanni Campagna
f6f216f0a9 manager: fix notification of the connectivity property
Notify DBus clients at the end of a connectivity check, and when
NMConnectivity reports a change.

https://bugzilla.gnome.org/show_bug.cgi?id=724550
2014-02-17 14:55:53 -05:00
Jiří Klimeš
a493cda8d6 cli: better checking of WEP key types in nmcli interactive editor (rh #1040964)
https://bugzilla.redhat.com/show_bug.cgi?id=1040964
2014-02-17 15:22:35 +01:00
Guido Günther
0e8901fbd1 core: report which option is unknown
So far NetworkManager didn't tell which option it didn't know about:

  Invalid option.  Please use --help to see a list of valid options.

Now it is a bit more informative:

  Unknown option --asdf.  Please use --help to see a list of valid options.

The "Unknown option" string is marked as translatable in glib so i18n
doesn't suffer.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-15 11:50:07 +01:00
Thomas Haller
83ff4f819f core: merge branch 'th/bgo719905_platform_caching'
Fix a bug in caching of nm-linux-platform and im do come cleanup.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-14 21:50:13 +01:00
Thomas Haller
2bc90a5f2d platform: do not check for _exists() before deleting addresses and routes
Before, nm_platform_ip4_address_exists(), et al. look into the cache to see
whether the address/route already exists and returned an error if it
did.

Change the semantic of the delete functions, to return success in case of
"nothing to delete". Also always try to delete the object in the
kernel. The reason is, that the cache might be out of date and the
caller really wants to delete it. So, to be sure, we always delete.

In most cases the object is actually in the cache (because that is
how the caller came to know that such an object might exist).
In those cases, the lookup was not useful either, because the object
was actually cached.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-14 21:41:25 +01:00
Thomas Haller
5f5c7284d1 platform: refactor delete_object() and allow deletion of objects that are not cached
- refactor delete_object() by merging with delete_kernel_object()

- allow deletion of object that we cannot find in the cache
  currently. The kernel might have such an address, even if we don't
  have it currently cached. In this case, fall back to @obj.

  Also try to work around an issue, that we cannot delete an IPv4 route without
  knowing its scope.

- suppress logging error message for NLE_NOADDR, which is a common
  failure when deleting an address. But at the same time, add some more
  debug logging, for NLE_NOADDR and NLE_OBJ_NOTFOUND.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-14 21:41:23 +01:00
Thomas Haller
d6add4de5c platform: clear host identifier before adding a route
Adding IPv4 routes, with a non-zero host identifer fails with an
error message. Adding IPv6 addresses, does not return an error,
but it seems to have no effect.

Thus we have to make sure that the host part of routes
is always zero.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-14 21:40:58 +01:00
Thomas Haller
e8775dd9fc core: add function nm_utils_ip6_address_clear_host_address()
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-14 21:40:58 +01:00