Commit graph

19162 commits

Author SHA1 Message Date
Thomas Haller b1c65d32fe Revert "Makefile: rework team compilation flags"
I don't think we should do this.

- renamining/dropping configure options is still an annoyance,
  because it requires to different ./configure options depending
  on the version. The rename from --enable-teamctl to --enable-team
  might be theoretically nice, but more annoying then helpful.

- There is no strict dependency between --enable-team and
  --enable-json-validation. At most, one could argue that
  when enabling the team plugin (--enable-teamctl), then
  libnm must also be build with --enable-json-validation.
  But in fact, the team plugin will happily work with a
  libnm that doesn't link against libjansson.
  That is --enable-teamctl --disable-json-validation will work
  in practice just fine.
  On the other hand, libnm is a client library to create connection
  profiles, fully supporting team profiles also makes sense if the
  actual plugin is not installed (or build). Thus, --disable-teamctl
  --enable-json-validation certainly makes sense.

At this point, one might ask whether libnm is even still complete without
libjansson. Maybe libnm should *require* --enable-json-validation.
But that is not what the patch was doing, and it would also need
some careful consideration before doing so.

This reverts commit 9d5cd7eae8.
2017-12-08 09:07:30 +01:00
Thomas Haller af6f62be8d libnm/tests: fix memleak in test 2017-12-08 08:51:21 +01:00
Thomas Haller d5d4911b58 gitignore: readd removed libnm-core/tests/test-setting* programs
Although removed, they show up whenever switching to an
old branch. Keep ignoring them.
2017-12-08 08:45:51 +01:00
Thomas Haller 1b8ae83967 keyfile: reject team properties in parser
We don't properly coordinate reading the team properties from keyfile.
They must be ignored, at least for now.
2017-12-08 08:39:02 +01:00
Francesco Giudici 4d1796b2c7 merge: branch 'fg/team_abstraction_tests_and_fixes_rh1398925'
https://bugzilla.redhat.com/show_bug.cgi?id=1398925
2017-12-08 00:53:46 +01:00
Francesco Giudici 9d5cd7eae8 Makefile: rework team compilation flags
Rename the team functionality enablement from 'teamdctl' to 'team'.
Force jansson lib requirement for team functionality: NetworkManager
requires the teamd daemon to manage team. As teamd depends upon jansson
lib, adding jansson requirement for teaming support in NetworkManager
seems reasonable.
Remove the jansson_validation flag, as the only generic json function in
nmcli (not related to team) was the one to check if a string was in json
format. Anyway, that function is used for team checks only. So, move
also json validation functions under the WITH_TEAM flag.
2017-12-08 00:46:27 +01:00
Francesco Giudici b5f0d61d03 libnm-core: add test cases for NMSettingTeamPort 2017-12-08 00:46:27 +01:00
Francesco Giudici 1248969342 libnm-core: add test cases for NMSettingTeam 2017-12-08 00:46:27 +01:00
Francesco Giudici 540b7b3dfd gitignore: ignore libnm-core/tests/test-setting
We now have merged in libnm-core/tests/test-setting test file the test
files for 8021x, bond and dcb... add the new test file to .gitignore and
remove the old ones.
2017-12-08 00:46:27 +01:00
Lubomir Rintel 9bb30f86ec libnm-core: merge the settings tests into a single one
Thomas likes this more and who am I to argue.
2017-12-08 00:46:27 +01:00
Francesco Giudici bb4c95e168 libnm-core: team: skip writing in the keyfile all the exposed properties
Their values are already saved in the team.config and team-port.config
properties, from which they are synced.
2017-12-08 00:46:27 +01:00
Francesco Giudici 4c7a841823 libnm-core: team: change tx-hash APIs idx type from int to guint 2017-12-08 00:46:27 +01:00
Francesco Giudici a5642fd93a libnm-core: team: rework defaults management on runner properties
till now when no explicit value was set on a property, the default value
for that property was returned, also if the property was not applicable
to the selected runner.
Fix this, showing default values for properties only when relevant and
showing instead -1 or null when the property is not relevant for the
selected runner.
Moreover, reset all the properties but the link-watchers when the team.runner
is changed: this is required to clean up the properties unrelated to the
new runner and start with the runner-specific defaults.
2017-12-08 00:46:27 +01:00
Francesco Giudici ed2a1a153b libnm-core: team: use the correct name for teamd property 'balancing_interval'
the teamd 'runner.tx_balancer.balancing_interval' property was wrongly
set and searched as 'runner.tx_balancer.interval'. Fixed.

Fixes: fc3b7d61e2
2017-12-08 00:46:27 +01:00
Francesco Giudici fdd41852ee libnm-core: json: share code to load defaults in team(-port).config
Move code from _nm_utils_team_config_get to the brand new
_json_team_add_defaults function without any change.
Then remove the duplicated code from _nm_utils_team_config_equal and
leverage the new function. Here the only functional change is that
the defaults for "notify_peers" and "mcast_rejoin" for the
"activebackup" runner are added (the only case in which their default
values are different than 0).
2017-12-08 00:46:27 +01:00
Francesco Giudici f0ae71e7d6 libnm-core: trivial: just move static json functions 2017-12-08 00:46:27 +01:00
Francesco Giudici 8648aa576e libnm-core: trivial: move json key deletion code to a separate function 2017-12-08 00:46:27 +01:00
Francesco Giudici 16c9435c5b libnm-core: use proper writer for team-port link-watchers 2017-12-08 00:46:26 +01:00
Francesco Giudici c5228b8a83 cli: add support to TeamPort link watchers 2017-12-08 00:46:26 +01:00
Francesco Giudici f094837d73 libnm-core: team-port: expose the new link-watchers property
It will allow explicit configuration of link-watchers in the team port
configuration.
2017-12-08 00:46:26 +01:00
Francesco Giudici 0d8fcc39ab libnm-core: add keyfile writer for team link watcher
Allow tests to dump the content of the property when getting a failure.
2017-12-08 00:46:26 +01:00
Francesco Giudici 363a2cfe95 libnm-core: synchronize team.link_watchers when team.config is set. 2017-12-08 00:46:26 +01:00
Francesco Giudici e59878ce19 libnm-core: synchronize team.config when team.link_watchers is set. 2017-12-08 00:46:26 +01:00
Francesco Giudici 4657390d45 cli: add support to Team link watchers 2017-12-08 00:46:26 +01:00
Francesco Giudici ca816ae10e libnm-core: team: expose the new link-watchers property
It will allow explicit configuration of link-watchers in the team
configuration.
2017-12-08 00:46:26 +01:00
Francesco Giudici ba4ce843fa libnm-core: add backend for GVariant de/serialization of link_watchers. 2017-12-08 00:46:26 +01:00
Francesco Giudici 72f6d08714 libnm-core: team: add NMTeamLinkWatcher boxed type
Team allows to specify multiple link watchers for each link.
Define a link watcher object in order to allow to specify multiple ones
for each Team configuration.
2017-12-08 00:46:26 +01:00
Francesco Giudici 53821a4b13 ifcfg-rh: tests: align json team configuration format to jansson one 2017-12-08 00:46:26 +01:00
Francesco Giudici 5e6f7de4be libnm-core: preserve keys order in team.config with old jansson libs
When jansson lib version is < 2.8 the order of the keys of json objects
is not preserved automatically. In particular, when loading the json
string, parsing it and dumping it back to a string the key order will be
lost if the now deprecated JSON_PRESERVE_ORDER flag is not set.
Add the flag: will do nothing on recent jansson versions but will fix
behavior for legacy ones.
2017-12-08 00:46:26 +01:00
Beniamino Galvani a9b5079324 ifcfg-rh: use separate variables for DNS searches
DNS searches from the ipv4 and ipv6 settings were joined and written
to the same ifcfg-rh "DOMAIN" variable and so the connection read back
from disk was different from the one written.

Instead, introduce a separate variable for ipv6 searches; to preserve
backwards compatibility, still read the "DOMAIN" variable for ipv6
when ipv4 is disabled so that we don't lose DNS searches on upgrade.

https://bugzilla.redhat.com/show_bug.cgi?id=1517794
2017-12-07 09:58:09 +01:00
Francesco Giudici 993a726c4a ifcfg-rh: initialize watch descriptors to -1
This is now required as we instance inotify-helper only on need:
we have to init them to the unset value, otherwise...

	Thread 1 "NetworkManager" received signal SIGSEGV, Segmentation fault.
	nm_inotify_helper_remove_watch (self=0x0, wd=0) at src/settings/plugins/ifcfg-rh/nm-inotify-helper.c:100
	100		if (priv->ifd < 0)
	(gdb) backtrace
	#0  0x00007fffe35da6c0 in nm_inotify_helper_remove_watch (self=0x0, wd=0) at src/settings/plugins/ifcfg-rh/nm-inotify-helper.c:100
	#1  0x00007fffe35d45b1 in nm_inotify_helper_clear_watch (wd=0x7fffdc008628, helper=<optimized out>) at src/settings/plugins/ifcfg-rh/nm-inotify-helper.h:53
	#2  0x00007fffe35d45b1 in path_watch_stop (self=0x7fffdc0085f0) at src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-connection.c:223
	#3  0x00007fffe35d467c in filename_changed (object=0x7fffdc0085f0, pspec=<optimized out>, user_data=<optimized out>) at src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-connection.c:242
	#4  0x00007ffff61b230d in g_closure_invoke () at /lib64/libgobject-2.0.so.0
	#5  0x00007ffff61c498e in signal_emit_unlocked_R () at /lib64/libgobject-2.0.so.0
	#6  0x00007ffff61cd1a5 in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0
	#7  0x00007ffff61cdb0f in g_signal_emit () at /lib64/libgobject-2.0.so.0
	#8  0x00007ffff61b6594 in g_object_dispatch_properties_changed () at /lib64/libgobject-2.0.so.0
	#9  0x00007ffff61b5f3e in g_object_notify_queue_thaw () at /lib64/libgobject-2.0.so.0
	#10 0x00007ffff61b7776 in g_object_new_internal () at /lib64/libgobject-2.0.so.0
	#11 0x00007ffff61b924d in g_object_new_valist () at /lib64/libgobject-2.0.so.0
	#12 0x00007ffff61b9691 in g_object_new () at /lib64/libgobject-2.0.so.0
	#13 0x00007fffe35d5018 in nm_ifcfg_connection_new (source=source@entry=0x0, full_path=full_path@entry=0x555555a9a590 "/etc/sysconfig/network-scripts/ifcfg-team3", error=error@entry=0x7fffffffdc30, out_ignore_error=out_ignore_error@entry=0x7fffffffdc2c) at src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-connection.c:429
	#14 0x00007fffe35d5e96 in update_connection (self=self@entry=0x555555a59ea0, source=source@entry=0x0, full_path=0x555555a9a590 "/etc/sysconfig/network-scripts/ifcfg-team3", connection=connection@entry=0x0, protect_existing_connection=protect_existing_connection@entry=0, protected_connections=protected_connections@entry=Python Exception <class 'gdb.error'> There is no member named keys.:
	0x555555a9fc00, error=0x0) at src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c:218
	#15 0x00007fffe35d7073 in read_connections (plugin=plugin@entry=0x555555a59ea0) at src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c:545
	#16 0x00007fffe35d72f1 in get_connections (config=0x555555a59ea0) at src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c:581
	#17 0x00005555556bb513 in load_connections (self=0x555555a1a920) at src/settings/nm-settings.c:239
	#18 0x00005555556bb513 in nm_settings_start (self=0x555555a1a920, error=<optimized out>) at src/settings/nm-settings.c:1800
	#19 0x00005555555ada1f in nm_manager_start (self=0x555555a490c0, error=<optimized out>) at src/nm-manager.c:5262
	#20 0x00005555555851ae in main (argc=<optimized out>, argv=<optimized out>) at src/main.c:417

Fixes: 31f2a46639
2017-12-07 02:48:45 +01:00
Thomas Haller cdbe1ad715 all: merge fixing pointers casts for g_object_ref()
See related bug https://bugzilla.gnome.org/show_bug.cgi?id=790697

https://mail.gnome.org/archives/desktop-devel-list/2012-July/msg00100.html
2017-12-06 10:34:29 +01:00
Thomas Haller 7ca601d529 shared: propagate type for g_object_ref()
See related bug https://bugzilla.gnome.org/show_bug.cgi?id=790697
2017-12-06 10:34:28 +01:00
Thomas Haller 7661ad64ba all: use cast macros instead of C cast
When building with assertions, they nm_assert() for the
type. Otherwise, they are identical to a C cast.

Also, where possible, don't cast at all, but adjust
the type instead.

Also, there were a few missing casts.
2017-12-06 10:34:28 +01:00
Colin Walters 3f6bef47f3 tree-wide: cast after g_object_ref() for proposed GLib patch
This fixes the build with related bug https://bugzilla.gnome.org/show_bug.cgi?id=790697

https://mail.gnome.org/archives/networkmanager-list/2017-December/msg00005.html
2017-12-06 10:34:28 +01:00
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
ad7f1d18a0. 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