Commit graph

13996 commits

Author SHA1 Message Date
Thomas Haller
4acbb0fdc9
dhcp: add client_flags argument to nm_dhcp_manager_start_ip[46]() 2021-04-28 13:10:14 +02:00
Thomas Haller
b6b38af8aa
dhcp: simplifiy tracking of client flags in client_start() 2021-04-28 13:10:14 +02:00
Thomas Haller
a5cfa6e4f4
dhcp: refactor NMDhcpClient to use client flags
The DHCP client has potentially a large number of options,
including boolean options (flags). It is cumbersome to implement
them one by one. Instead, make more prominent use of NMDhcpClientFlags.
2021-04-28 13:10:13 +02:00
Thomas Haller
48a3cebce5
core: use _nm_utils_ascii_str_to_bool() to parse boolean udev properties
Previously, we used nm_udev_utils_property_as_boolean(), which was
taken from g_udev_device_get_property_as_boolean(). That function
accepts "1" and "true" (with ASCII case insensitive).

When we parse a flag, there is no need to reject "no", "yes" or
"on"/"off" as invalid (and thus return FALSE). We have a boolean
parse method _nm_utils_ascii_str_to_bool(), which parses everything
that nm_udev_utils_property_as_boolean() accepts, and more.

Be liberal in what we accept, so use our general parse function.
2021-04-28 13:10:13 +02:00
Thomas Haller
3762e8f0c5
platform: add nmp_object_link_udev_device_get_property_value() helper 2021-04-28 13:10:13 +02:00
Thomas Haller
47fa919720
platform: expose nm_platform_link_get_udev_property() function 2021-04-28 13:10:13 +02:00
Jonas Dreßler
77ef56714d
iwd: Don't add comments about PSK passphrase to config files
g_key_file_set_comment() has slightly weird API that will fail to set a
comment if it doesn't find the group. This is the case here since we
haven't set any strings under the [Security] group yet.

Fixing this is kind of ugly, so for now just don't add that comment in
the case where we don't have the [Security] group.
2021-04-27 19:52:48 +02:00
Jonas Dreßler
971dcc0777
iwd: Actually update iwd config in mirror_connection() if needed
There are cases where the settings didn't actually change and we just
want to ensure NM and iwd settings are in sync (one such case would be
when a setting was changed while iwd wasn't running, here we want to
synchronize all settings when starting up iwd).

We're already doing this and calling sett_conn_changed() from
mirror_connection() on all connections after adding an interface, the
actual settings synchronization code doesn't get executed though because
we're passing 0 as update_reason, which means we bail out early from
sett_conn_changed().

To make sure we actually update the iwd network configurations in that
case, too, pass UPDATE_REASON_UPDATE_NON_SECRET as the update reason to
sett_conn_changed(), which is the correct update reason in this case.
2021-04-27 19:52:48 +02:00
Jonas Dreßler
c8608d7cc3
iwd: Correctly compare autoconnected states
Quite obviously, we want to update the AutoConnect setting of the iwd
network in case the NM and iwd settings differ, not if they are the
same. So check for unequality here instead of equality, which fixes the
AutoConnect setting's synchronization.

Fixes: 4229c97012 ('iwd: Mirror NM connections to IWD network config files'):
2021-04-27 19:52:43 +02:00
Thomas Haller
43a0c6c111
core: fix assertion failure in device's activate_stage2_device_config()
Fixes: d946aa0c50 ('wired-setting: add support to accept-all-mac-addresses')
2021-04-26 21:17:18 +02:00
Andrew Zaborowski
16457cb303
settings: Drop NMSettingsConnection's system secrets cache
Apparently moving secrets between priv->connection and
priv->system_secrets in the various places throughout
NMSettingsConnection is no longer needed and has no effect on the
state of the D-Bus object or the gobject visible from outside.  It
seems that it was needed for the secrets handling in NMDevice
subclasses before the introduction of the applied connection concept
but now nm_connection_need_secrets() is called in those subclasses
directly on the applied connection object and the secrets obtained
from multiple nm_settings_connection_get_secrets calls are also
collected directly in the applied connection's settings.

Drop the system secrets cache mechanism as a cause of a minor memory
overhead, some code overhead and also a source of some unneeded gobject
signals as the connection settings were being updated.

Note: the NM_SETTINGS_CONNECTION_UPDATE_REASON_CLEAR_SYSTEM_SECRETS and
NM_SETTINGS_CONNECTION_UPDATE_REASON_RESET_SYSTEM_SECRETS flags in the
SettingsConnection update signals appear to only have been used by the
SettingsConnection internally to keep priv->system_secrets up to date.
They can have potential other uses in the handlers of those signals so I
kept them.  Unlike some of the other NMSettingsConnectionUpdateReason
values these are actual update *reasons* and not flags telling the
settings backends how to handle a specific change in the settings.
2021-04-23 15:00:51 +02:00
Andrew Zaborowski
d1566d7b4b
settings: Drop nm_settings_connection_clear_secrets
All usages of nm_settings_connection_clear_secrets() outside of the
NMSettingsConnection implementation were setting the
clear_cached_system_secrets parameter to FALSE which meant that the
operation was a no-op since the system-secrets cache kept a copy of the
secrets being cleared and any access to the SettingsConnection through
the D-Bus API or the class methods would behave the same as without the
call, with the exception of directly reading the settings from the
result of nm_settings_connection_get_connection().  The calls would
still generate D-Bus and gobject signals however, which were redundant.

Drop the method and its calls from the rest of NM code as not needed and
potentially confusing.  The comments preceding these calls implied that
they were needed so that the next activation attempt would be forced to
use nm_settings_connection_get_secrets() but this was the case probably
only before the applied connection concept was introduced.

Also drop two nm_active_connection_clear_secrets() uses in
NMVpnConnection, right before the teardown of the active connection,
that could only possibly have any effect if they affected the
NMSettingsConnection, but as mentioned earlier the
nm_settings_connection_clear_secrets() use inside
nm_active_connection_clear_secrets() didn't do anything and is now
removed.

The one internal use of nm_active_connection_clear_secrets() in the
D-Bus ClearSecrets() implementation is inlined.
2021-04-23 15:00:51 +02:00
Fernando Fernandez Mancera
d946aa0c50 wired-setting: add support to accept-all-mac-addresses
This patch is introducing the wired setting accept-all-mac-addresses
property. The value corresponds to the kernel flag IFF_PROMISC.

When accept-all-mac-address is enabled, the interface will accept all
the packets without checking the destination mac address.

Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
2021-04-22 18:57:30 +00:00
Fernando Fernandez Mancera
1dfe536386 platform: introduce nm_platform_link_change_flags()
Having two functions like link_set_x() and link_set_nox() it is not a
good idea. This patch is introducing nm_platform_link_change_flags().

This allow flag modification directly, so the developer does not need to
define the virtual functions all the time everywhere.

Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
2021-04-22 18:57:30 +00:00
Fernando Fernandez Mancera
27e37a4b17 interface-flags: expose NM_DEVICE_INTERFACE_FLAG_PROMISC
This patch is introducing NM_DEVICE_INTERFACE_FLAG_PROMISC in
interface_flags. The flag represents IFF_PROMISC kernel flag.

Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
2021-04-22 18:57:30 +00:00
Aaron Barany
8acad5a20c vpn: allow IP prefix of 0 for routing rules
Allow IP prefixes of 0 for routing rules, which are used for specifying a
route for all traffic. (e.g. route all traffic by default with separate
rules to exclude specific IP ranges)

#711
2021-04-22 11:56:57 +00:00
Beniamino Galvani
d19773ecd4 manager: ensure auto default connection is deleted when a veth goes away
When the link goes away the manager keeps software devices alive as
unrealized because there is still a connection for them.

If the device is software and has a NM-generated connection, keeping
the device alive means that also the generated connection stays
alive. The result is that both stick around forever even if there is
no longer a kernel link.

Add a check to avoid this situation.

https://bugzilla.redhat.com/show_bug.cgi?id=1945282

Fixes: cd0cf9229d ('veth: add support to configure veth interfaces')
2021-04-21 14:57:07 +02:00
Beniamino Galvani
a42682d44f device: take reference to device object before 'delete_on_deactivate'
It's not clear why currently a weak reference is needed.
2021-04-21 14:57:07 +02:00
Thomas Haller
9eac9c846c
platform: fix using static buffer for logging in link_change_flags()
No need to make code intentionally not thread-safe.
2021-04-21 08:10:36 +02:00
Thomas Haller
4cbf30c5ec
platform/tests: fix wrong nm_platform_lnk_bridge_cmp() in test_software_detect()
We need to handle the case that kernel mangles the configured values. We
already do, but there was a left over nm_platform_lnk_bridge_cmp() that
is still wrong.

Related: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/665

Fixes: ce9211500e ('platform/tests: work around rounding errors for bridge values in unit tests')
2021-04-21 07:45:49 +02:00
Thomas Haller
c2629f72b0
cloud-setup/azure: fix detecting the gateway address
The code never set "iface_get_config->cidr_addr", despite
setting "cidr_prefix" and "has_cidr". As a result, cloud-setup
would think that the subnet is "0.0.0.0/$PLEN", and calculate
the gateway as "0.0.0.1".

As a result it would add a default route to table 30400 via 0.0.0.1,
which is obviously wrong.

How to detect the right gateway? Let's try obtain the subnet also via
the meta data. That seems mostly correct, except that we only access
subnet at index 0. What if there are multiple ones? I don't know.

https://bugzilla.redhat.com/show_bug.cgi?id=1912236
2021-04-20 17:46:05 +02:00
Thomas Haller
889498c12c
cloud-setup/azure: refactor callback for _get_config_ips_prefix_list_cb() 2021-04-20 17:46:05 +02:00
Thomas Haller
c9fc3f5b03
cloud-setup/azure: cleanup constructing URI in _get_config_ips_prefix_list_cb() 2021-04-20 17:46:05 +02:00
Thomas Haller
89f3267859
cloud-setup/trivial: rename variables in Azure's _get_config_fetch_done_cb()
The previous name seem not very expressive/fitting. Naming is hard, but
I think these are better names.
2021-04-20 17:46:05 +02:00
Thomas Haller
a2fded3cee
cloud-setup: use _nm_utils_ascii_str_to_int64_bin() in Azure's _get_config_fetch_done_cb() 2021-04-20 17:46:04 +02:00
Thomas Haller
d3f07d5ca2
cloud-setup: remove redundant check in Azure's _get_net_ifaces_list_cb()
This condition always true, because there is a check above.
2021-04-20 17:46:04 +02:00
Thomas Haller
70b7ad1a76
glib-aux: add _nm_utils_ascii_str_to_int64_bin() helper 2021-04-20 17:46:04 +02:00
Thomas Haller
5a6dbcefa3
core/trival: style cleanup 2021-04-20 17:25:21 +02:00
Thomas Haller
f7dec0ab1d
core: implement nm_dhcp_client_get_addr_family()
This was already forward declared in the header, but not defined.

Implement it. Will be used later.
2021-04-20 17:25:21 +02:00
Thomas Haller
5e77c67e0f
core: cleanup #include of "nm-dnsmasq-utils.c" 2021-04-20 17:25:21 +02:00
Thomas Haller
d1457410fd
core: return boolean result from nm_dbus_object_clear_and_unexport()
To indicate, whether something was cleared. This will be used later.
2021-04-20 17:25:21 +02:00
Thomas Haller
80f6f4e115
core: use NM_CAST_PPTR() for nm_dbus_object_clear_and_unexport()
This ensures that the argument is some pointer to pointer. This gives a
bit of additional compile time safety, but in general, it still casts
any pointer to pointer (because that's what we require, as most arguments
won't be of type NMDBusObject to begin with).
2021-04-20 17:25:21 +02:00
Thomas Haller
4efc6f030a
glib-aux: add NM_CAST_PPTR() macro 2021-04-20 17:25:20 +02:00
Andrew Zaborowski
26de0e02d9
iwd: Fix permissions and timestamps when writing IWD config files
NM should have been creating the IWD network config files with 0600
permission bits from the beginning since they can contain secrets.
g_key_file_save_to_file() uses 0666 which shouldn't be used even for the
temporary file before setting the final permissions.

Also try to preserve the last modification timestamp of the original
file because it is currently used by IWD when ranking networks for
autoconnect and updating it everytime NM rewrites the file could
potentially affect autoconnect priorities.
2021-04-19 18:11:12 +02:00
Andrew Zaborowski
38ac64ba62
glib-aux: Set file timestamps in nm_utils_file_set_contents
Extend nm_utils_file_set_contents to be able to optionally set the last
access + last modification times on the file being created, in addition
to the mode.
2021-04-19 18:11:11 +02:00
Andrew Zaborowski
caa1b5c60d
iwd: Clean up old vs. new secret logic
There was an attempt in the code to allow using existing system-owned
secrets based on whether the connection had ever succeeded before but
this wasn't implemented properly.  Now decide whether existing secrets
are allowed and whether to pass the REQUEST_NEW flag to the secrets
request based on the last connection timestamp and on the network
security type (PSK vs. 802.1X) to align the policy with the policy
inside IWD.

Drop a useless nm_connection_clear_secrets call on the applied
connection just before failing the connection attempt and thus
destroying the applied connection.
2021-04-19 18:11:11 +02:00
Andrew Zaborowski
260ceff28a
iwd: Add warning comment to autogenerated IWD files 2021-04-19 18:11:11 +02:00
Andrew Zaborowski
60dcb83b58
iwd: Only save system-owned secrets to IWD config
Avoid saving agent-owned secrets when converting settings connections
to IWD config files and avoid reacting to NMSettingsConnection updates
that don't seem to touch any non-secret or system-owned-secret settings.
2021-04-19 18:11:10 +02:00
Andrew Zaborowski
ee583adecf
settings: add NM_SETTINGS_CONNECTION_UPDATE_REASON_UPDATE_NON_SECRET flag
Along with NM_SETTINGS_CONNECTION_UPDATE_REASON_RESET_SYSTEM_SECRETS
and NM_SETTINGS_CONNECTION_UPDATE_REASON_RESET_AGENT_SECRETS, which can
be used in the NMSettingConnection's "updated" handlers to track secrets
updates, add NM_SETTINGS_CONNECTION_UPDATE_REASON_UPDATE_NON_SECRET so
that the handlers can tell when something other than secrets has been
updated in the connection.

It can also potentially be used in _connection_changed_update in
src/core/settings/nm-settings.c to stop emitting the
NetworkManager.Settings.Connection.Updated() dbus signal if only secrets
are being updated (on agent queries etc.) if it is deemed to be correct.
2021-04-19 18:11:10 +02:00
Andrew Zaborowski
195c853a80
libnm-core: Drop repeating words in NM_CONNECTION_CHANGED comment 2021-04-19 18:11:10 +02:00
Thomas Haller
34e4a3ef17
libnm/doc: clarify GMainContext handling in NMClient documentation
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/819
2021-04-19 09:31:48 +02:00
Thomas Haller
a55c10c6cb
nmcli/trivial: add comment about stability of connection-add success message 2021-04-17 08:36:55 +02:00
Beniamino Galvani
4a81fe13ae platform: ethtool: support new GLINKSETTINGS kernel API
Use the new GLINKSETTINGS/SLINKSETTINGS ethtool API [1] when
available. Using the old API, we can only enable the first 31 modes in
the advertising bitmask, and so interfaces can't negotiate higher
modes.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3f1ac7a700d039c61d8d8b99f28d605d489a60cf

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/686
2021-04-16 18:47:17 +02:00
Thomas Haller
a5f3644f70
device/lldp: use GSource for tracking ratelimit in NMLldpListener
The reason is my dislike of these guint source ids. What is their
advantage anyway? Just use the GSource pointers.
2021-04-16 15:18:27 +02:00
Thomas Haller
655dd13902
device/lldp: simplify NMLldpListener API
NMLldpListener API was a (refcounted) GObject with start/stop methods.
That means, a listener instance itself had state, namely whether it was
running and which ifindex was used. And this was not only internal
state, but the user had to care about this.

That is all entirely unnecessary. Beside requiring more code and having
more overhead (of a GObject), it is also harder to use. NMDevice not
only need to care whether priv->listener is set, it also needs to care
whether it is running.

Simplify this. The NMLldpListener is no longer ref-counted. As such, the
notify callback is set in the constructor, and the user will stop
receiving notifications by destroying the instance. Furthermore, the instance
can only use one ifindex, that is determined at construct time too.

The state that NMLldpListener now represents is simpler. This simplifies
the usage from NMDevice, which now only call lldp_setup() to enable and
disable the listener.

There is also no need to restart the LLDP listener. The only exception
is, if the ifindex changes. In that case, we throw away the old instance
and create a new one. Otherwise, the LLDP listener is itself responsible
to keep running. There is no excuse for it to fail, and if it does, it needs
to autorecover as good as it can.
2021-04-16 15:18:27 +02:00
Thomas Haller
b0d45c88c3
device: don't restart LLDP listener in nm_device_update_dynamic_ip_setup()
It's not clear why we would need to restart the instance. It
is supposed to work, and recover automatically.

The only thing that restarting should be necessary, is to change the
ifindex. But this is not the right place for handling changes of ifindex.
2021-04-16 15:18:26 +02:00
Thomas Haller
80e30f4562
all: use nm_g_variant_new_au() helper 2021-04-16 11:44:20 +02:00
Thomas Haller
f34841e196
all: use nm_g_variant_new_ay() helper 2021-04-16 11:44:19 +02:00
Thomas Haller
4d6f659e13
all: use nm_g_variant_singleton_a*() helpers 2021-04-16 11:44:19 +02:00
Thomas Haller
bbc8d3d7ad
glib-aux: add nm_g_variant_new_au() helper 2021-04-16 11:44:18 +02:00