Commit Graph

19277 Commits

Author SHA1 Message Date
Beniamino Galvani
b0de9cd209 core: merge branch 'bg/device-reapply-no-restart-bgo790061'
Allow reconfiguring interfaces without downtime.

https://bugzilla.gnome.org/show_bug.cgi?id=790061
2017-12-06 09:54:47 +01:00
Beniamino Galvani
0decb9eac6 device: restore original dynamic IPv6 configuration on reapply 2017-12-06 09:53:18 +01:00
Beniamino Galvani
7217ec09e3 device: restore original dynamic IPv4 configuration on reapply
The dynamic IPv4 configuration from DHCP/PPP/... and WWAN is stored in
priv->{dev,wwan}_ip4_config; when the user removes externally an
address or a route, we prune it from those configurations. Therefore
such addresses and routes can't be restored on a device reapply.

Introduce an AppliedConfig structure that stores both the original and
the current (after external changes) configuration so that we can
restore the original one on reapply.
2017-12-06 09:53:18 +01:00
Beniamino Galvani
898b978e36 device: remove 'force_restart' argument from reactivate functions
It is now unused.

https://bugzilla.gnome.org/show_bug.cgi?id=790061
2017-12-06 09:53:18 +01:00
Beniamino Galvani
f4cbed3d4f device: don't force a restart of IP configuration on reapply
Restarting the IP configuration removes addresses and routes for a
short time breaking connectivity. The reapply process should have the
minimal impact possible.

https://bugzilla.gnome.org/show_bug.cgi?id=790061
2017-12-06 09:53:18 +01:00
Beniamino Galvani
e5a8aba225 core: add non-destructive ip config intersect function
Add a new function to compute the intersection between 2 IP
configurations without modifying them.
2017-12-06 09:53:18 +01:00
Beniamino Galvani
eae63475d9 core: add generic functions for set operations 2017-12-06 09:53:18 +01:00
Beniamino Galvani
4cbf594779 core: add nm_ipX_config_clone() 2017-12-06 09:53:18 +01:00
Beniamino Galvani
057744b722 core: drop unused macro argument 2017-12-06 09:53:18 +01:00
Thomas Haller
cb9facdfef build: adjust libnm symbol versioning after backporting update2 API for 1.10.2
The update2 API was backported to nm-1-10 branch, with commit
ad7f1d18a0eafb1352d305035cd138f43a47b955. It will be released
both as 1.12.0 and 1.10.2.

To ensure the upgrade path from 1.10.2+ to 1.12+ works, the symbols
in libnm must be present on both versions.

Usually, we would duplicate the symbols on master via
NM_BACKPORT_SYMBOL() macro.

However, as we are sure that we will release 1.10.2 before 1.12.0,
we can just update the linker version of these symbols. So, although
they are first released on major release 1.12.0, their linker version
tag is libnm_1_10_2, to ease upgrade and to avoid duplicating the
symbol.
2017-12-06 09:46:42 +01:00
Beniamino Galvani
9c27d73b2e build: fix path in Makefile
Fixes: 8e172eb984
2017-12-06 09:23:21 +01:00
Thomas Haller
632e693251 core: merge branch 'th/user-block-autoconnect-rh1401515'
https://bugzilla.redhat.com/show_bug.cgi?id=1401515
2017-12-05 21:07:31 +01:00
Thomas Haller
35dc6421de settings: support setting a connection as volatile via Update2()
Extend the Update2 flags to allow marking a connection as volatile.
Making a connection as volatile means that the connection stays alive
as long as an active connection references it.

It is correct that Update2() returns before the connection is actually
deleted. It might take an arbitrary long time until the volatile
mechanism cleans up the connection.

Also add two more IN_MEMORY flags: "detached" and "only".

The existing NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY would not detach nor
delete the possible file on disk. That is, the mode only changes what NM
thinks is the current content of the connection profile. It would not delete
the file on disk nor would it detach the profile in-memory from the file.
As such, later persisting the connection again to disk would overwrite
the file, and deleting the profile, would delete the file.

Now add two new IN_MEMORY modes.

NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_DETACH is like making the connection
in-memory only, but forgetting that there might be any profile on disk.
That means, a later Delete() would not delete the file. Similarly, a
later Update2() that persists the connection again, would not overwrite
the existing file on disk, instead it would choose a new file name.

On the other hand, NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_ONLY would delete
a potential file from disk right away.

It's clear that "volatile" only makes sense with either "in-memory-detached"
or "in-memory-only". That is, the file on disk should be deleted right away
(before the in-memory part is garbage collected) or the file on disk should
be forgotten.
2017-12-05 20:18:10 +01:00
Thomas Haller
cfced599ca settings: delete volatile connection and support setting the volatile flag
Previously, we would only set a connection as volatile before
adding it to manager. As we never would set it volatile last on,
there was no need to handle deletion.

Now support that. Watch the volatile flag, and if the connection
has currently not active connection that keeps it alive, delete
it in an idle handler.
2017-12-05 19:57:25 +01:00
Thomas Haller
011a609bd4 shared/trivial: fix type on comment 2017-12-05 19:57:25 +01:00
Thomas Haller
4c84f74326 manager/trivial: reorder declarations at beginning of file
First, define structs. Then forward declare functions. Reorder code
to have a certain order that is also used by other files (or should
be).
2017-12-05 19:57:25 +01:00
Thomas Haller
ccc93639a0 settings: let invisible connection not autoconnect according to is_blocked() function
Previously, NMPolicy would explicitly check whether the connection is not visible,
to skip autoconnect.

We have nm_settings_connection_autoconnect_is_blocked() function, that can do that.
The advantage is, that at various places we call nm_settings_connection_autoconnect_is_blocked()
to determine whether autoconnect is blocked. By declaring invisible connections
as blocked from autoconnect as well, we short-cut various autoconnection attempts,
that previoulsy only failed later during auto_activate_device().
2017-12-05 19:57:25 +01:00
Thomas Haller
545e3111c8 settings: remove accessor functions to connection flags
The accessor functions just look whether a certain flag is set. As these
functions have a different name then the flags, this is more confusing
then helpful. For example, if you want to know where the NM_GENERATED
flag matters, you had to know to grep for nm_settings_connection_get_nm_generated()
in addition to NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED.

The accessor function hid that the property was implemented as
a connection flag. For example, it was not immediately obvious
that nm_settings_connection_get_nm_generated() is the same
as having the NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED flag
set.

Drop them.
2017-12-05 19:57:25 +01:00
Thomas Haller
4549bd07a1 settings: refactor setting connection flags
It seems more idiomatic to have a mask+value argument, instead
of setting all flags at once. At least, other setters work this
way, so change it for consistency.
2017-12-05 19:57:25 +01:00
Thomas Haller
0e1abe5ef3 settings: track visible state as regular connection flags
We already need to re-emit the notify::flags signal.
It's cumbersome to do this for boolean properties, so
re-use the flags to also track the visibility state.
2017-12-05 19:57:25 +01:00
Thomas Haller
e704e827c4 settings: add "connection-flags-changed" signal to connection
We will need to subscribe to changes to "flags" from NMManager.
2017-12-05 19:57:25 +01:00
Thomas Haller
c385cc5107 settings: block autoconnect of volatile connections 2017-12-05 19:57:25 +01:00
Thomas Haller
4f819ee435 settings: move delete call to separate function 2017-12-05 19:57:24 +01:00
Thomas Haller
1fd5c52eaf settings: clear filename after deleting file from disk
It doesn't really matter, because in the next step we
are about to remove the connection.

However, once the connection is deleted from file, it's
clear that it has no more file-name.
2017-12-05 19:57:24 +01:00
Thomas Haller
a3074ee911 ifcfg-rh: add and use nm_inotify_helper_clear_watch() helper 2017-12-05 19:57:24 +01:00
Thomas Haller
8e172eb984 ifcfg-rh: move nm-inotify-helper to ifcfg-rh plugin
The helper is only used by ifcfg-rh. Move it to the plugin.
2017-12-05 19:57:24 +01:00
Thomas Haller
31f2a46639 ifcfg-rh: fix path_watch_stop() not to create inotify-helper
Commonly, we don't monitor files and hence don't need the inotify-helper
instance. We already access and construct the instance lazy, by
accessing the singleton getter only when needed.

However, path_watch_stop() would always access the singleton, hence
always create such an instance. In most cases there is nothing to clean,
and no such instance shall be created.
2017-12-05 19:57:24 +01:00
Thomas Haller
8a675f3d13 settings: pass new_connection to commit_changes() and fix ifnet
ifnet shall use the new_connection argument, not NM_CONNECTION(self).
Also, let the caller of the virtual function provide the right new_connection,
not having the virtual function figure that out.
2017-12-05 19:57:24 +01:00
Thomas Haller
141dfd600c settings: unify settings-update API (drop internal _update()) 2017-12-05 19:57:24 +01:00
Thomas Haller
776c5f3893 settings: unify settings-update API (rename and merge) 2017-12-05 19:57:24 +01:00
Thomas Haller
9a4225ac96 settings: unify settings-update API (nm_settings_connection_replace_settings()) 2017-12-05 19:57:24 +01:00
Thomas Haller
1425be0397 settings: unify settings-update API (nm_settings_connection_commit_changes()) 2017-12-05 19:57:24 +01:00
Thomas Haller
8388f4ea1d examples: add python/gi example nm-connection-update-stable-id.py
The example script touches the stable-id of a connection.
It does so blocking autoconnect, and was originally written
to test that functionality.
2017-12-05 19:57:24 +01:00
Thomas Haller
8bb95a8365 settings: add NM_SETTINGS_UPDATE2_FLAG_BLOCK_AUTOCONNECT flag 2017-12-05 19:57:24 +01:00
Thomas Haller
98ff1e291c core: clear autoconnect-blocked-reason USER_REQUEST when activating connection 2017-12-05 19:57:24 +01:00
Thomas Haller
d00eb95c55 libnm: add nm_remote_connection_update2()
- only add an async version. I think sync requests are fundamentally flawed
  because they mess up the order of D-Bus messages. Hence, also don't
  call the function *_async(), like we do for other functions. As there
  is only the async form, it doesn't have a suffix.

- Don't accept a NMConnection as @settings argument, but a GVariant.
  In general, keep the libnm API closer to the D-Bus API and don't hide
  the underlying function with a less powerful form. The user still can
  conveniently call the function with

    nm_remote_connection_update2 (connection,
                                  nm_connection_to_dbus (NM_CONNECTION (connection),
                                                         NM_CONNECTION_SERIALIZE_ALL),
                                  save_to_disk
                                    ? NM_SETTINGS_UPDATE2_FLAG_TO_DISK
                                    : NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY,
                                  NULL,
                                  cancellable,
                                  callback,
                                  user_data);

  I believe the parts of libnm that invoke D-Bus methods, should be
  close to the D-Bus API. Not like nm_remote_connection_commit_changes()
  which has no corresponding D-Bus method.
2017-12-05 19:57:24 +01:00
Thomas Haller
98ee18d888 all: add new D-Bus API org.freedesktop.NetworkManager.Settings.Connection.Update2()
We already have Update(), UpdateUnsaved() and Save(), which serve
similar purposes. We will need a form of update with another argument.

Most notably, to block autoconnect while doing the update.

Other use cases could be to prevent reapplying connection.zone and
connection.metered, to to reapply all changes.

Instead of adding a specific update function that only serves that
new use-case, add a extensible Update2() function. It can be extended
to cope with future variants of update.
2017-12-05 11:50:52 +01:00
Thomas Haller
d26c749ea6 checkpoint: don't bypass settings-connection commit code on rollback
commit involves more then just replacing the setting and writing them
out. What? Dunno. It's complex.

But let's not bypass the commit-changes function. That one is supposed
to get it right.
2017-12-05 11:50:52 +01:00
Thomas Haller
f73e78770e settings/trivial: rename update function in nm-settings-connection.c 2017-12-05 11:50:52 +01:00
Thomas Haller
ad9deb6968 settings: merge _replace_settings_full() into _commit_changes_full()
It's complicated what happens during a commit/replace/update (whatever
you call it).

It doesn't get simpler by spreading it out to various functions.
Let's have one large function (_commit_changes_full()) which does
all the steps necessary. There should be no alternative ways
how to update a connection.
2017-12-05 11:50:52 +01:00
Thomas Haller
7a0900be7c settings: always call _commit_changes_full() instead of _replace_settings_full()
All callers of _replace_settings_full() now use _commit_changes_full().
commit-changes should contain all the logic what to do when updating
a connection. Now, the connection might optionally be written to disk.
2017-12-05 11:50:52 +01:00
Thomas Haller
4fd5e6e1bb settings: in _commit_changes_full() mark the connection as saved before emitting signals
_commit_changes_full() calls _replace_settings_full() which already emits signals
about the changed connection. We should mark the connectin as saved earlier.

In fact, we can tell _replace_settings_full() to mark it as not-unsaved
via the persist-mode parameter.
2017-12-05 11:50:52 +01:00
Thomas Haller
9988f9dbbb settings: call replace-settings also without new settings
_replace_settings_full() does more then just replace the settings.
It at least also sets some flags, like saved/unsaved depending
on @persist_mode.

_replace_settings_full() also emits the "updated" signal. Note that
previously it would just return without signal if nm_connection_compare()
indicates that there is no difference. But the caller probably cares
about whether the user tries to change the connection at all, not
whether the change actually introduced a real difference in the
settings. Like, policy might re-set the autoconnect blocked flags.
But it should do so on every user-update, regardless of whether
a change was actually made.

It makes sense to call _replace_settings_full() with a @new_connection
of %NULL, to mean: just update the flags, but keep the current connection.

Extend _replace_settings_full() to allow for that.

Also, update update_auth_cb() to always call _replace_settings_full(),
even if no new connection is provided. In this case, only update
the connection flags accordingly.
2017-12-05 11:50:52 +01:00
Thomas Haller
3706fd17eb settings: refactor update_auth_cb() and prepare connection once
Note how nm_settings_connection_commit_changes() would call
prepare() a second time. Don't do that.

Also, move the prepare step earlier, and call _replace_settings_full()
without preparing the new connection again.
2017-12-05 11:50:52 +01:00
Thomas Haller
75f787d1da settings: split nm_settings_connection_commit_changes() to call it without preparing the new connection
Will be used next.
2017-12-05 11:50:52 +01:00
Thomas Haller
9531da8b3e settings: add persistent-mode argument for connection-replace
The current behavior of update_unsaved is confusing. Give the argument
an enum with a name that describes better what's happening. Also, it
makes the uses grep-able.
2017-12-05 11:50:52 +01:00
Thomas Haller
c3dd5d8df2 settings: log pretty names for settings-connection flags 2017-12-05 11:50:52 +01:00
Josef Andersson
9b23f97290 po: update Swedish (sv) translation (bgo #791222)
https://bugzilla.gnome.org/show_bug.cgi?id=791222
2017-12-05 11:48:40 +01:00
Beniamino Galvani
16f3946ee7 ifcfg-rh: merge branch 'bg/ifcfg-rh-wep-key-type-rh1518177'
https://bugzilla.redhat.com/show_bug.cgi?id=1518177
2017-12-04 15:56:17 +01:00
Thomas Haller
c3d192b6a3 ifcfg-rh: avoid unnecessary string copies in add_one_wep_key() 2017-12-04 15:53:53 +01:00