Commit graph

1472 commits

Author SHA1 Message Date
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
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
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
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
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
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
Thomas Haller
8c86648313 device: drop available_connections_notify() and call _notify() directly 2016-04-14 12:17:35 +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
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
47c6b6db07 device: remove ignored dummy variable 2016-04-04 15:47:21 +02:00
Beniamino Galvani
35059ed48e device: allow NM-owned device to be assumed
Software devices created by NM should be kept up when quitting so that
they can be assumed upon restart. But now we consider devices created
by NM (those with the @is_nm_owned flag) not capable of assuming
connections and therefore we tear them down and deconfigure when
quitting.

Change this and ignore @is_nm_owned when deciding if a device can be
re-assumed.
2016-04-04 15:33:17 +02:00
Thomas Haller
e1edcda317 device: consider external devices as unmanaged until they have an IP address 2016-04-04 15:33:16 +02:00
Lubomir Rintel
a6fb37bae2 Revert "manager: don't remove the device before policy learns of ip config change"
This doesn't unexport the connection on disconnect (as opposed to device
removal).

This reverts commit f72816bf10.
2016-04-04 12:52:56 +02:00
Lubomir Rintel
f72816bf10 manager: don't remove the device before policy learns of ip config change
First let the device know it's being removed soon so that it has a
chance to clean up the IP configuration early.

If the manager removes the device fist, the policy never learns of
config removal and doesn't unhook it from the DNS manager resulting in a
IPConfig leak and possible wrong DNS configuration in effect.

Also adjust the route manager to skip over devices without IP
configuration when determining the best connection; it is perhaps
just due to being removed.

https://bugzilla.gnome.org/show_bug.cgi?id=764483
2016-04-04 12:40:40 +02:00
Nikolay Martynov
28e9ec499a device: renew dhcp leases on awake for software devices
This makes sure that devices like bond get their dhcp renewed

[thaller@redhat.com: original patch modified to rename
 now-public function update_dynamic_ip_setup()]

https://bugzilla.gnome.org/show_bug.cgi?id=764398
2016-03-31 16:31:34 +02:00
Thomas Haller
3c8ffa766c device: refactor by adding set_unmanaged_external_down() function
No functional change.
2016-03-31 10:38:39 +02:00
Thomas Haller
f7523ae6e2 device: refactor setting unmanaged flag EXTERNAL_DOWN
This should not actually change how we handle EXTERNAL_DOWN
unmanaged devices.
2016-03-31 10:38:38 +02:00
Thomas Haller
2d472657bd device: add nm_device_get_unmanaged_mask() 2016-03-31 10:38:38 +02:00
Thomas Haller
c1f58e9bb6 device: trival refactoring in can_unmanaged_external_down()
Swap order of operands so that the "cheaper" is evaluated first.
2016-03-30 18:50:52 +02:00
Lubomir Rintel
2c2662f772 device: drop external changes on Reapply
https://bugzilla.gnome.org/show_bug.cgi?id=762322
2016-03-29 14:20:09 +02:00
Thomas Haller
d4c201272e core: be strict about connection argument for Reapply() D-Bus method
There is no excuse for clients to send connections to NetworkManager
that have invalid/unknown fields. Just reject them.

As Reapply() is new API in nm-1-1, there is no problem with backward
compatibility.
2016-03-26 12:10:54 +01:00
Lubomir Rintel
ce745e098a device: delay the activation if the backing device is not yet there 2016-03-26 11:29:41 +01:00
Lubomir Rintel
2a45d30cc5 device: only clear the activate request when the device disconnects
If it's traversing from unavailable to disconnected (e.g. realizing
of the device was delayed because it was awaiting the parent connection),
then we just want to progress the activation.
2016-03-26 11:29:41 +01:00
Lubomir Rintel
6219759490 device: _get_available_connections() with _get_best_connection()
We'll need to share the best conneciton logic and it's the only caller
of nm_device_get_available_connections(). Let's just move it all to
NMDevice and provide the best connection from there instead.
2016-03-26 11:29:41 +01:00
Thomas Haller
60cc501a66 device: optimize hashtable usage for shared_ips
No point ins storing "TRUE" as value in the @shared_ips hash
table. That forces glib to allocate a separate storage for the
value. Just use g_hash_table_add() instead.
2016-03-20 10:59:46 +01:00
Beniamino Galvani
ca5da5d80f device: fix handling of available connections
The prune list is for elements that must be deleted from the list of
available connections. So, when processing all the existing
connections an element must be deleted from the prune list iff it's
available.

Fixes: 8b2abe0e2c

https://bugzilla.redhat.com/show_bug.cgi?id=1316488
2016-03-15 17:38:58 +01:00
Thomas Haller
3ba9444728 rdisc: make NMRDisc namespace aware 2016-03-15 12:56:58 +01:00
Thomas Haller
18133ea142 systemd: merge branch systemd into th/systemd-lldp-bgo763384
As the lldp API changed, adjust "nm-lldp-listener.c".

Note that the commit is not yet functional due to missing
sd_event_source_set_enabled() and sd_event_source_set_time().
2016-03-11 09:28:10 +01:00
Beniamino Galvani
43ddfa398e device: trivial: group all forward declarations of static functions 2016-03-09 15:05:37 +01:00
Thomas Haller
fd9eeca3be device: fix leaking GSList element in _replace_vpn_config_in_list()
Fixes: 9bbf5e94c2
2016-03-08 10:26:31 +01:00
Beniamino Galvani
639f2d4b05 device: don't assert the presence of old vpn configurations
When a VPN connection is active and the parent device becomes
unmanaged (due to device removal or system entering sleep), all
configurations are removed from the interface and the device is taken
down. After that, the VPN is disconnected and tries to remove the old
VPN configuration from device, causing the following assertion to
fail:

  _replace_vpn_config_in_list: assertion '!old' failed

Remove the assertion as @old can be missing for valid reasons.
2016-03-07 18:22:12 +01:00
Beniamino Galvani
67473283ca device: improve logging messages
Add a "device" prefix to the messages.
2016-03-04 11:48:04 +01:00
Thomas Haller
2d6cf0df19 device: assert for valid device argument in nm_device_remove_pending_action()
Coverity complains in nm-active-connection.c:

   996        if (priv->pending_activation_id) {
      CID 59368 (#1 of 1): Dereference after null check (FORWARD_NULL)4. var_deref_model: Passing null pointer priv->device to nm_device_remove_pending_action, which dereferences it. [show details]
   997                nm_device_remove_pending_action (priv->device, priv->pending_activation_id, TRUE);
   998                g_clear_pointer (&priv->pending_activation_id, g_free);
   999        }
2016-03-04 08:47:44 +01:00
Thomas Haller
01b9b4104c all: clean-up usage of GError
Functions that take a GError** MUST fill it in on error. There is no
need to check whether error is NULL if the function it was passed to
had a failing return value.

Likewise, a proper GError must have a non-NULL message, so there's no
need to double-check that either.

Based-on-patch-by: Dan Winship <danw@gnome.org>
2016-03-03 18:54:20 +01:00