Commit graph

553 commits

Author SHA1 Message Date
Thomas Haller
f59cda06ce platform/trivial: remove unused argument from udev_get_driver()
(cherry picked from commit 7354dc4c58)
2015-06-17 13:50:36 +02:00
Thomas Haller
fd61283fb0 platform/trivial: rename object_type_from_nl_object() to _nlo_get_object_type()
The function names in linux-platform should get better prefixes
indicating whether they are related to libnl or nm objects.

Add a prefix _nlo_ for functions that operate on libnl objects.

(cherry picked from commit 7c5d361c66)
2015-06-17 13:50:36 +02:00
Thomas Haller
fc499ffd14 platform/trivial: move code around so that libnl related stuff is together
Reorder some functions in nm-platform, so that we first have independent
libnl wrappers/utils, then NMPlatform type definition, and then the
rest.

(cherry picked from commit 850af91f22)
2015-06-17 13:50:36 +02:00
Thomas Haller
7518d9a1ce platform/trivial: add OBJECT_TYPE_MAX enum value
(cherry picked from commit ee64b8585b)
2015-06-17 13:50:36 +02:00
Thomas Haller
87b49c088e platform/test: clear host part of routes in fake platform
Adding a route with host part non zero is rejected by kernel.
But NMLinuxPlatform works around it -- so must fake platform.

(cherry picked from commit cdd3e1c302)
2015-06-17 13:50:36 +02:00
Thomas Haller
1bbf159cd0 platform/test: fake platform must use nm-logging for reporting errors
Just like linux platform does.

(cherry picked from commit 21b129084f)
2015-06-17 13:50:36 +02:00
Dan Williams
fd40f223bf platform: prevent warning when udev is clueless about a device
udev doesn't know about the device yet when NM creates it internally.

NetworkManager[9275]: <info>  (team0): carrier is OFF
NetworkManager[9275]: <info>  (team0): new Team device (driver: 'team' ifindex: 16)
(NetworkManager:9275): GUdev-CRITICAL **: g_udev_device_get_property: assertion 'G_UDEV_IS_DEVICE (device)' failed
NetworkManager[9275]: <info>  (team0): exported as /org/freedesktop/NetworkManager/Devices/5

(cherry picked from commit 8173f0f9e8)
2015-06-17 13:50:36 +02:00
Lubomir Rintel
117e62040d platform: give the platform an opportunity to override default-unmanaged
Some out of tree drivers add Ethernet devices that are supposed to be managed
by other their tooling, e.g. VirtualBox or VMWare.

Rather than hardcoding their drivers (at least VirtualBox doesn't even set a
"driver" property in sysfs) or hardcoding a logic that identifies such devices
let's just add a possibility to blacklist them in udev. This makes it possible
for whoever who ships such a driver to ship rules that prevent NetworkManager
from managing the device itself.

Furthermore it makes it possible for the user with special needs leverage the
flexibility of udev rules to override the defaults. In the end the user can
decide to let NetworkManager manage default-unmanaged interfaces such as VEth
or turn on default-unmanaged for devices on a particular bus.

An udev rule for VirtualBox would look like this:

  SUBSYSTEM=="net", ENV{INTERFACE}=="vboxnet[0-9]*", ENV{NM_UNMANAGED}="1"

(cherry picked from commit 85ee1f4a9c)
2015-06-17 13:39:42 +02:00
Lubomir Rintel
3300e10c69 platform: don't wait for udev device initializaton if there's no udev
There's no udev running in containers, it only starts if /sys is writable. If a
hardware device is added to the container's namespace NM would not announce it.

This also removes the software link special case -- the software links will now
wait for udev initialization (in case udev is there) as well. There's no reason
to treat them differently anymore. This makes it possible to use udev properties
of the software links.

https://bugzilla.gnome.org/show_bug.cgi?id=740526
(cherry picked from commit 4a05869557)
2015-06-17 13:39:41 +02:00
Thomas Haller
ba285e319e libnm: move _nm_utils_ascii_str_to_int64() from src/ to libnm-core/
(cherry picked from commit c5d23737fd)
2015-06-17 13:30:39 +02:00
Thomas Haller
a4d11bae29 trivial: rename nm_utils_ascii_str_to_int64() to _nm_utils_ascii_str_to_int64()
(cherry picked from commit 093f6d477b)
2015-06-17 13:30:38 +02:00
Lubomir Rintel
0916861c5c fake-platform: normalize ipv6 route metric before deletion
(cherry picked from commit 72cefd5162)
2015-06-17 13:30:38 +02:00
Lubomir Rintel
63611cb46f fake-platform: reject adding routes without the gateway on the same interface
This mimics Linux behavior.

(cherry picked from commit 4d097829f0)
2015-06-17 13:30:38 +02:00
Lubomir Rintel
7e5981a894 fake-platform: override routes that clash
This is done to more closely mimic what Linux does.

(cherry picked from commit f6c9b4ff83)
2015-06-17 13:30:38 +02:00
Lubomir Rintel
a3ff3fbbc0 fake-platform: move route deletion above addition
No change in behavior.

We'll need it when we'll remove routes that clash upon addition.

(cherry picked from commit 1ee03eeb5a)
2015-06-17 13:30:38 +02:00
Lubomir Rintel
99c2980a65 fake-platform: don't return null routes in place of deleted ones
(cherry picked from commit 72e8c534e0)
2015-06-17 13:30:38 +02:00
Lubomir Rintel
172f5256a7 platform: Add support for IPv6 tokenized identifiers on Linux
(cherry picked from commit c2f9940470)
2015-06-17 13:19:16 +02:00
Lubomir Rintel
c3c927d1d1 platform: refresh link cache when IPv6 tokenized identifier changes
(cherry picked from commit 954a4b69b8)
2015-06-17 13:19:16 +02:00
Lubomir Rintel
3cbd7cdc03 platform: Add support for IPv6 tokenized identifiers
(cherry picked from commit db5603e615)
2015-06-17 13:19:16 +02:00
Thomas Haller
948cfd8f5c core: use nm_utils_modprobe()
https://bugzilla.gnome.org/show_bug.cgi?id=740651

(cherry picked from commit 32625f604b)
2015-06-17 12:53:24 +02:00
Lubomir Rintel
9ce3e5e76e platform-linux: allow netlink messages from non-privileged user namespaces
Just check they're from kernel.

(cherry picked from commit ef295ddeef)
2015-06-04 14:39:49 +02:00
Thomas Haller
b67d017619 platform/test: include call location in signal assertions
Hard to debug failures, if we don't print where the failure
happens.

(cherry picked from commit 500cbcba21)

Conflicts:
	src/platform/tests/test-common.c
2015-05-13 16:07:36 +02:00
Thomas Haller
adc145f537 platform/test: make asserting signals more flexible
Support accepting more then one signal at a time.
It is to be expected, that one change in platform raises
several signals. Extend the assertion helpers to express
that.

(cherry picked from commit 050c644cce)
2015-05-13 16:07:36 +02:00
Thomas Haller
495209c145 platform: fix nm_platform_link_cmp() to consider ifindex
(cherry picked from commit f167346534)
2015-05-13 16:07:36 +02:00
Thomas Haller
7234352fd7 platform: fix memleak in link_delete()
Turns out, the valgrind suppression was hiding a memleak

(cherry picked from commit 0c258402c7)
2015-05-13 16:07:36 +02:00
Thomas Haller
0f90e60df9 platform/test: refactor detection of root-test
(cherry picked from commit 313af401d3)
2015-05-13 16:07:35 +02:00
Thomas Haller
4c9f0fc2ab platform: fix memleak in build_rtnl_addr() using wrong put() method
'struct nl_addr' and 'struct nl_object' have non-compatible put()
functions.

(cherry picked from commit 76ba548959)
2015-05-05 04:20:22 +02:00
Thomas Haller
6e8c5b51b1 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
(cherry picked from commit bdaaf9849b)

Conflicts:
	src/nm-iface-helper.c
	src/platform/nm-platform.h
2015-04-29 14:28:57 +02:00
Jiří Klimeš
a658561be9 platform: use driver name to detect IBM z-System CTC devices (rh #1212118)
We used to detect CTC devices according to the interface name. But that does
not work anymore due to systemd renaming the devices.
Let's use driver name for the detection instead. The driver is called 'ctcm'.

http://www-01.ibm.com/support/knowledgecenter/linuxonibm/com.ibm.linux.z.lgdd/lgdd_r_mpc_setup.html

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

(cherry picked from commit 02c6a93343)
2015-04-29 13:28:58 +02:00
Thomas Haller
7dfd7801e9 platform: ignore routes with non-zero TOS
The identifying properties of a route are (in libnl)

    .o_id_attrs = (ROUTE_ATTR_FAMILY | ROUTE_ATTR_TOS |
                   ROUTE_ATTR_TABLE | ROUTE_ATTR_DST |
                   ROUTE_ATTR_PRIO),

NM ignores routes other then in table RT_TABLE_MAIN and considers
only the tuple 'family,network/plen,metric' as identifying for a route.

We must also ignore routes with TOS non-zero as we cannot
handle those, i.e. we cannot distinguish between them.

(cherry picked from commit af2c0ef771)
2015-04-28 18:06:43 +02:00
Thomas Haller
fe6889f7b1 platform: remove wrong assertion
This is a well known issue that we cannot convert some libnl
objects to NMPlatformObject. The to-string function for libnl
objects is only used for debug logging. No need to assert.

(cherry picked from commit 8f080747c6)
2015-04-23 16:39:27 +02:00
Jiří Klimeš
34d87a7603 platform: load libnl-3.so.200, not libnl-3.so (rh #1205195)
libnl-3.so link is only present in devel package (libnl3-devel).

https://bugzilla.redhat.com/show_bug.cgi?id=1205195
(cherry picked from commit d767fb160c)
2015-04-21 14:46:55 +02:00
Beniamino Galvani
d2e5e648d4 wifi: indicate 2ghz and 5ghz wifi device capabilities
Add new capabilities CAP_FREQ_2GHZ and CAP_FREQ_5GHZ to indicate the
frequency bands supported by a Wifi device.

Add also CAP_FREQ_VALID, which is set when the values of the other 2
capabilities are available.

Original patch by Dan Williams <dcbw@redhat.com>

https://bugzilla.gnome.org/show_bug.cgi?id=723295
(cherry picked from commit aabc6fc57b)
2015-04-09 09:20:48 -05:00
Thomas Haller
1ff6f6c304 platform: add VTable to handle IPv4 and IPv6 routes generically
(cherry picked from commit 290faa003d)
2015-04-09 11:21:08 +02:00
Thomas Haller
897ac18bbb test: add option in nmtst_platform_ip4_routes_equal() to ignore ordering
Same for nmtst_platform_ip6_routes_equal().

It's useful to check for equal routes ignoring the ordering.

(cherry picked from commit 57453189e0)

Conflicts:
	src/tests/test-route-manager.c
2015-04-09 11:21:08 +02:00
Thomas Haller
d0172aa4d6 platform/test: use g_print() in platform tests to indicate skip/fail
Don't use g_message() in platform tests for test messages.

This is a partial backport of commit 5fd3827,
  "route-manager/test: fix usage of g_assert_expect_message()"

(cherry picked from commit 5fd3827e49)
2015-04-09 11:21:03 +02:00
Thomas Haller
3b014ddef8 platform/test: split initialization of platform tests out
test-route-manager soon wants a different initialization

(cherry picked from commit 24288f713a)
2015-04-09 08:22:28 +02:00
Thomas Haller
8eefbce9fa platform: don't write debug message to stderr
Use nm-logging instead.

(cherry picked from commit 07f95c371c)
2015-04-09 08:22:28 +02:00
Lubomir Rintel
53b51b307f build: disable warnings where macros expand to tautological comparisons
(cherry picked from commit 3ccc6f290d)
2015-04-09 08:19:47 +02:00
Dan Williams
51fd5a9bd7 platform: add nm_platform_link_get_dev_id()
Some devices (s390 OSA and ipvlan) use the same link layer address
for different interfaces, and dev_id is what differentiates them.
2015-03-27 15:24:48 -05:00
Dan Williams
f3902ca423 platform: update code documentation for nm_platform_link_get_physical_port_id() 2015-03-27 15:18:03 -05:00
Thomas Haller
c2cd7e631f platform/tests: reenable valgrind tests
valgrind tests for platform were wrongly disabled.

Fixes: e3784fa618
(cherry picked from commit 6853d07f05)
2015-03-13 11:50:04 +01:00
Lubomir Rintel
fe9dada57a route-manager: refactor: a readability improvement
(cherry picked from commit 6c5d93b847)

Conflicts:
	src/nm-route-manager.c
2015-03-09 14:27:44 +01:00
Lubomir Rintel
435632a757 platform: fix route addition ordering
(cherry picked from commit 47167cab4f)
2015-03-09 14:26:13 +01:00
Lubomir Rintel
e343507bd4 linux-platform: dont use-after-free the driver string
==1345== Invalid read of size 1
==1345==    at 0x827DC15: vfprintf (vfprintf.c:1642)
==1345==    by 0x8345D04: __vasprintf_chk (vasprintf_chk.c:66)
==1345==    by 0x7F882DB: vasprintf (stdio2.h:210)
==1345==    by 0x7F882DB: g_vasprintf (gprintf.c:316)
==1345==    by 0x7F6319C: g_strdup_vprintf (gstrfuncs.c:507)
==1345==    by 0x7F63258: g_strdup_printf (gstrfuncs.c:533)
==1345==    by 0x472833: nm_platform_link_to_string (nm-platform.c:2337)
==1345==    by 0x472A05: log_link (nm-platform.c:2754)
==1345==    by 0x9DC5D5F: ffi_call_unix64 (unix64.S:76)
==1345==    by 0x9DC57D0: ffi_call (ffi64.c:525)
==1345==    by 0x7CBA553: g_cclosure_marshal_generic (gclosure.c:1448)
==1345==    by 0x7CB9D34: g_closure_invoke (gclosure.c:768)
==1345==    by 0x7CCB34B: signal_emit_unlocked_R (gsignal.c:3483)
==1345==  Address 0xa91b5a0 is 0 bytes inside a block of size 5 free'd
==1345==    at 0x4C2ACE9: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==1345==    by 0x68E7D6D: link_free_data (link.c:223)
==1345==    by 0x6D47B1F: nl_object_free (object.c:186)
==1345==    by 0x46C31C: put_nl_object (nm-linux-platform.c:222)
==1345==    by 0x46C31C: link_change (nm-linux-platform.c:2354)
==1345==    by 0x46C87F: link_set_user_ipv6ll_enabled (nm-linux-platform.c:2583)
==1345==    by 0x4476C4: set_nm_ipv6ll (nm-device.c:4418)
==1345==    by 0x4476C4: ip6_managed_setup (nm-device.c:7515)
==1345==    by 0x453F12: _set_state_full (nm-device.c:7665)
==1345==    by 0x4B6609: add_device (nm-manager.c:1885)
==1345==    by 0x4B6880: system_create_virtual_device (nm-manager.c:1126)
==1345==    by 0x4B6B40: system_create_virtual_devices (nm-manager.c:1163)
==1345==    by 0x4B6E00: platform_link_added (nm-manager.c:2213)
==1345==    by 0x4B6E00: platform_link_cb (nm-manager.c:2228)
==1345==    by 0x9DC5D5F: ffi_call_unix64 (unix64.S:76)

(cherry picked from commit f93f0e0b15)
2015-02-18 18:15:35 +01:00
Lubomir Rintel
cdf17af657 ip6-config: remove the link-local address on address flush
If it stays after device dispose a connection is assumed.

https://bugzilla.redhat.com/show_bug.cgi?id=1184997
(cherry picked from commit 6771f836ce)
2015-01-28 17:54:31 +01:00
Aleksander Morgado
4953610846 platform: avoid storing unknown netlink object types (bgo #742928)
Testing WWAN connections through a Nokia Series 40 phone, addresses of family
AF_PHONET end up triggering an assert() in object_has_ifindex(), just because
object_type_from_nl_object() only handles AF_INET and AF_INET6 address.

In order to avoid this kind of problems, we'll try to make sure that the object
caches kept by NM only store known object types.

(fixup by dcbw to use cached passed to cache_remove_unknown())

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

    Connect: ppp0 <--> /dev/ttyACM0
    nm-pppd-plugin-Message: nm-ppp-plugin: (nm_phasechange): status 5 / phase 'establish'
    NetworkManager[27434]: <info>  (ppp0): new Generic device (driver: 'unknown' ifindex: 12)
    NetworkManager[27434]: <info>  (ppp0): exported as /org/freedesktop/NetworkManager/Devices/4
    [Thread 0x7ffff1ecf700 (LWP 27439) exited]
    NetworkManager[27434]: <info>  (ttyACM0): device state change: ip-config -> deactivating (reason 'user-requested') [70 110 39]
    Terminating on signal 15
    nm-pppd-plugin-Message: nm-ppp-plugin: (nm_phasechange): status 10 / phase 'terminate'
    **
    NetworkManager:ERROR:platform/nm-linux-platform.c:1534:object_has_ifindex: code should not be reached

    Program received signal SIGABRT, Aborted.
    0x00007ffff4692a97 in raise () from /usr/lib/libc.so.6
    (gdb) bt
    #0  0x00007ffff4692a97 in raise () from /usr/lib/libc.so.6
    #1  0x00007ffff4693e6a in abort () from /usr/lib/libc.so.6
    #2  0x00007ffff4c8d7f5 in g_assertion_message () from /usr/lib/libglib-2.0.so.0
    #3  0x00007ffff4c8d88a in g_assertion_message_expr () from /usr/lib/libglib-2.0.so.0
    #4  0x0000000000472b91 in object_has_ifindex (object=0x8a8320, ifindex=12) at platform/nm-linux-platform.c:1534
    #5  0x0000000000472bec in check_cache_items (platform=0x7fe8a0, cache=0x7fda30, ifindex=12) at platform/nm-linux-platform.c:1549
    #6  0x0000000000472de3 in announce_object (platform=0x7fe8a0, object=0x8a8c30, change_type=NM_PLATFORM_SIGNAL_REMOVED, reason=NM_PLATFORM_REASON_EXTERNAL) at platform/nm-linux-platform.c:1617
    #7  0x0000000000473dd2 in event_notification (msg=0x8a7970, user_data=0x7fe8a0) at platform/nm-linux-platform.c:1992
    #8  0x00007ffff5ee14de in nl_recvmsgs_report () from /usr/lib/libnl-3.so.200
    #9  0x00007ffff5ee1849 in nl_recvmsgs () from /usr/lib/libnl-3.so.200
    #10 0x00000000004794df in event_handler (channel=0x7fc930, io_condition=G_IO_IN, user_data=0x7fe8a0) at platform/nm-linux-platform.c:4152
    #11 0x00007ffff4c6791d in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
    #12 0x00007ffff4c67cf8 in ?? () from /usr/lib/libglib-2.0.so.0
    #13 0x00007ffff4c68022 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
    #14 0x00000000004477ee in main (argc=1, argv=0x7fffffffeaa8) at main.c:447
    (gdb) fr 4
    #4  0x0000000000472b91 in object_has_ifindex (object=0x8a8320, ifindex=12) at platform/nm-linux-platform.c:1534
    1534                    g_assert_not_reached ();

(cherry picked from commit bf7865e859)
2015-01-15 11:15:58 -06:00
Dan Williams
45c7adb309 platform: don't read past end of address array (bgo #742937)
The address might be zero-size, and therefore nl_addr_get_binary_addr()
returns a pointer to a zero-size array.  We don't want to read past the
end of that array.  Since zero-size addresses really mean an address
of all zeros, just make that happen.

As an additional optimization, if the prefix length is zero, the whole
address is host bits and should be cleared.

==30286== Invalid read of size 4
==30286==    at 0x478090: clear_host_address (nm-linux-platform.c:3786)
==30286==    by 0x4784D4: route_search_cache (nm-linux-platform.c:3883)
==30286==    by 0x4785A1: refresh_route (nm-linux-platform.c:3901)
==30286==    by 0x4787B6: ip4_route_delete (nm-linux-platform.c:3978)
==30286==    by 0x47F674: nm_platform_ip4_route_delete (nm-platform.c:1980)
==30286==    by 0x4B279D: _v4_platform_route_delete_default (nm-default-route-manager.c:1122)
==30286==    by 0x4AEF03: _platform_route_sync_flush (nm-default-route-manager.c:320)
==30286==    by 0x4B043E: _resync_all (nm-default-route-manager.c:574)
==30286==    by 0x4B0CA7: _entry_at_idx_remove (nm-default-route-manager.c:631)
==30286==    by 0x4B1A66: _ipx_update_default_route (nm-default-route-manager.c:806)
==30286==    by 0x4B1A9C: nm_default_route_manager_ip4_update_default_route (nm-default-route-manager.c:813)
==30286==    by 0x45C3BC: _cleanup_generic_post (nm-device.c:7143)
==30286==  Address 0xee33514 is 0 bytes after a block of size 20 alloc'd
==30286==    at 0x4C2C080: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==30286==    by 0x6B2B0B1: nl_addr_alloc (in /usr/lib/libnl-3.so.200.20.0)
==30286==    by 0x6B2B0E3: nl_addr_build (in /usr/lib/libnl-3.so.200.20.0)
==30286==    by 0x6B2B181: nl_addr_clone (in /usr/lib/libnl-3.so.200.20.0)
==30286==    by 0x66DB0D7: ??? (in /usr/lib/libnl-route-3.so.200.20.0)
==30286==    by 0x6B33CE6: nl_object_clone (in /usr/lib/libnl-3.so.200.20.0)
==30286==    by 0x6B2D303: nl_cache_add (in /usr/lib/libnl-3.so.200.20.0)
==30286==    by 0x472E55: refresh_object (nm-linux-platform.c:1735)
==30286==    by 0x473137: add_object (nm-linux-platform.c:1795)
==30286==    by 0x478373: ip4_route_add (nm-linux-platform.c:3846)
==30286==    by 0x47F375: nm_platform_ip4_route_add (nm-platform.c:1939)
==30286==    by 0x4AEC06: _platform_route_sync_add (nm-default-route-manager.c:254)

https://bugzilla.gnome.org/show_bug.cgi?id=742937
(cherry picked from commit d2871089a8)
2015-01-15 11:09:29 -06:00
Lubomir Rintel
2eeb7fa8c2 platform: fix draining of the event queue with old libnl (rh #1180773)
It fails doesn't propagate EAGAIN properly. Fixed in 3.2.22's 375a629.

https://bugzilla.redhat.com/show_bug.cgi?id=1180773
(cherry picked from commit 529591d8de)
2015-01-12 22:19:48 +01:00
Thomas Haller
0716e6cb3a platform: suppress change event when deleting IPv4 route with metric 0
refresh_object() raised a spurious change event for the route we
are about to delete. Suppress that by adding an internal reason flag.

Fixes: 41e6c4fac1
(cherry picked from commit 96c099de09)
2015-01-12 22:08:42 +01:00