Commit graph

120 commits

Author SHA1 Message Date
Dan Winship
bfce3f7dc8 build: switch from $(INCLUDES) to $(AM_CPPFLAGS) to make automake happy
Unfortunately, $(AM_CPPFLAGS) gets overridden by per-target _CPPFLAGS
variables, which $(INCLUDES) did not, so this requires some additional
changes.

In most places, I have just gotten rid of the per-target _CPPFLAGS
variables; in directories with a single target, the per-target
variable is unnecessary, and in directories with multiple targets, the
per-target variable is often undesirable, since it forces some files
to be compiled twice, even though there ends up being no difference
between the two files.
2013-08-22 11:49:16 -04:00
Thomas Haller
6e6b573383 core: minor code cleanup to use preprocessor constants
Use preprocessor constants for signal names NM_PLATFORM_LINK_*
instead of hard coded values.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-08-12 13:31:33 -05:00
Pavel Šimerda
8d10e8bbe6 platform: ignore multi-hop routes
https://bugzilla.gnome.org/show_bug.cgi?id=705606
2013-08-12 17:35:22 +02:00
Dan Williams
37efd55699 platform: fix some bogus compiler warnings
platform/nm-linux-platform.c: In function 'delete_object':
platform/nm-linux-platform.c:102:13: error: 'cached_object' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  if (object && *object) {
             ^
platform/nm-linux-platform.c:1019:35: note: 'cached_object' was declared here

Except that it won't be, but I guess the gsystem auto* stuff is
confusing the compiler.
2013-08-07 15:47:47 -05:00
Dan Williams
b637c6a101 platform: don't assert on multi-hop routes (rh #989022)
It only matters that there's at least one next hop, not that there
is only one.
2013-08-07 14:47:22 -05:00
Dan Williams
ead39cb421 core,platform: don't completely ignore WWAN pseudo-ethernet interfaces
The platform still needs to know about them, becuase the ethernet interface
is what gets configured and used for IP.  But the Manager doens't want to
create a full new NMDevice for them, because there's already a Modem
device that "owns" that WWAN interface.  So keep WWAN devices visible
to the platform, but just make the manager ignore them when creating
NMDevices.

Also, many WWAN pseduo-ethernet drivers set NOARP becuase they really
are point-to-point and thus ARP is pointless, and in this case, they
won't have any arptype of ARPHRD_ETHER.  So determining the NMLinkType
from udev must take that into account.
2013-08-07 14:39:00 -05:00
Dan Winship
1d3ae22905 platform: fix initial link-added emission
nm_platform_query_devices() wasn't including the new "reason" argument
in its link-added emissions. (This didn't cause any problems since
NMManager doesn't look at that argument anyway, but it's still
obviously wrong.)
2013-08-06 16:36:51 -05:00
Dan Williams
eba7484367 core: don't wait for udev to find created software devices
NM knows software devices it creates exist immediately, and it knows
it can use them immediately instead of waiting for udev to find them.
Ideally we'd wait for udev to find all devices, to allow tags and
other rules to run, but when creating software devices they must
currently be available for use immediately.

Bridges and bonds are required to be IFF_UP before they can be
activated (see their is_available() implementation).  But during
activation code paths, specifically in nm_manager_activate_connection(),
the interface is created and immediately checked for availability
to activate (since the creation was a result of the user requesting
device activation).  That availability check fails, because the
device is not visible outside NMPlatform (because it hasn't been
found by udev yet, because we haven't gotten back to the event
loop) and thus nm_platform_link_is_up() fails, failing the
availability check.  Thus the device activation ends in error.

What should really happen is that device activation shouldn't
be synchronous; a new NMActiveConnection should be created for
any activation request, which can then wait until all the
resources it needs for activation are available (device found,
master devices created, etc).  That's going to take more work
though.
2013-08-06 16:36:51 -05:00
Dan Williams
7570832b20 platform: simplify getting routes and ignoring the default route
Most places except the tests don't want the default route when asking
the platform for all routes, so make that simpler by just adding a
parameter for including the default route or not.
2013-08-03 00:14:19 -05:00
Dan Williams
1923f54d79 build: fix distcheck
New platform changes need NMPlatformReason enum which requires the
generated nm-enum-types.h, which is only in the builddir.
2013-08-02 17:09:50 -05:00
Pavel Šimerda
356cad68fa platform: add reason attribute to all signals 2013-08-02 23:12:21 +02:00
Pavel Šimerda
c1bbacae4c platform: re-check potentially removed objects 2013-08-02 23:04:46 +02:00
Pavel Šimerda
d85ae74388 platform: rework the object refresh code 2013-08-02 22:17:07 +02:00
Pavel Šimerda
900b4b15c5 platform: don't check for route existence (fixup)
This was part of a patch that resulted in commit 5dd15bd but
unfortunately also part of a reverted patch 42b4323. We need
to add it back.
2013-08-02 22:17:07 +02:00
Pavel Šimerda
2167e4376b Revert "platform: work around missing kernel netlink notifications of default route changes"
This reverts commit 42b4323902.
2013-08-02 22:17:06 +02:00
Pavel Šimerda
5dd15bd459 platform: don't check for route existence
This is the same we already did for nm-platform addresses in commit
68c3e1153c. It will help to avoid various
issues and is also a step towards support for route lifetimes.
2013-08-01 18:09:03 +02:00
Dan Williams
42b4323902 platform: work around missing kernel netlink notifications of default route changes
It appears the kernel does not send notifications via netlink if the
default route is removed in some cases.  This causes the platform
route cache to become stale, and thus when the default route is
reset by NM the platform thinks the route already exists, and does
not add it.  But the route doesn't exist, becuase the kernel silently
removed it without telling anyone.

Fix that with a big hammer by flushing/refilling the route cache when
devices are deactivated (deletion of their addresses causes the default
route to be removed by the kernel) and when the default route is
updated by NM itself.

Pavel: if we find a more granular method, we should probably revert
this as the cache refill can be expensive.
2013-07-31 12:14:52 -05:00
Pavel Šimerda
e59949c7cf platform: show address lifetimes in debug 2013-07-30 16:36:47 +02:00
Jiří Klimeš
379951ee18 platform-test: fix build with glib < 2.34
Use our compatibility version for g_clear_pointer() that is not defined
in glib < 2.34.
2013-07-30 12:53:42 +02:00
Pavel Šimerda
b502b6cd58 platform: ignore kernel-generated routes
This is necessary to avoid tinkering with IPv4 prefix routes
automatically inserted by the kernel for each IPv4 address.

https://bugzilla.gnome.org/show_bug.cgi?id=705102
2013-07-30 11:40:19 +02:00
Pavel Šimerda
68c3e1153c platform: update all address lifetimes
The nm_platform_ip[46]_address_sync() functions no longer use
nm_platform_ip[46]_address_exists() to avoid adding already
existing addresses. That means nm_platform_ip[46]_address_add()
is now called for *all* commited addresses and the lifetimes
are thus always updated.

Because of that, nm_platform_ip[46]_address_add() had to be modified to
accept existing addresses and update their lifetimes when appropriate.

https://bugzilla.gnome.org/show_bug.cgi?id=705102
2013-07-30 11:40:19 +02:00
Pavel Šimerda
3cf1b71de2 platform: simplify address comparisons 2013-07-30 11:40:19 +02:00
Pavel Šimerda
22c4f5f5af platform: handle empty arrays in array_contains_ip[46]_*() 2013-07-30 11:40:19 +02:00
Dan Williams
9fea2430bd platform: temporarily work around mismatching lifetime/timestamp/preferred (bgo #705102)
Addresses in the platform cache will have timestamp/lifetime/preferred set,
but addresses to be added or removed (like new IP config from DHCP renewal
or new RAs) won't have these set, since they only get set when the address
is actually added to the kernel.  So when syncing addresses, we can't look
at any of these items or nothing matches, and all existing addresses get
removed.

https://bugzilla.gnome.org/show_bug.cgi?id=705102
2013-07-29 14:54:25 -05:00
Pavel Šimerda
afc3c2617a platform: cosmetic changes 2013-07-27 00:47:04 +02:00
Pavel Šimerda
00b63b975f platform: always cleanup nm-test-device 2013-07-27 00:47:04 +02:00
Pavel Šimerda
2ef7110f37 platform: fix memory leaks 2013-07-27 00:47:04 +02:00
Pavel Šimerda
f121995fad platform: add support for address lifetimes 2013-07-26 22:45:15 +02:00
Pavel Šimerda
aca9b9b570 platform: fix udev/kernel interface race conditions
A network interface is only exposed if it's recognized by both netlink
cache and udev.
2013-07-26 21:14:08 +02:00
Pavel Šimerda
423307f6bc platform: improve signal handling in tests 2013-07-26 21:10:27 +02:00
Pavel Šimerda
1c88de0488 platform: remove nm_platform_delete_device_by_name() 2013-07-26 21:10:27 +02:00
Pavel Šimerda
ad5b0a8e67 platform: more logging for tests 2013-07-26 21:10:27 +02:00
Pavel Šimerda
6d688f9c87 trivial: simplify a condition 2013-07-26 18:16:18 +02:00
Pavel Šimerda
7cc7a38288 platform: handle address/route deletion upon link actions (bgo #704770)
When link goes !IFF_UP by internal or external action, we need to delete
related routes from the route cache. The same is done for both addresses
and routes upon link removal.

https://bugzilla.gnome.org/show_bug.cgi?id=704770
2013-07-24 09:49:03 -05:00
Pavel Šimerda
38a57b3497 platform: listen for route changes properly 2013-07-24 10:05:41 +02:00
Pavel Šimerda
801434ce45 platform: don't remove default route in *_route_sync() 2013-07-22 13:03:46 +02:00
Pavel Šimerda
b66355e9ef platform: use platform sources even for testing tools
This (together with a patch adding src/platform/Makefile.am) allows for
a workflow where your working directory is src/platform and all tests
and testing tools are rebuilt with your src/platform modifications.
2013-06-26 22:40:48 +02:00
Pavel Šimerda
4134acc614 platform: simplify tests Makefile.am using variables 2013-06-26 22:40:28 +02:00
Pavel Šimerda
b0ae0be291 platform: use the term 'software devices' consistently 2013-06-26 22:38:55 +02:00
Pavel Šimerda
9d92275ac9 platform: add link type classification 2013-06-26 22:29:11 +02:00
Pavel Šimerda
1c078e9bd5 platform: log route metric 2013-06-26 19:58:18 +02:00
Pavel Šimerda
a19e1d6f61 platform: make log_* consistent 2013-06-26 19:58:18 +02:00
Pavel Šimerda
75430c72d0 platform: avoid netlink synchronization problem
The route metric is one of the object's key attributes and therefore
cannot be left to be chosen by the kernel. Instead, it must always be
specified explicitly. This matches the architecture of libnl3 and the
current API provided by nm-platform.
2013-06-26 19:58:18 +02:00
Dan Winship
ec1376fad2 trivial: update .gitignore 2013-06-26 11:10:02 -04:00
Pavel Šimerda
ef73aa3b2c platform: route utility functions 2013-06-25 09:50:35 +02:00
Pavel Šimerda
bd0fd1cd1d platform: address utility functions 2013-06-25 09:32:06 +02:00
Pavel Šimerda
f625d6a269 platform: handle netlink failures properly 2013-06-21 04:03:41 +02:00
Pavel Šimerda
3b0269bbee platform: add test for address/route cleanup on link removal
The improved tests can be also used to test the previous commit.
2013-06-21 04:03:41 +02:00
Pavel Šimerda
40cb2f4c29 platform: remove cached addresses and routes for deleted devices 2013-06-21 04:02:32 +02:00
Pavel Šimerda
35dd05cc43 platform: share main function among tests 2013-06-21 04:02:32 +02:00