Commit graph

575 commits

Author SHA1 Message Date
Thomas Haller
ca7d6feafd logging: swap names of logging macros _LOGT() and _LOGt()
Previsously, _LOGT() could be disabled at compile time. Thus it
was different then the other macros _LOGD(), _LOGI(), etc.

OTOH, _LOGt() was the macro that always was compiled in.

Swap the name of the macros. Now the upper-case macros are always
enabled, while the lower-case macro _LOGt() is enabled depending
on compile configuration.

(cherry picked from commit 9587867349)
2015-11-06 14:21:11 +01:00
Beniamino Galvani
7cf30fe47e wake-on-lan: add option to keep existing settings
Add a new 'ignore' option to NMSettingWired.wake-on-lan which disables
management of wake-on-lan by NetworkManager (i.e. the pre-existing
option will not be touched). Also, change the default behavior to be
'ignore' instead of 'disabled'.

https://bugzilla.gnome.org/show_bug.cgi?id=755182
(cherry picked from commit e587dcb16e)
2015-10-20 17:13:21 +02:00
Thomas Haller
2a8c93e940 platform: fix link-detection for s390 CTC-type devices
Commit 02c6a93343 (rh#1212118)
introduced detection of CTC devices based on the driver name.

That was broken a while ago while refactoring.

Related: https://bugzilla.redhat.com/show_bug.cgi?id=1212118
https://bugzilla.redhat.com/show_bug.cgi?id=1272974

Fixes: ddaea22332
(cherry picked from commit 8a6afe92c1)
2015-10-19 12:27:27 +02:00
Thomas Haller
b15204d991 platform: downgrade logging level for "event-notification" messages
We get a lot of these debugging message, although the event is entirely
internal to NMLinuxPlatform and only interesting when debugging a problem
in platform itself.

Downgrade to TRACE level.

(cherry picked from commit 9f1eb190f7)
2015-10-09 15:40:10 +02:00
Thomas Haller
e0ca2bdb63 build: extract version macros from "nm-version.h" to new header file "nm-version-macros.h"
For libnm library, "nm-dbus-interface.h" contains defines like the D-Bus
paths of NetworkManager. It is desirable to have this header usable without
having a dependency on "glib.h", for example for a QT application. For that,
commit c0852964a8 removed that dependancy.

For libnm-glib library, the analog to "nm-dbus-interface.h" is
"NetworkManager.h", and the same applies there. Commit
159e827a72 removed that include.
However, that broke build on PackageKit [1] which expected to get the
version macros by including "NetworkManager.h". So at least for libnm-glib,
we need to preserve old behavior so that a user including
"NetworkManager.h" gets the version macros, but not "glib.h".

Extract the version macros to a new header file "nm-version-macros.h".
This header doesn't include "glib.h" and can be included from
"NetworkManager.h". This gives as previous behavior and a glib-free
include.

For libnm we still don't include "nm-version-macros.h" to "nm-dbus-interface.h".
Very few users will actually need the version macros, but not using
libnm.
Users that use libnm, should just include (libnm's) "NetworkManager.h" to
get all headers.
As a special case, a user who doesn't want to use glib/libnm, but still
needs both "nm-dbus-interface.h" and "nm-version-macros.h", can include
them both separately.

[1] https://github.com/hughsie/PackageKit/issues/85

Fixes: 4545a7fe96
(cherry picked from commit 7bf10a75db)
2015-09-30 23:35:52 +02:00
Thomas Haller
0f18a2ed23 platform: don't accept 00:00:00:00:00:00 as valid permanent address
In nmp_utils_ethtool_get_permanent_address(), don' accept a permanent
address of all zeros.

https://bugzilla.redhat.com/show_bug.cgi?id=1264024
(cherry picked from commit 2733aacd64)
2015-09-18 13:34:03 +02:00
Thomas Haller
6839a5f9e3 platform: stack-allocate request data for nmp_utils_ethtool_get_permanent_address()
(cherry picked from commit 2e66aea123)
2015-09-18 13:33:59 +02:00
Thomas Haller
91c00072f2 platform: cancel delayed action REFRESH_LINK when receiving an update
When we receive an update for a link, cancel a scheduled
REFRESH_LINK delayed-action for that ifindex. At the point when we
scheduled refrehing the link, we only cared about receiving a
notification that was newer then the current state.

We scheduled requesting this new notification to resync the cache.
It is not necessary to actually request a new update, any update we
receive *after* requesting a new update will suffice.

This potentially saves extra round-trips re-requesting the link.

(cherry picked from commit f4f4e1cf09)
2015-09-18 11:30:53 +02:00
Thomas Haller
e79caf9b4a platform: refresh links when parent gets removed
When moving a link to another netns, it gets removed from
NMPlatform's view.

Currently kernel does not sent a notification to inform about
that change (see related bug rh#1262908).

Ensure that we reload all linked interfaces which now might
have an invisible parent.

(cherry picked from commit 2cd6aaa918)
2015-09-18 11:30:52 +02:00
Thomas Haller
bdbc3bbb7b platform: fix handling refresh-link delayed actions
Due to a bug, we would only handle one REFRESH_LINK delayed action
and ignore the ones queued afterwards.

Fixes: 051cf8bbde
(cherry picked from commit eee240ffe8)
2015-09-18 11:30:51 +02:00
Jiří Klimeš
3543cbdfc2 coverity: calm coverity for clock_gettime() return value check
Defect type: CHECKED_RETURN
3. NetworkManager-1.0.6/src/platform/nm-linux-platform.c:1145: check_return: Calling "clock_gettime" without checking return value (as is done elsewhere 6 out of 7 times).

(cherry picked from commit 0f694f1a9a)
2015-09-18 08:46:27 +02:00
Thomas Haller
d7970c58eb platform/test: add test for invoking platform signals
There seems to be an issue with glib/ffi that causes failures
to pass enum-typed arguments to signals (related bug rh#1260577).

Add a test for platform signals which, beside NM_CONFIG_SIGNAL_CONFIG_CHANGED,
is the only place where we use enum-typed arguments for signals.

Strangely, this test doesn't cause the failure, so it's unclear why
the workaround was necessary for "config-changed" signal (commit
e7d66f1df6).

(cherry picked from commit 52cd5ee612)
2015-09-09 12:47:07 +02:00
Thomas Haller
26e6b2c189 platform: assert to successfully dlopen libnl3
(cherry picked from commit a922d5e587)
2015-08-27 20:29:11 +02:00
Lubomir Rintel
d3a91d1ca0 platform: remove bogus asserts
You can't really compare a symbol resolved by ld.so to dlsym()'d one. The
former one is likely just an address of trampoline in PLT.
2015-08-27 18:21:26 +02:00
Thomas Haller
9302639cfe platform: handle parent interfaces in other netns
The parent of a link (IFLA_LINK) can be in another network namespace and
thus invisible to NM.

This requires the netlink attribute IFLA_LINK_NETNSID which is supported
by recent versions of kernel and libnl.

In this case, set the parent field to NM_PLATFORM_LINK_OTHER_NETNS
and properly handle this special case.

(cherry picked from commit 790a0713d2)
2015-08-25 23:07:59 +02:00
Thomas Haller
424ff90497 platform: minor refactoring in _nl_get_vtable()
(cherry picked from commit 31902f8f6b)
2015-08-25 23:07:59 +02:00
Thomas Haller
c2c192cd45 platform: minor fix in nm_platform_link_to_string()
This had not real consequences, because @master and @parent are of
the same size.

(cherry picked from commit 677d802be6)
2015-08-25 23:07:59 +02:00
Thomas Haller
6370f7b926 platform: return const argument from _nl_get_vtable()
(cherry picked from commit 2189c7c75b)
2015-08-25 23:07:59 +02:00
Thomas Haller
4da484f26c platform: assert we loaded the right libnl library
(cherry picked from commit 19ebe51e2e)
2015-08-25 23:07:59 +02:00
Lubomir Rintel
a59725d2ad platform: parent link can be in a different NETNS
(cherry picked from commit ced33345d3)
2015-08-25 23:07:59 +02:00
Beniamino Galvani
26d6d5c1da core: configure Wake-on-LAN parameters for Ethernet devices
(cherry picked from commit 996cbcd25c)
2015-08-21 18:12:36 +02:00
Thomas Haller
068b525be3 platform: downgrade the warning about cache-sync to info level
It can happen on a regular basis when many events get raised.
It is probalby not avoidable and most likely not an issue, so
downgrade the warning to info level.

(cherry picked from commit 7f9cb13057)
2015-08-20 18:16:17 +02:00
Thomas Haller
45c85a0d6b logging: declare default logging macros in "nm-logging.h"
The logging macros _LOGD(), etc. are specific to each
file as they format the message according to their context.

Still, they were cumbersome to define and their implementation
was repeated over and over (slightly different at times).

Move the declaration of these macros to "nm-logging.h".
The source file now only needs to define _NMLOG(), and either
_NMLOG_ENABLED() or _NMLOG_DOMAIN.

This reduces code duplication and encourages a common implementation
and usage of these macros.

(cherry picked from commit ad7cdfc766)
2015-08-20 18:05:43 +02:00
Beniamino Galvani
37877687bb core: avoid ioctls on non existent devices
Performing an ioctl on a non existent device may cause the automatic
load of a kernel module if the device name matches a module
alias. Check if the device actually exists before calling the ioctl.

(cherry picked from commit ab41c13b06)
2015-08-11 18:38:56 +02:00
Thomas Haller
30768c7240 platform: optimize event_notification() not to create full nmp-objects for delete-events
For delete-events, we only need a shallow object with the key fields
set. That sufficies to lookup in the cache and find the object to
delete.

One other issue is that _nmp_vt_cmd_plobj_init_from_nl_link() and
link_extract_type() might call to ethtool for the already deleted
instance. Just avoid that.

https://bugzilla.redhat.com/show_bug.cgi?id=1247156
(cherry picked from commit a4c7176fe9)
2015-08-11 18:38:55 +02:00
Thomas Haller
796f78a04c platform: assert for valid ifname in ethtool_get()
Add an assert (g_return_val_if_reached()) that the interface name is
valid and shorter then 16 bytes. If it happened to be longer, strncpy()
would not have zero terminated the interface name.

(cherry picked from commit 5b123f2539)
2015-08-11 18:38:55 +02:00
Thomas Haller
dfb1c0301a platform/tests: fix assertion for test-link for team device
Seems that team changed to now also raise two change signals.
Relax the assertion that broke tests on Fedora 22.

(cherry picked from commit 1c2883c940)
2015-08-06 18:06:19 +02:00
Thomas Haller
642c38b26b platform: replace addr/route exists() functions by get()
Rename exists() functions to get() and return the cached platform
object.

(cherry picked from commit 6f8fcd2f47)
2015-07-14 13:44:57 +02:00
Lubomir Rintel
a051446492 linux-platform: correct the lifetime conditional
Coverity detected that it was always-true:
src/platform/nm-linux-platform.c:4035: dead_error_line: Execution cannot reach the expression "preferred != 0U" inside this statement: "if (lifetime != 0U || lifet...".

(cherry picked from commit da612acc6a)
2015-07-14 13:19:28 +02:00
Lubomir Rintel
f90e1549ae platform: don't assert there's no parent-parent loops
http://www.spinics.net/lists/netdev/msg314907.html
(cherry picked from commit 4aac263b0d)
2015-07-14 11:52:01 +02:00
Thomas Haller
abebc340cc platform: add optional @metric argument to route_add() function
Allow overwriting the route metric.

(cherry picked from commit 09fdf58f4d)
2015-07-07 16:30:38 +02:00
Lubomir Rintel
c7a1627ea1 platform: avoid assuming a permanent address is an ethernet address
This gets called for all links via link_get_permanent_address(). This could
easily be an infiniband address and we don't want to assert it's not.

(cherry picked from commit 31c8bd6b69)
2015-07-02 23:04:40 +02:00
Thomas Haller
ce0893e532 platform: fix wrong removal of generated enums
Fixes: a130f72d74
(cherry picked from commit 17216ed453)
2015-07-02 16:59:21 +02:00
Thomas Haller
809ddb89f9 platform: mark internal enums to be skipped by glib-mkenums
No need to generate glib type information for these internal
enums.

(cherry picked from commit a130f72d74)
2015-07-02 16:26:54 +02:00
Thomas Haller
718433307d platform: remove unreachable code in nm_platform_link_get_all()
Linux platform tracks links by ifindex. Hence an ifindex must be unique
and positive. Just assert against it.

(cherry picked from commit 5b208e718a)
2015-07-02 15:04:44 +02:00
Thomas Haller
1cbd3314a0 platform/test: add test to call nm_platform_link_get_all()
(cherry picked from commit 6f5cb596ba)
2015-07-02 15:04:44 +02:00
Thomas Haller
5edba27fe4 platform: add trace-logging to nm_platform_link_get_all()
(cherry picked from commit 987515ea73)
2015-07-02 15:04:44 +02:00
Thomas Haller
41617b9605 platform: replace debug() log macro with _LOGD()
(cherry picked from commit c9aeefb5a1)
2015-07-02 15:04:44 +02:00
Thomas Haller
10c7479507 platform: add logging macros _LOGx() to nm-platform.c
(cherry picked from commit e0630023e5)
2015-07-02 15:04:44 +02:00
Lubomir Rintel
a961ffc6a8 devices,platform: fix build with gcc
Warnings about missing initializers.

(cherry picked from commit 295c9818b0)
2015-07-01 16:36:18 +02:00
Thomas Haller
42ac15c86f route-manager: manage IPv4 device-routes with NMRouteManager
When adding an IPv4 address, kernel will also add a device-route.
We don't want that route because it has the wrong metric. Instead,
we add our own route (with a different metric) and remove the
kernel-added one.

This could be avoided if kernel would support an IPv4 address flag
IFA_F_NOPREFIXROUTE like it does for IPv6 (see related bug rh#1221311).

One important thing is, that we want don't want to manage the
device-route on assumed devices. Note that this is correct behavior
if "assumed" means "do-not-touch".
If "assumed" means "seamlessly-takeover", then this is wrong.
Imagine we get a new DHCP address. In this case, we would not manage
the device-route on the assumed device. This cannot be fixed without
splitting unmanaged/assumed with related bug bgo 746440.
This is no regression as we would also not manage device-routes
for assumed devices previously.

We also don't want to remove the device-route if the user added
it externally. Note that here we behave wrongly too, because we
don't record externally added kernel routes in update_ip_config().
This still needs fixing.

Let IPv4 device-routes also be managed by NMRouteManager. NMRouteManager
has a list of all routes and can properly add, remove, and restore
the device route as needed.

One problem is, that the device-route does not get added immediately
with the address. It only appears some time later. This is solved
by NMRouteManager watching platform and if a matchin device-route shows up
within a short time after configuring  addresses, remove it.
If the route appears after the short timeout, assume they were added for
other reasons (e.g. by the user) and don't remove them.

https://bugzilla.gnome.org/show_bug.cgi?id=751264
https://bugzilla.redhat.com/show_bug.cgi?id=1211287
(cherry picked from commit 5f54a323d1)
2015-07-01 16:12:14 +02:00
Thomas Haller
accf3d0f17 platform: properly consider address lifetimes in nm_platform_ip4_address_sync()
When checking whether an address from platform should be deleted, we
compare the address with our list of @known_addresses.
For that we must also check for expired lifetimes, because
@known_addresses might contain expired addresses.

(cherry picked from commit 8336bd2a83)
2015-07-01 16:10:50 +02:00
Thomas Haller
300a7ab4d1 platform: expose routes with "proto kernel" too
Also expose routes with "proto kernel". But add a flag
to nm_platform_ipx_route_get_all() to hide them by default.

(cherry picked from commit 42664e8752)
2015-07-01 16:10:50 +02:00
Thomas Haller
7082f44c2f platform: change NMPlatformGetRouteMode enum to NMPlatformGetRouteFlags flags
By having flags instead of an enum/mode, we can encode more combinations
of filtering the result.

(cherry picked from commit d9dba6b662)
2015-07-01 16:10:50 +02:00
Thomas Haller
44cb5b6b62 platform/trivial: rename enum value NM_IP_CONFIG_SOURCE_RTPROT_KERNEL
This source type was platform internal up to now. Next we will expose it.

(cherry picked from commit 85bf9ded2e)
2015-07-01 16:10:50 +02:00
Thomas Haller
e04d0c6e6b platform: track pref_src field of IPv4 routes
(cherry picked from commit 7594e31220)
2015-07-01 16:10:49 +02:00
Thomas Haller
af0d99cdcc platform: fix setting valid lifetimes when constructing rtnl_addr object
build_rtnl_addr() has two parameters "lifetime" and "preferred". Both
count from *now*.

Fix nmp_object_to_nl() to properly set these timestamps. This bug had
not real consequences, because the only place where we use
nmp_object_to_nl() the arguments are 0.

(cherry picked from commit d0ed4de104)
2015-07-01 16:10:49 +02:00
Thomas Haller
a3c4bf81bb platform: move address lifetime utils function to nm-platform-utils.c
(cherry picked from commit 626a85530e)
2015-07-01 16:10:49 +02:00
Thomas Haller
14ef5f6b32 platform: prettify and line-wrap route_to_string() print statements
(cherry picked from commit 2170804213)
2015-07-01 16:10:37 +02:00
Thomas Haller
e7504376dc platform: fix initializing vlan_id for NMPlatformLink instance from libnl object
If the vlan-information is missing, we must consult the cache.

Fixes: 8a1f4beb65
(cherry picked from commit 871c4d90c7)
2015-07-01 15:47:08 +02:00