Commit graph

1316 commits

Author SHA1 Message Date
Thomas Haller
bac06c5ae6 device: ensure not rescheduling IP config changed on initial capture
update_ip4_config() and update_ip6_config() are called from nm_device_capture_initial_config().
At that point, we don't expect any activation-source scheduled, thus the "if" should not
not be hit anyway.

So, this patch should actually make no difference, but it seems clearer
to me. Also, because it would be a bug to re-schedule the idle handler
that is already pending, but from inspecting nm_device_capture_initial_config()
it is not immediately clear that this cannot be the case.
2016-05-05 11:24:54 +02:00
Thomas Haller
ec2a21702a device: add assertions for queued_ip4_config_change() and queued_ip6_config_change() 2016-05-05 11:10:33 +02:00
Thomas Haller
b6a92cbdc3 device: refactor clearing @queued_ip4_config_id and @queued_ip6_config_id 2016-05-05 10:58:10 +02:00
Thomas Haller
c71bd9df82 device: improve error message for failure to reapply 2016-05-03 11:52:40 +02:00
Thomas Haller
a51b947f25 device: fix check for invalid keys during reapply
Was completely wrong and failed to find first_invalid_key.
As a consequence, hit the assertion at the end.
2016-05-03 11:52:40 +02:00
Thomas Haller
b52d25e129 device: clear secrets from applied connection during reapply
The applied connection must have no secrets. It's unclear whether
there are any secrets at this point (possibly). To be sure, clear them.
2016-05-03 11:52:40 +02:00
Thomas Haller
ec840b0331 device: allow reapply with a different connection.uuid 2016-05-03 11:52:40 +02:00
Thomas Haller
ad38a1acb8 device: allow reapply if connection.id differs 2016-05-03 11:52:39 +02:00
Beniamino Galvani
f377e055bf device: add dhcp_schedule_restart() helper 2016-05-02 18:21:19 +02:00
Beniamino Galvani
cf4e2c7ab9 device: retry DHCPv6 when a lease expires
Make DHCPv6 more robust WRT temporary failures of servers by retrying
DHCP for a predefined number of times at regular intervals when the
lease expires.

https://bugzilla.gnome.org/show_bug.cgi?id=741347
2016-05-02 18:21:18 +02:00
Beniamino Galvani
ac52b95684 device: retry DHCPv4 when a lease expires
Make DHCPv4 more robust WRT temporary failures of servers by retrying
DHCP for a predefined number of times at regular intervals when the
lease expires.

https://bugzilla.gnome.org/show_bug.cgi?id=741347
2016-05-02 18:21:18 +02:00
Beniamino Galvani
363d5b33ec device: group DHCP6 private members 2016-05-02 18:21:18 +02:00
Beniamino Galvani
3f5ee827a9 device: group DHCP4 private members 2016-05-02 18:21:18 +02:00
Beniamino Galvani
b84768581e device: fail activation immediately only when may-fail=no
Introduce the nm_device_ip_method_failed() function to check if the
failure of an IP method should cause the activation to fail, and use
it where appropriate.

http://bugzilla.gnome.org/show_bug.cgi?id=741347
2016-05-02 18:21:18 +02:00
Beniamino Galvani
a47c13a7a2 device: postpone updates of IP configuration when a commit is pending
When a new dynamic configuration is received, it is stored in a member
of private structure (e.g. @dhcp6_ip6_config) and a commit is
scheduled. Before the commit is executed, an update_ipx_config() could
be called and it would change the configuration before it is
committed.

This race condition causes failures in assigning the addresses
received through DHCPv6 when the internal client is used (but
potentially other clients and methods are affected).

To fix it, postpone updates of IP configurations when a commit is
already pending.
2016-04-29 17:16:25 +02:00
Thomas Haller
cd39cbfc1f device: don't unload device plugins on failure 2016-04-29 15:41:41 +02:00
Thomas Haller
497a21fb3d wwan/trivial: fix whitespace and indention 2016-04-28 17:39:20 +02:00
Thomas Haller
6bf022359f core/trivial: rename "source" field of addresses and routes
The "source" field of NMPlatformIPRoute (now "rt_source") maps to the
protocol field of the route. The source of NMPlatformIPAddress (now
"addr_source") has no direct equivalent in the kernel.

As their use is different, they should have different names. Also,
the name "source" is used all over the place. Hence give the fields
a more distinct name.
2016-04-28 12:53:21 +02:00
Beniamino Galvani
0589e659ca device/ethernet: ignore s390 'portname' attribute when not set
The 'portname' sysfs attribute of s390 devices is deprecated since
kernel 4.4 and always set to 'no portname required'. But even on older
kernels such value must be interpreted as an unset portname and thus
ignored.

https://bugzilla.redhat.com/show_bug.cgi?id=1327204
2016-04-28 09:25:41 +02:00
Thomas Haller
161f86b5b3 dns: merge the dns "mode" and "rc-manager"
Already previously, the mode and rc-manager were intertwined in a complicated
way:

  - dns=none effectively disables rc-manager.

  - if resolv.conf was immutable, it would disable the rc-manager
    by setting "resolv_conf_mode=NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED".

  - resolv_conf_mode was anyway a redundant piece of information to
    rc_manager.

Now there are only two relevant settings: priv->plugin and
priv->rc_manager. And they can be set independently from each other.
Before that was not possible. For example, you could not set a
dns plugin with rc-manager=unmanaged (the only way to achive that
was via an immutable resolv.conf or by having rc-manager=symlink
and let resolv.conf link somewhere else.
2016-04-26 13:58:28 +02:00
Thomas Haller
89cf9429a7 device: generate stable UUID for default-wired-connection
Generate a stable connection UUID for the default-wired-connection.
Otherwise, on every reboot, the UUID changes although the generated
connection is the same.

But also hash into the UUID the machine-id, the device name and the
hardware address. So, the UUID is only the same if the connection is
identical in every aspect.

Also, the UUID is used as Network_ID for the stable-privacy address
generation mode. It is bad to re-create different UUIDs on every boot
as it causes different addresses.
2016-04-26 12:50:16 +02:00
Lubomir Rintel
a57227914e bluetooth: add a missing GError initializer
(cherry picked from commit 3ad7be3e6a)
2016-04-25 16:10:28 +02:00
Thomas Haller
ee3ac13e50 lldp: fix crash in nm_device_update_dynamic_ip_setup() due to uninitialized @error
Fixes: 07a9364d9c
2016-04-25 12:07:21 +02:00
Thomas Haller
2158d6a5a8 manager: fix wrongly removing DNS configuration on shutdown
When NetworkManager exits, it must preserve the DNS configuration of
devices that are left up.

Fixes: 9498ea507e
2016-04-20 17:53:58 +02:00
Lubomir Rintel
22c11f8ef1 modem: cancel secrets only if there's an outstanding request
Fixes an assertion failure on WWAN connection attempts that fail before
secrets are requested.
2016-04-20 13:57:57 +02:00
Lubomir Rintel
a93807c288 infiniband: remove the partitions on unrealizing
The infiniband drivers don't implement the rtnetlink link deletions.
Therefore we unrealize the NMDevice instance but the backing resources
stay around, preventing us from ever realizing the device again.
2016-04-20 10:49:01 +02:00
Lubomir Rintel
03584e420f device: check for a parent device
The device creation can be attempted if the name can be determined. It
alone is doesn't mean that there's a parent device -- the name could
just have been hardcoded in the connection.

  NetworkManager[21519]: nm_device_get_ifindex: assertion 'NM_IS_DEVICE (self)' failed

  Program received signal SIGTRAP, Trace/breakpoint trap.
  g_logv (log_domain=0x5555557fb2e5 "NetworkManager", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=args@entry=0x7fffffffd3d0) at gmessages.c:1046
  1046              g_private_set (&g_log_depth, GUINT_TO_POINTER (depth));
  (gdb) bt
  #0  0x00007ffff4ec88c3 in g_logv (log_domain=0x5555557fb2e5 "NetworkManager", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=args@entry=0x7fffffffd3d0) at gmessages.c:1046
  #1  0x00007ffff4ec8a3f in g_log (log_domain=<optimized out>, log_level=<optimized out>, format=<optimized out>) at gmessages.c:1079
  #2  0x00005555555d2090 in nm_device_get_ifindex (self=0x0) at devices/nm-device.c:562
  #3  0x00005555555ef77a in nm_device_supports_vlans (self=0x0) at devices/nm-device.c:9865
  #4  0x00005555555bf2f9 in create_and_realize (device=0x555555c549b0 [NMDeviceVlan], connection=0x555555b451e0, parent=0x0, out_plink=0x7fffffffd5f8, error=0x7fffffffd700) at devices/nm-device-vlan.c:225
  #5  0x00005555555d5757 in nm_device_create_and_realize (self=0x555555c549b0 [NMDeviceVlan], connection=0x555555b451e0, parent=0x0, error=0x7fffffffd700) at devices/nm-device.c:1783
  #6  0x0000555555688601 in system_create_virtual_device (self=0x555555af51c0 [NMManager], connection=0x555555b451e0) at nm-manager.c:1120
  #7  0x000055555568894e in connection_changed (settings=0x555555ae8220 [NMSettings], connection=0x555555b451e0, manager=0x555555af51c0 [NMManager]) at nm-manager.c:1172
  #8  0x0000555555693448 in nm_manager_start (self=0x555555af51c0 [NMManager], error=0x7fffffffda30) at nm-manager.c:4466
  #9  0x00005555555d166f in main (argc=1, argv=0x7fffffffdba8) at main.c:454
  (gdb)

Fixes: 332994f1b1
2016-04-19 13:32:28 +02:00
Lubomir Rintel
7eca706751 infiniband: check that the connection to be created is a partition first
No functional change. It will make it a bit easier to produce a good
error message in subsequent commit.
2016-04-19 13:32:28 +02:00
Lubomir Rintel
dda8e24a21 infiniband: consistently use the error code
Only report CREATION_FAILED when we did actually attempt creation.
2016-04-19 13:32:28 +02:00
Lubomir Rintel
f9a0aface3 macvlan: fix error handling 2016-04-19 13:32:28 +02:00
Beniamino Galvani
28274495d6 device/team: always try to connect to teamd in update_connection()
update_connection() may be called during startup when the bus watch
hasn't notified yet the presence (or absence) of the teamd service on
the bus. Try to obtain a connection to the service in order to
retrieve the current configuration.
2016-04-18 21:50:36 +02:00
Lubomir Rintel
332994f1b1 device-factory: always prefer manually set interface name to a generated one
If the connection specifies an interface name, it should never attach to
a device of a different name even if the factory thinks the connection
is compatible with the device.

This fixes an issue that caused the inifniband connections to attach to
different devices or partitions.
2016-04-18 19:00:54 +02:00
Thomas Haller
4697376f99 device: fix preserving the default-route during _cleanup_generic_post()
When we want to preserve the default-route on cleanup, we must first
set it to assumed, before clearing it. Otherwise, NMDefaultRouteManager's
update() will delete the default route.

This is the oposite of the deconfigure case, where we first set it to
!has && !assumed, to force the route-manager to delete the route.
2016-04-15 18:09:48 +02:00
Thomas Haller
b2f794fe1e device: refactor clearing default-route in NMDevice
Add a function _update_default_route() to set the default_route
flags and call update() in one step.

Also, if there are no changes, skip the call to NMDefaultRouteManager's
update().
2016-04-15 18:07:01 +02:00
Thomas Haller
2079f8361c device: fix wrongly deleting default-route on exit
We must preserve the default-route on shutdown.

Thus it must first be announced as "assumed", and only removed
in a second step.

Fixes: 9498ea507e
2016-04-15 17:39:09 +02:00
Beniamino Galvani
53dfaddda2 device: apply MTU setting also to devices without IPv4 configuration
Usually the MTU in the ethernet.mtu property is applied to the device
during the commit of IPv4 configuration.  For devices with
ipv4.method=disabled or slave devices that phase is skipped and so the
setting does not have effect.  Apply the MTU explicitly in such cases.

https://bugzilla.redhat.com/show_bug.cgi?id=1303968
https://bugzilla.redhat.com/show_bug.cgi?id=1303731
2016-04-14 15:19:11 +02:00
Beniamino Galvani
a032ce72ea device/vlan: update hw address also during prepare phase
The hardware address of a VLAN must be kept aligned with the one of
its parent device, and we already used a signal in NMDeviceVlan to
catch changes in parent address and update the VLAN device
accordingly.

But this didn't work in all cases because the change might happen
after the VLAN gets created but before we register the signal, so it
is necessary to add further checks to enforce the alignment during the
device activation.

https://bugzilla.redhat.com/show_bug.cgi?id=1325752
2016-04-14 14:01:17 +02:00
Thomas Haller
640ef67cd7 device/bluez: delay check_emit_usable() for NM_CP_SIGNAL_CONNECTION_UPDATED
Currently, NM_CP_SIGNAL_CONNECTION_UPDATED signal will be invoked on an
idle handler. I want to change that, so to be save, delay actions that
matter on an idle handler.
2016-04-14 12:17:36 +02:00
Thomas Haller
3325cd3d90 device/bluez: refactor registering to connections
No (intentional) change in behavior.
2016-04-14 12:17:36 +02:00
Thomas Haller
8c86648313 device: drop available_connections_notify() and call _notify() directly 2016-04-14 12:17:35 +02:00
Thomas Haller
c4151ebb5b platform/tests: add @platform argument to nmtstp functions
This allows tests to use these functions on a different platform instance
then on the singleton. The change makes the argument list longer, which is
unfortunate. On the other hand, it makes those functions more useful
in general.

You can't have it all.

Also, they now follow the pattern of most functions in NM where the type
is a singleton: you always pass the singleton to the function, although
in the usual case there is only one singleton instance. This allows to
use the function also on the non-singleton instance.
2016-04-11 11:26:37 +02:00
Thomas Haller
25d826ec49 platform/tests/trivial: rename init_tests() and setup_tests() function
Make it clear that they are nmtstp functions, i.e. they are found
in the header "test-common.h".
2016-04-11 11:26:37 +02:00
Thomas Haller
44768f0311 platform: change @plen field of NMPlatformIPxAddress to type guint8
On netlink layer, this field is uint8_t/uchar.

A larger (signed) plen makes no sense. Adjust the signatures
to have only guint8.
2016-04-11 11:26:36 +02:00
Thomas Haller
14ee5dd2f8 platform: change @plen field of NMPlatformIPxRoute to type guint8
On netlink layer, this field is uint8_t/uchar.

A larger (signed) plen makes no sense. Adjust the signatures
to have only guint8.
2016-04-11 11:26:36 +02:00
Beniamino Galvani
9b7f9af077 device: take care of default route of DHCP generated-assumed connections
In general we don't touch the externally set default route on devices
that use a generated-assumed connection. When the IP method is AUTO
(or DHCP), this means that we are not able to restore the default
route after a temporary expiration of the lease which removes
addresses/routes from the device.

Change this, and let NM update the default route for generated-assumed
devices using dynamic addressing.

https://bugzilla.redhat.com/show_bug.cgi?id=1265239
2016-04-08 21:28:57 +02:00
Beniamino Galvani
c84fd50287 device: don't update applied connection for generated assumed devices
The applied connection must describe the configuration that was
initially activated on the device. Even if the IP configuration
changes, we shouldn't reset the applied connection for devices using a
generated-assumed connection, otherwise we would lose information on
the IP method we're trying on the device.
2016-04-08 21:28:57 +02:00
Thomas Haller
2e34d34cf0 device: let managed by user-udev overwrite external-down
An externally configured software device is considered external-down until
it is IF_UP and has IP configuration.

When the user explicitly manages the device via UDEV rule, that decision
should overrule external-down.
2016-04-08 11:37:38 +02:00
Thomas Haller
9152dec99f build: disable deprecation checks for internal compilation
For internal compilation we want to be able to use deprecated
API without warnings.

Define the version min/max macros to effectively disable deprecation
warnings.

However, don't do it via CFLAGS option in the makefiles, instead hack it
to "nm-default.h". After all, *every* source file that is for internal
compilation needs to include this header as first.
2016-04-05 22:22:58 +02:00
Lubomir Rintel
9498ea507e manager: ensure IP config of device is cleared before removal
If the manager removes the device, the IP config objects must
be cleared. The reason is that NMPolicy registers to the IP config
changed signal and passes these object on to NMDnsManager.

If the INTERNAL_DEVICE_REMOVED signal is emited with IP configuration
object pending, those objects will be leaked.

This partly redoes commit f72816bf10,
which was reverted.

Co-Authored-By: Thomas Haller <thaller@redhat.com>

https://bugzilla.gnome.org/show_bug.cgi?id=764483
2016-04-04 23:10:20 +02:00
Thomas Haller
c5d827057e device: ensure @error always set by nm_device_factory_create_device()
https://bugzilla.gnome.org/show_bug.cgi?id=764606
2016-04-04 21:27:05 +02:00