Commit Graph

23568 Commits

Author SHA1 Message Date
Thomas Haller
adb51c2a7f device: fix reapplying changes to connection ID and UUID
4 properties are not really relevant for an already activated connection
or it makes not sense to change them. These are connection.id, connection.uuid,
connection.autoconnect and connection.stable-id.

For convenience, we allow to reapply these. This way, one can take
a different setting (e.g. with a different connection.id or
connection.uuid) and reapply them, but such changes are silently
ignored.

However this was done wrongly. Instead of reverting the change to the new
applied connection, we would change the input connection.

This is bad, for example with

  nmcli connection up uuid cb922f18-e99a-49c6-b200-1678b5070a82
  nmcli connection modify cb922f18-e99a-49c6-b200-1678b5070a82 con-name "bogus"
  nmcli device reapply eth0

the last re-apply would reset the settings-connection's connection ID to
what was before, while accepting the new name on the applied-connection
(while it should have been rejected).

Fixes: bf3b3d444c ('device: avoid changing immutable properties during reapply')
2019-07-16 10:48:30 +02:00
Thomas Haller
1bee1f5530 rules: merge branch 'th/routing-rule-suppress-prefixlength'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/202
2019-07-16 10:19:32 +02:00
Thomas Haller
15b1304477 policy-routing: take ownership of externally configured rules
IP addresses, routes, TC and QDiscs are all tied to a certain interface.
So when NetworkManager manages an interface, it can be confident that
all related entires should be managed, deleted and modified by NetworkManager.

Routing policy rules are global. For that we have NMPRulesManager which
keeps track of whether NetworkManager owns a rule. This allows multiple
connection profiles to specify the same rule, and NMPRulesManager can
consolidate this information to know whether to add or remove the rule.

NMPRulesManager would also support to explicitly block a rule by
tracking it with negative priority. However that is still unused at
the moment. All that devices do is to add rules (track with positive
priority) and remove them (untrack) once the profile gets deactivated.

As rules are not exclusively owned by NetworkManager, NetworkManager
tries not to interfere with rules that it knows nothing about. That
means in particular, when NetworkManager starts it will "weakly track"
all rules that are present. "weakly track" is mostly interesting for two
cases:

  - when NMPRulesManager had the same rule explicitly tracked (added) by a
    device, then deactivating the device will leave the rule in place.

  - when NMPRulesManager had the same rule explicitly blocked (tracked
    with negative priority), then it would restore the rule when that
    block gets removed (as said, currently nobody actually does this).

Note that when restarting NetworkManager, then the device may stay and
the rules kept. However after restart, NetworkManager no longer knows
that it previously added this route, so it would weakly track it and
never remove them again.

That is a problem. Avoid that, by whenever explicitly tracking a rule we
also make sure to no longer weakly track it. Most likely this rule was
indeed previously managed by NetworkManager. If this was really a rule
added by externally, then the user really should choose distinct
rule priorities to avoid such conflicts altogether.
2019-07-16 10:16:07 +02:00
Thomas Haller
6ea56bc04c libnm,core: add support for "suppress_prefixlength" rule attribute
WireGuard's wq-quick configures such rules to avoid routing loops.
While we currently don't have an automatic solution for this, at least
we should support it via explicit user configuration.

One problem is that suppress_prefixlength is relatively new and kernel
might not support this attribute. That can lead to odd results, because
the NetworkManager is valid but it cannot be configured on the current
kernel. But this is a general problem, and we would require a general
solution. The solution cannot be to only support rule attributes that
are supported by the oldest possible kernel. It's not clear how much of
a problem there really is, or which general solution is required (if
any).
2019-07-16 10:03:17 +02:00
Thomas Haller
70b23c7979 libnm: accept special table names for policy-routing
The tables "main", "local", and "default" have well known names.
Accept them as aliases when parsing the string representation of
the rule.

Note that iproute2 also considers /etc/iproute2/rt_tables for table
names. In particular, that allows a user to re-map the well-known names
like "main" to a different table. We never honor that file, and "main"
always means table 254.

Note that this only affects how we parse the string representation for
rules. As the representation is neither unique nor enforced to be normalized,
being more graceful here is no problem.

The point is of course that the user possibly has existing iproute2
scripts that use such keyword. This makes it simpler to copy & paste
the rule.
2019-07-16 10:00:07 +02:00
Lubomir Rintel
07fdc1828d contrib/rpm: disable rp_filter in config-connectivity-redhat
RHEL ships with a rp_filter and can't change that for historic reasons.
That's unfortunate, because it breaks the connectivity checking. Let's
override it if the connectivity checking package is installed.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/185
2019-07-15 20:16:31 +02:00
Thomas Haller
9ae8a79457 dhcp-listener: keep reference to NMDBusManager singleton
When subscribing a signal to a singleton, we should ensure that the
source object stays alive. Take a reference.

This is also right in this case, because NMDBusManager (and its dependencies)
should never use NMDhcpListener. So, there is a clear direction of who references
who.
2019-07-15 12:45:38 +02:00
Lubomir Rintel
eb7c47b3fc ovs/interface: actually allow dpdk type interfaces
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/203
2019-07-15 11:30:20 +02:00
Lubomir Rintel
12d9c3eb18 ovs/ovsdb: correctly set the dpdk-devargs option
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/203
2019-07-15 11:30:12 +02:00
Rafael Fontenelle
da39bacd82 po: update Brazilian Portuguese (pt_BR) translation
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/204/
2019-07-15 09:55:09 +02:00
Thomas Haller
be76d8b624 gitlab-ci: workaround build failure in Debian:sid due to iproute2 issue
Our platform unit tests try to add an IP tunnel using iproute2.
That fails with

    "add tunnel "ip6tnl0" failed: File exists"

This is a bug in iproute2-5.2.0, see [1].

Workaround the issue by downgrading the package.

[1] https://www.spinics.net/lists/netdev/msg584916.html
2019-07-12 10:45:36 +02:00
Thomas Haller
13b4cad989 gitlab-ci: add manual build step to test on ubuntu:rolling and ubuntu:devel
Rolling is the latest release (regardless of whether LTS), currently
that would be 19.04.

Devel is the next release, currently that would be 19.10.

Add manual build steps to trigger those builds so we can manually verify
that they pass.
2019-07-12 10:25:12 +02:00
Thomas Haller
ec77d477a8 build: dist test file "test-tpm2wrapped-key.pem"
Fixes: 107ba8e00c ('libnm/crypto: accept TPM2-wrapped PEM keys')
2019-07-11 09:48:56 +02:00
Thomas Haller
5f05ef916a libnm/crypto: merge branch 'tpm2-key'
https://mail.gnome.org/archives/networkmanager-list/2019-July/msg00002.html
2019-07-10 18:14:15 +02:00
Daniel Kobras
107ba8e00c libnm/crypto: accept TPM2-wrapped PEM keys
Some tools that NM can interact with (eg. openconnect) have added
automated support to handle TPM2-wrapped PEM keys as drop-in
replacements for ordinary key files. Make sure that NM doesn't reject
these keys upfront. We cannot reliably assume NM to be able to unwrap
and validate the key. Therefore, accept any key as long as the PEM
header and trailer look ok.
2019-07-10 17:31:48 +02:00
Lubomir Rintel
68ad9aabf8 clients/metta-setting-desc: allow "system" and "dpdk" ovs interface types
These are valid, but were missing.
2019-07-10 15:04:29 +02:00
Thomas Haller
dcbf274e84 core,libnm: merge branch 'th/various-settings-cleanup-5'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/199
2019-07-10 14:59:37 +02:00
Thomas Haller
b1297b8b8a libnm,cli,ifcfg-rh: add connection:wait-device-timeout property
Initscripts already honor the DEVTIMEOUT variable (rh #1171917).

Don't make this a property only supported by initscripts. Every
useful property should also be supported by keyfile and it should
be accessible via D-Bus.

Also, I will soon drop NMSIfcfgConnection, so handling this would
require extra code. It's easier when DEVTIMEOUT is a regular property of
the connection profile.

The property is not yet implemented. ifcfg-rh still uses the old
implementation, and keyfile is not yet adjusted. Since both keyfile
and ifcfg-rh will both be rewritten soon, this property will be
implemented then.
2019-07-10 12:43:06 +02:00
Thomas Haller
dd5acc0370 core: use nm_c_list_elem_free_steal() in _delete_volatile_connection_all () 2019-07-10 12:43:06 +02:00
Thomas Haller
a9b15bde3c shared: add NM_CMP_DIRECT_STRCMP() macro 2019-07-10 12:43:06 +02:00
Thomas Haller
6d30021fee shared: optimize nm_utils_error_set() for string literals
If there is only one argument, we can assume this is a plain string.

That is especially the case, because g_set_error() is G_GNUC_PRINTF()
and would warn if this would be a format string with missing parameters.

This is for convenience. Previously, one was compelled to explicitly
choose between nm_utils_error_set_literal() and nm_utils_error_set().
Now, it automatically chooses.

Note that there are a few things that won't work, like

  nm_utils_error_set (error, code, "bogus %u escape");

But that's good. You get a compiler warning (as you used to)
and it's clear in this case you really need
nm_utils_error_set_literal().
2019-07-10 12:43:06 +02:00
Thomas Haller
7f75a1b5f5 shared: add nm_pdirect_hash()/nm_pdirect_equal()
This follows a pointer to a pointer and compares them. In a sense
it's like nm_pstr_*(), which follow a pointer to a string. However,
these functions use direct pointer comparison.

The purpose is when you hash a key that has as first field a pointer
value (and then compare them by pointer equality).
2019-07-10 12:43:06 +02:00
Thomas Haller
bf1cadbdc7 gitlab-ci: enable test build on Debian 10 (buster) 2019-07-10 12:29:48 +02:00
Luclu7
c11e3b6316 po: fix a typo in the French translation
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/200
2019-07-10 11:04:44 +02:00
Thomas Haller
a8fa015a4e core: fix mangling static IPv6 routes in nm_ip6_config_merge_setting()
https://bugzilla.redhat.com/show_bug.cgi?id=1727193

Fixes: 433d2f8659 ('core: merge IPv4 and IPv6 version of _nm_ip_config_merge_route_attributes()')
2019-07-09 14:33:57 +02:00
Francesco Giudici
7dd95221b7 man: update nm-openswitch example
Seems that a quite common openswitch basic configuration consist of a
one bridge, one port and one interface, all with the same interface
name. When performing such configuration in NetworkManager you need to
specify the slave-type for the ovs-interface, otherwise the master
interface specified there may match the bridge interface, resulting in
an error.
So, let's specify the slave-type for the ovs-interface, so that the
example will work also when the same interface name is specified for
both the ovs-bridge and the ovs-port.

https://bugzilla.redhat.com/show_bug.cgi?id=1638038
2019-07-09 12:05:32 +02:00
Thomas Haller
6a62314968 platform/tests: relax check for accepting platform signals
nmtst: initialize nmtst_get_rand() with NMTST_SEED_RAND=0
    /link/bogus: OK
    /link/loopback: OK
    /link/internal: OK
    /link/external: OK
    /link/software/bridge: OK
    /link/software/bond: OK
    /link/software/team: NMPlatformSignalAssert: ../src/platform/tests/test-link.c:331, test_slave(): failure to accept signal [0,2] times: 'link-changed-changed' ifindex 15 (3 times received)
    --- stderr ---
    /builds/NetworkManager/NetworkManager/tools/run-nm-test.sh: line 264: 106682 Trace/breakpoint trap      --quiet --error-exitcode= --leak-check=full --gen-suppressions=all  --num-callers=100 --log-file=
    The test failed. Also check the valgrind log at '/builds/NetworkManager/NetworkManager/build/src/platform/tests/test-link-linux.valgrind-log'
2019-07-09 10:59:57 +02:00
Thomas Haller
3d35ea645e libnm/crypto: use memmem() instead of naive O(n*m) search in find_tag() 2019-07-08 22:13:17 +02:00
Lubomir Rintel
c610667286 settings: fix a reversed conditional in have_connection_for_device()
https://bugzilla.redhat.com/show_bug.cgi?id=1727411

Fixes: be0018382d ('settings: in have_connection_for_device() first skip over irrelevant connection types')
2019-07-08 18:07:01 +02:00
Beniamino Galvani
deba9c4b86 build: add missing dependency for shared/systemd/src/shared
In file included from ./shared/systemd/sd-adapt-shared/nm-sd-adapt-shared.h:21,
                  from shared/systemd/src/shared/dns-domain.c:3:
 ./shared/nm-default.h:106:10: fatal error: config-extra.h: No such file or directory
  #include "config-extra.h"
          ^~~~~~~~~~~~~~~~
 compilation terminated.
 make[1]: *** [Makefile:12933: shared/systemd/src/shared/libnm_systemd_shared_la-dns-domain.lo] Error 1

Fixes: 7d3098ff90 ('systemd: add dns-domain utils to systemd static library')
2019-07-08 15:03:54 +02:00
Beniamino Galvani
fb4823c8ae core: merge branch 'bg/slaves-autoconnect-managed'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/197/commits
2019-07-08 13:52:15 +02:00
Beniamino Galvani
ba7b427aec manager: propagate the for-user-request flag for slaves autoconnection
If the master is activated by user, propagate the for-user-request to
slaves activations when autoconnecting slaves, so that they can manage
slaves device as needed.

Reproducer:

 ip l add eth1 type veth peer name eth2
 ip l set eth1 up
 ip l set eth2 up
 sleep 2

 echo " * Initial state"
 echo " - eth1: $(nmcli -g general.state device show eth1)"

 nmcli con add type ethernet ifname eth1 con-name slave-test+ master br-test slave-type bridge
 nmcli con add type bridge ifname br-test con-name br-test+ connection.autoconnect-slaves yes ip4 172.25.1.1/24

 nmcli con up br-test+

 echo " * After user activation"
 echo " - br-test: $(nmcli -g general.state device show br-test)"
 echo " - eth1: $(nmcli -g general.state device show eth1)"

should give:

 * Initial state
 - eth1: 10 (unmanaged)
 * After user activation
 - br-test: 100 (connected)
 - eth1: 100 (connected)
2019-07-08 13:51:30 +02:00
Beniamino Galvani
c7fd4aeecf device: properly honor flags when checking connection availability
The previous code returned that the device was available when it had
only unmanaged-flags that can be overridden by user, without actually
considering the @flags argument.

Fixes: 920346a5b9 ('device: add and use overrule-unmanaged flag for nm_device_check_connection_available()')
2019-07-08 13:51:30 +02:00
Francesco Giudici
7d8f20b00e dhcp: merge branch 'fg/dhcp_options2env-rh1663253'
https://bugzilla.redhat.com/show_bug.cgi?id=1663253

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/161
2019-07-05 17:54:52 +02:00
Francesco Giudici
b3a5541111 dispatcher: add MS Azure endpoint env var expected by cloud-init
Some linux distros (e.g., RHEL, CentOS and Fedora) ship a dispatcher
script with their dhclient package in order to run user dhclient hook
scripts also when connections are run by NetworkManager.
The scripts convert the var names in the environment to the ones
expected in the dhclient hook scripts.
This feature is currently use by cloud-init to retrieve the MS Azure
server endpoint address, which is sent in the private dhcp option 245.
We just redefined the default dhclient var names for the private options
from "unknown_xyz" to "private_xyz". In order to let current cloud-init
version to be able to retrieve the Azure server endpoint address, add
the legacy var name "unknown_245" to the dispatcher script environment.
2019-07-05 15:17:04 +02:00
Francesco Giudici
b2915e20d1 dispatcher/trivial: fix typo in comment 2019-07-05 15:17:04 +02:00
Francesco Giudici
f9314526d0 dhcp/dhclient: expose the private_xyz labels for dhcp private options
alias the default "unknown_xyz" labels when found.
2019-07-05 15:15:11 +02:00
Francesco Giudici
eed205bff3 dhcp/internal: move dhcp options management to shared dhcp codebase 2019-07-05 15:13:09 +02:00
Francesco Giudici
f42754c8d7 dhcp/internal: expose on D-Bus all the private dhcp options
when dhclient is used as the dhcp client in NetworkManager we expose on
D-Bus all the variables that are passed to our script file. In
particular, we use the variable names there as labels (stripping the
heading "new") taking whatever dhclient passes us.
There are few exception to this. Dhclient allows to redefine option
variable names and we use this functionality for a few dhcp options:
dhcp option code 121 --> "rfc3442_classless_static_routes"
dhcp option code 249 --> "ms_classless_static_routes"
dhcp option code 252 --> "wpad"

Note that for private dhcp options (224-254) default dhclient labels are
in the form "unknown_$OPTNUM".
2019-07-05 15:08:31 +02:00
Francesco Giudici
a6036b2352 dhcp: access internal systemd structure to retrieve dhcp private options 2019-07-05 14:12:21 +02:00
Francesco Giudici
5008a25f62 dhcp/internal: expose on D-Bus some more dhcp options
When using the internal dhcp client we skip exporting on D-Bus many of
the dhcp options received from the dhcp server. We instead export almost
all of them when using the dhclient dhcp client, using the variable
names passed by dhclient itself.
Map more DHCP options to dhclient variable names in order to allow the
internal client to retrieve them easily, namely: the server identifier,
the broadcast address, the renewal time, the rebinding time and the timezone.
Note that not all the DHCP options can be exported at this time because
systemd-networkd code drops many it won't process, so we have no way to
retrieve them without changing core systemd-networkd code.
2019-07-05 14:12:21 +02:00
Francesco Giudici
3775f31cb9 dhcp/internal: expose on D-Bus the lease time dhcp option
It was already exposed implicity as the expiration time: add also the
explicit option using same format of dhclient dhcp plugin.
In the meanwhile, drop the SD_DHCP_OPTION_CLIENT_IDENTIFIER as not used.
2019-07-05 14:12:21 +02:00
Francesco Giudici
97ce488f5f dhcp/internal: decrease logging level when retrieving dhcp options
Use DEBUG logging level for the parsing result of lease file.
Moreover, use consistent labels for the dhcp options: same labels of
what is exposed on D-Bus.
2019-07-05 14:12:21 +02:00
Beniamino Galvani
f3b831aba1 dhcp: merge branch 'bg/nettools'
Introduce the nettools DHCPv4 backend.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/171
2019-07-05 11:17:16 +02:00
Beniamino Galvani
106c156b0f n-dhcp4: client/probe: fix memory leak
The probe takes a reference to the current lease and so it must
release it upon destruction.

Signed-off-by: Beniamino Galvani <bgalvani@redhat.com>

https://github.com/nettools/n-dhcp4/pull/1
2019-07-05 11:09:28 +02:00
Beniamino Galvani
46f81e18f7 n-dhcp4: client/connection: fix memory leak
Free the request when the connection gets destroyed.

Signed-off-by: Beniamino Galvani <bgalvani@redhat.com>

https://github.com/nettools/n-dhcp4/pull/1
2019-07-05 11:09:03 +02:00
Beniamino Galvani
40babe1c44 dhcp: pass broadcast address to clients
Read the broadcast address from platform and pass it to
clients. Currently only the nettool backends uses it.
2019-07-05 11:06:01 +02:00
Beniamino Galvani
1609f50866 core: drop nm_platform_link_get_address_as_bytes()
Drop nm_platform_link_get_address_as_bytes() and introduce
nmp_link_address_get_as_bytes() so that it becomes possible to obtain
also the broadcast address without an additional lookup of the link.
2019-07-05 11:06:01 +02:00
Beniamino Galvani
36348c7dc5 dhcp: nettools: improve error messages
Add the reason to error messages to make debugging easier.

Note that n_dhcp4_client_new() also returns positive internal error
values, so we can't use nm_utils_error_set_errno().
2019-07-05 11:04:32 +02:00
Beniamino Galvani
7332c7343d dhcp: nettools: decrease initial delay
I think that artificially slowing down DHCP is not going to make users
happier, so let's decrease it to the minimum allowed value (1 ms).
Note that also dhclient and the internal client have it disabled. From
the dhclient.conf man page:

 *initial-delay* parameter sets the maximum time client can wait after
 start before commencing first transmission.  According to RFC2131
 Section 4.4.1, client should wait a random time between startup and
 the actual first trans‐ mission. Previous versions of ISC DHCP client
 used to wait random time up to 5 seconds, but that was unwanted due
 to impact on startup time. As such, new versions have the default
 initial delay set to 0. To restore old behavior, please set
 initial-delay to 5.
2019-07-05 11:04:32 +02:00