Commit graph

1592 commits

Author SHA1 Message Date
Thomas Haller
64b2924051 platform/trivial: rename variable "obj_needle" to "obj_id"
Both names were used for the same thing.
2015-11-02 13:57:01 +01:00
Thomas Haller
6c8aa669a4 platform: properly handle IPv4 peer-addresses
The peer-address (IFA_ADDRESS) can also be all-zero (0.0.0.0).
That is distinct from an usual address without explicit peer-address,
which implicitly has the same peer and local address.

Previously, we treated an all-zero peer_address as having peer and
local address equal. This is especially grave, because the peer is part
of the primary key for an IPv4 address. So we not only get a property of
the address wrong, but we wrongly consider two different addresses as
one and the same.

To properly handle these addresses, we always must explicitly set the peer.
2015-11-02 13:57:01 +01:00
Thomas Haller
59eb21f4a9 platform/tests: add test setting vlan ingress/egress mappings 2015-11-02 13:57:01 +01:00
Thomas Haller
fe246d1659 platform/trivial: reorder declaration of structures in "nm-platform.h"
Just group the NMPlatformLnk* types together and sort them by name.
2015-11-02 13:57:01 +01:00
Thomas Haller
9a3cdecdec platform/trivial: rename nm_platform_infiniband_get_info() to get_properties()
We already have nm_platform_tun_get_properties(). Rename the function
as they both sidestep the platform cache to lookup some link-specific
properties.
2015-11-02 13:57:01 +01:00
Thomas Haller
7cdbc393a0 platform: refactor nm_platform_veth_get_properties()
For recent kernels, the peer-ifindex of veths is reported as
parent (IFA_LINK). Prefer that over the ethtool lookup.

For one, this avoids the extra ethtool call which has the
downside of sidestepping the platform cache. Also, looking
up the peer-ifindex in ethtool does not report whether the
peer lifes in another netns (NM_PLATFORM_LINK_OTHER_NETNS).

Only use ethtool as fallback for older kernels.
2015-11-02 13:57:01 +01:00
Thomas Haller
dd1f4d8947 platform/tests: add test cases for detecting lnk data 2015-11-02 13:57:01 +01:00
Thomas Haller
d13d17f84a platform/tests: remove "dump" test-program
The program ran over the platform links and printed them.
Our to-string methods of platform objects are already supposed
to print all fields. So this only duplicates code to print a link.

If you want to see what links were picked up by platfrom run:

  NMTST_DEBUG=log-level=TRACE ./src/platform/tests/monitor

or just

  ./src/platform/tests/monitor

Yes, this has less the iproute2 feeling, but it gives you a more
native access to the platform objects -- which is what you want
for debugging platform.
2015-11-01 17:28:09 +01:00
Thomas Haller
ca8e40e1dc platform/tests: use "nm-test-utils.h" in "monitor.c"
This gives us a way to externally configure the logging level like:

  NMTST_DEBUG=log-level=TRACE ./src/platform/tests/monitor
2015-11-01 17:28:09 +01:00
Thomas Haller
d55f19e4c4 platform: always complete link-type from cache
Previously, while detecting the link type we would lookup the
@kind in case it was missing.

Now, go one step further, and also prefer the link-type from the
cache.
2015-11-01 17:28:09 +01:00
Thomas Haller
90ff0c466d platform: implement infiniband properties as lnk data
But keep the fallback to reading sysfs to support pre-3.7 kernels.
2015-11-01 17:28:09 +01:00
Thomas Haller
07550f8dae platform: implement macvlan properties as lnk data 2015-11-01 17:28:09 +01:00
Thomas Haller
3d3762cee3 platform: implement vxlan properties as lnk data 2015-11-01 17:28:09 +01:00
Thomas Haller
4ab3d71d70 platform: implement gre properties as lnk data 2015-11-01 17:28:09 +01:00
Thomas Haller
db5d00d396 platform: implement vlan properties as lnk data 2015-11-01 17:28:08 +01:00
Thomas Haller
0506d54d55 platform: add link_data member to NMPObjectLink
https://bugzilla.gnome.org/show_bug.cgi?id=754570
2015-11-01 17:28:08 +01:00
Thomas Haller
4a20956400 platform: parse netlink messages ourselves without libnl-route-3
Constructing the libnl3 object only to parse the message
is wasteful. It involves several memory allocations, thread
synchronization and parsing fields that we don't care about.

But moreover, older libnl version might not support all the
fields we are interested in, hence we have workarounds like
_nl_link_parse_info_data(). Certain features might not fully
work unless libnl supports it too (although kernel would).

As we already parse the data ourselves sometimes, just go
all they way and don't construct the intermediate libnl object.

This will allow us to drop the _nl_link_parse_info_data() workarounds
in next commits. That is important, because _nl_link_parse_info_data()
sidesteps our platform cache and is not in sync with the cache (not to
mention the extra work to explicitly refetch the data on every lookup).

Also, it gets us 60% on the way to no longer needing 'libnl-route-3.so'
at all and eventually drop requiring the library.
2015-11-01 17:28:08 +01:00
Thomas Haller
25751f9c57 platform: add NMIPAddr struct 2015-11-01 17:28:08 +01:00
Thomas Haller
f5171089af platform/trivial: move code 2015-11-01 17:28:08 +01:00
Thomas Haller
a0229badd8 platform: only convert link-type to string once in nm_platform_link_to_string() 2015-11-01 17:28:08 +01:00
Thomas Haller
b931b09601 platform: move nm_platform_tun_get_properties() to NMPlatform base class
This function only accesses sysctl function to retrieve the tun-properties.
sysctl is already defined in the base class and equally inherited by linux
and fake platform. Move the implementation there.
2015-11-01 17:28:08 +01:00
Thomas Haller
c91a4617a1 nmp-object: allow missing implementations for certain virtual functions
We will add classes that don't implement all virtual functions.
E.g. a non-hashable class.

Be more resilient and allow for missing implementation.
2015-11-01 17:28:08 +01:00
Thomas Haller
3ae7692d31 nmp-object: remove unused nl_type field from NMPClass 2015-11-01 17:28:08 +01:00
Thomas Haller
0fd3c4e24c nmp-object/trivial: move code 2015-11-01 17:28:08 +01:00
Thomas Haller
250b1293f3 nmp-object: refactor nmp_object_copy() not to call virtual cmd_obj_copy() function for plain data 2015-11-01 17:28:08 +01:00
Thomas Haller
c40e9d764d nmp-object: implement nmp_object_equal() based on cmp()
For link objects, nmp_object_cmp() did not consider the private fields and
thus behaved different then nmp_object_equal(). This is wrong.

Implement nmp_object_equal() based on compare.
2015-11-01 17:28:08 +01:00
Thomas Haller
a2d59f5f10 platform: add buffer argument to platform to-string functions
Arguably, it is more convenient to use the static buffer as
it saves typing.

But having such a low-level function use a static buffer also
limits the way how to use it. As it was, you could not avoid
using the static buffer.

E.g. you cannot do:

  char buf[100];

  _LOGD ("nmp-object: %s; platform-link: %s",
         nmp_object_to_string (nmpobj, buf, sizeof(buf)),
         nm_platform_link_to_string (link));

This will fail for non-obvious reasons because both
to-string functions end up using the same static buffer.

Also change the to-string implementations to accept NULL
as valid and return it as "(null)".

https://bugzilla.gnome.org/show_bug.cgi?id=756427
2015-11-01 17:28:08 +01:00
Thomas Haller
98c37fed43 wifi: reimplement use of libnl-genl-3 library 2015-11-01 17:28:07 +01:00
Thomas Haller
a2e58e6e91 wifi/trivial: fix whitespace and indention in "wifi-utils-nl80211.c" 2015-11-01 17:28:07 +01:00
Thomas Haller
59ae981b22 platform: fix reading dst-port and src-port-range for vxlan
This was broken since introducing vxlan support.
2015-11-01 17:28:07 +01:00
Lubomir Rintel
698f54456f platform: correct the type for route.pref_src
It's an IPv4 address.
2015-11-01 11:28:10 +01:00
Lubomir Rintel
6e5fbf096a test: don't fail if setting /sys as a slave mount doesn't succeed
Maybe it's not mounted in the first place. We could be running in a chroot
without /sys mounted, etc.

Also, the error message was wrong.
2015-10-31 22:38:24 +01:00
Beniamino Galvani
d9d77d054d platform: fix gcc warning about comparison between enums
gcc complains with the following warning:

"comparison between 'enum <anonymous>' and 'enum vlan_flags'"

Cast one side of the comparison to avoid that.

Fixes: ee7414ebc8
2015-10-27 18:26:04 +01:00
Thomas Haller
ee7414ebc8 platform: NM defines for vlan header flags equal the linux headers 2015-10-27 17:24:52 +01:00
Jiří Klimeš
689de5c94a vlan: (all) add VLAN MVRP flag
http://patchwork.ozlabs.org/patch/219364/
2015-10-27 17:17:05 +01:00
Jiří Klimeš
48b8f57468 platform: remove unnecessary rtnl_link_set_type (change, "vlan")
The type is set by build_rtnl_link().
2015-10-27 16:29:18 +01:00
Jiří Klimeš
db62fc9d72 platform: fix adding VLAN flags
We need to unset flags first.
2015-10-27 16:23:10 +01:00
Thomas Haller
fd7d57be03 platform/trivial: rename "auto_nmp_obj" macro to "nm_auto_nmpobj"
A define in a header file should have an "NM" prefix. Also,
let's have "nm_auto_" as a prefix for cleanup macros beside
libgsystem's "gs_".
2015-10-20 14:43:54 +02:00
Thomas Haller
638528d312 platform: move static asserts from header to source file
No point in having every user of the header file evaluate the
static assertion.
2015-10-20 14:08:04 +02:00
Thomas Haller
8a6afe92c1 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
2015-10-19 12:24:39 +02:00
Beniamino Galvani
e587dcb16e 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
2015-10-16 17:11:26 +02:00
Guido Günther
35802ac01c platform: fix compilation if we don't have INET6_ADDR_GEN_MODE_* constants
As in src/platform/nm-linux-platform.c

https://mail.gnome.org/archives/networkmanager-list/2015-October/msg00023.html
2015-10-15 17:44:44 +02:00
Thomas Haller
06aafabf14 platform/test: add test adding IPv4 addresses that only differ by their peer-address
Also do a major cleanup of the tests:

- Have utility functions in "test-common.h" with a new prefix "nmtstp_".
  The prefix indicates that these are test functions for platform.

- Add functions to add/remove IP addresses that either use external
  iproute2 command or platform function itself. These commands also
  assert whether the command had the expected result.

- Randomize, whether we use the external command for adding
  ip-addresses. Both approaches should yield the same result
  for linux-platform.
  I did this now for address-tests, but effectively this doubled
  all our previous tests to use both internal and external ways
  to configure the address.

- Enable all address tests for fake-platform. They now
  automatically don't call external iproute2 but fallback
  to fake-platform implementation. This adds more coverage
  to the fake-platform, which we want to behave identical
  to linux-platform.

- Setup a clean test device before every address-test.
2015-10-14 16:16:21 +02:00
Thomas Haller
6a5dab5c7c platform: fix id-equality for IPv6 address to ignore prefix-length
For IPv6 addresses, the prefix-length is not part of the id.
E.g. you cannot add two IPv6 addresses that only differ by
plen.
2015-10-14 12:52:07 +02:00
Thomas Haller
eab5a462b4 platform: fix comparing peer-address for IPv6 address in nm_platform_ip6_address_cmp() 2015-10-14 12:52:07 +02:00
Thomas Haller
8968e15eb7 platform: properly handle peer-address for IPv4 addresses
Kernel allows to add the same IPv4 address that only differs by
peer-address (IFL_ADDRESS):

    $ ip link add dummy type dummy
    $ ip address add 1.1.1.1 peer 1.1.1.3/24 dev dummy
    $ ip address add 1.1.1.1 peer 1.1.1.4/24 dev dummy
    RTNETLINK answers: File exists
    $ ip address add 1.1.1.1 peer 1.1.2.3/24 dev dummy
    $ ip address show dev dummy
    2: dummy@NONE: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
        link/ether 52:58:a7:1e:e8:93 brd ff:ff:ff:ff:ff:ff
        inet 1.1.1.1 peer 1.1.1.3/24 scope global dummy
           valid_lft forever preferred_lft forever
        inet 1.1.1.1 peer 1.1.2.3/24 scope global dummy
           valid_lft forever preferred_lft forever

We must also consider peer-address, otherwise platform will treat
two different addresses as one and the same.

https://bugzilla.gnome.org/show_bug.cgi?id=756356
2015-10-14 12:52:07 +02:00
Thomas Haller
44c43b4f5c platform: rename _CMP_POINTER() macro to _CMP_SELF()
This name is better, because _CMP_SELF() is the first check of the two
operands to catch pointer-equality and NULL values.
2015-10-14 12:52:07 +02:00
Thomas Haller
f193d98ced platform: refactor order of peer-address argument in ip_address_add() function
The peer-address seems less important then the prefix-length.
Also, nm_platform_ip4_address_delete() has the peer-address
argument as last.

Soon ip4_address_get() also receives a peer-address argument,
so get the order right first.
2015-10-14 12:52:07 +02:00
Thomas Haller
3e76701961 platform: fix wrongly return "FALSE" instead of "NULL" for pointer type 2015-10-10 19:46:28 +02:00
Thomas Haller
1ef431ab38 platform: use nm_g_hash_table_add() compat wrapper in _nmp_cache_update_add() 2015-10-10 19:41:42 +02:00