Commit Graph

33402 Commits

Author SHA1 Message Date
Beniamino Galvani
9ff7ff28fc dcb: fix test compilation
GCC 14 with LTO generates the following warning:

  src/core/tests/test-dcb.c: In function 'test_dcb_cleanup':
  src/core/tests/test-dcb.c:283:5: error: array subscript _3 is outside array bounds of 'const char *[0:]' [-Werror=array-bounds=]
    283 |     g_assert_cmpstr(expected.cmds[expected.num], ==, NULL);
        |     ^
  src/core/tests/test-dcb.c:14:17: note: while referencing 'cmds'
     14 |     const char *cmds[];
        |                 ^
  src/core/tests/test-dcb.c:261:24: note: defined here 'expected'
    261 |     static DcbExpected expected = {
        |                        ^

Define the commands as a fixed array instead of flexible array member.
2024-04-05 11:40:45 +02:00
Beniamino Galvani
d369f55192 libnm-core: avoid compiler warnings in team settings
GCC 14 with LTO complains with:

  In function 'nm_team_link_watcher_new_ethtool',
      inlined from 'nm_team_link_watcher_new_ethtool' at src/libnm-core-impl/nm-setting-team.c:106:1:
  src/libnm-core-impl/nm-setting-team.c:130:33: error: array subscript 'struct NMTeamLinkWatcher[0]' is partly outside array bounds of 'unsigned char[16]' [-Werror=array-bounds=]
    130 |     watcher->ref_count          = 1;
        |                                 ^
  src/libnm-core-impl/nm-setting-team.c:128:15: note: object of size 16 allocated by 'g_malloc'
    128 |     watcher = g_malloc(nm_offsetofend(NMTeamLinkWatcher, ethtool));
        |               ^

even if the warning is disabled via pragma directives in that
code. This looks like the following GCC bug:

  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80922

saying

  We do not track warning options (and thus optimize pragmas /
  attributes) across LTO because they are not saved in the function
  specific optimization flag section.

We use a (NMTeamLinkWatcher *) to point to a memory area that is
shorter than the struct, because depending on the watcher type we need
to store different parameters; in this way we can save few bytes of
memory for some watcher types. However, this often breaks when
upgrading the compiler; instead just allocate the full struct.
2024-04-05 11:40:45 +02:00
Beniamino Galvani
fcea2f174e libnm-glib-aux: fix comments about UUID generation
Whether the length is supplied explicitly or implicitly (via -1), the
result is the same. Update the comment.
2024-04-05 11:40:44 +02:00
Beniamino Galvani
2386c0f52d libnm-glib-aux: fix "maybe-uninitialized" error when generating UUID
GCC 14 complans with:

  src/libnm-glib-aux/nm-uuid.c: In function 'nm_uuid_generate_from_strings_strv':
  src/libnm-glib-aux/nm-uuid.c:492:12: error: '_1' may be used uninitialized [-Werror=maybe-uninitialized]
    492 |     return nm_uuid_generate_from_string_str(s, slen, uuid_type, type_args);
        |            ^
  src/libnm-glib-aux/nm-uuid.c:392:1: note: by argument 1 of type 'const char *' to 'nm_uuid_generate_from_string_str' declared here
    392 | nm_uuid_generate_from_string_str(const char   *s,
        | ^

"-Wmaybe-uninitialized" diagnoses passing pointers or references to
uninitialized memory to functions taking const-qualified arguments.

In this case, nm_uuid_generate_from_string_str()'s first argument is a
"const char *" and so the compiler expects that the string is always
initialized. However, it is not initialized when len is zero.

A non-null zero-length array can be specified in two ways: by setting
len to zero, or by setting len to -1 and having NULL as first
element. Handle both cases in the same way.
2024-04-05 11:40:44 +02:00
Beniamino Galvani
c0705faaf2 Revert "fix gcc warnings"
The patch doesn't fix compilation.

This reverts commit 98cabe557f.
2024-04-05 11:40:44 +02:00
Fernando Fernandez Mancera
628371423b release: bump version to 1.47.4 (development) 2024-04-05 10:21:39 +02:00
Jan Vaclav
e90e8208ec gitlab-ci: update dist tarball path to expect meson output 2024-04-04 11:30:14 +02:00
Beniamino Galvani
5750137c9d merge: branch 'bg/fix-shutdown-crash'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1910
2024-04-04 11:13:52 +02:00
Beniamino Galvani
044620f8ad power-monitor: fix "shutdown" signal definition
NMPowerMonitor emits the "shutdown" signal without arguments; fix the
definition of the signal.

Fixes: bd38a19832 ('connection: add support to down-on-poweroff')
2024-04-04 11:12:18 +02:00
Beniamino Galvani
3f24b99e86 power-monitor: simplify signal handling
Remove intermediate functions that only change the arguments order.
2024-04-04 11:12:18 +02:00
Beniamino Galvani
61e520ca4b power-monitor: fix shutdown callback signature
The D-Bus signal is "PrepareForShutdown(b start)"; therefore, the
callback needs a boolean argument.
2024-04-04 11:12:18 +02:00
Beniamino Galvani
1b60dd9a9e manager: fix assertion failure during shutdown
Fix the following:

  NetworkManager: file ../src/libnm-core-impl/nm-connection.c: line 321 (nm_connection_get_setting): should not be reached
  NetworkManager.service: Main process exited, code=dumped, status=5/TRAP

Fixes: bd38a19832 ('connection: add support to down-on-poweroff')
2024-04-04 11:12:17 +02:00
Íñigo Huguet
ad6fd1955d merge: branch 'ih/meson_deprecations'
meson: bump minimum version to 0.51 and remove usages of deprecated features

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1909
2024-04-04 08:13:55 +00:00
Íñigo Huguet
ded7b78a7b meson: remove version checks for old versions
We now only support meson >= 0.51, as it is defined in
project(..., meson_version: '>= 0.51.0').

Remove checks for versions older than that.
2024-04-04 08:13:38 +00:00
Íñigo Huguet
873e66a03e meson: use shared_library for target used by linker
Meson has shared_library and shared_module. The latter should be used
only for shared plugins loaded by dlopen, not for shared libraries
linked by the linker.

The target `nm_wwan` was defined as shared_module probably because it
is a library for loadable plugins only, andcontains references to
symbols from the main executable that cannot be resolved at link time.

Do as the deprecation message suggest and convert it to shared_library
with b_lundef=false:

    DEPRECATION: target nm-device-plugin-wwan links against shared module nm-wwan, which is incorrect.
                 This will be an error in the future, so please use shared_library() for nm-wwan instead.
                 If shared_module() was used for nm-wwan because it has references to undefined symbols,
                 use shared_library() with `override_options: ['b_lundef=false']` instead.
2024-04-04 08:13:38 +00:00
Íñigo Huguet
ef2438414f meson: remove deprecated ExternalProgram.path
Replaced by full_path:
https://mesonbuild.com/Reference-manual_returned_external_program.html#external_programpath

ExternalProgram.full_path was added in meson 0.55 but we support meson
>= 0.51. Because of that, use path or full_path conditionally depending
on the meson version.

This gets rid of the following deprecation warning:
  NOTICE: Future-deprecated features used:
   * 0.48.0: {'module python3'}
   * 0.55.0: {'ExternalProgram.path'}
2024-04-04 08:13:38 +00:00
Íñigo Huguet
3b72f19694 meson: replace deprecated meson.source_root
Instead, meson.current_source_root or meson.project_source_root should
be used:
https://mesonbuild.com/Reference-manual_builtin_meson.html#mesonsource_root

Also, the documentation referenced above suggest to use `files()` as a
better alternative to refer to files, so do that at the same time.

This gets rid of the deprecation warning:
  NOTICE: Future-deprecated features used:
   * 0.56.0: {'meson.source_root'}
2024-04-04 08:13:38 +00:00
Íñigo Huguet
07f463bc94 meson: replace deprecated dep.get_pkgconfig_variable
Replaced by dep.get_variable:
https://mesonbuild.com/Reference-manual_returned_dep.html#depget_variable

This get rid of the following deprecation warning:
  NOTICE: Future-deprecated features used:
   * 0.56.0: {'dependency.get_pkgconfig_variable'}
2024-04-04 08:13:38 +00:00
Íñigo Huguet
9158f4165f meson: replace deprecated module 'python3'
Replaced by 'python' module:
https://mesonbuild.com/Python-3-module.html.

This get rids of the following deprecation warning:
  NOTICE: Future-deprecated features used:
   * 0.48.0: {'module python3'}
2024-04-04 08:13:38 +00:00
Íñigo Huguet
9d9e5bd6c1 meson: bump minimum version to 0.51
We were already using some features from 0.49:
 WARNING: Project specifies a minimum meson_version '>= 0.47.2' but uses features which were added in newer versions:
 * 0.48.0: {'meson.add_dist_script'}
 * 0.49.0: {'Calling "add_dist_script" with multiple arguments'}

Debian 10 uses meson 0.49.2, but it will get out of support in 2 months
so we can start considering it as a too old version. Next oldest meson
version used by the distros that we follow is Ubuntu 20.04 with meson
0.53.2.

Raise to 0.51 as it is supported by all the distros that we test (except
Debian 10) and it contains all the features that we need for the next
commits.
2024-04-04 08:13:38 +00:00
Íñigo Huguet
c6a8a58548 merge: branch 'ih/fix-dist-meson'
meson: exclude intermediate files of docs generation from tarball

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1901
2024-04-04 08:13:14 +00:00
Íñigo Huguet
67eb8c5c2b CI: fix meson tarball testing with old meson version
The test "tarball+meson" fails on systems with old meson version with
the message "ERROR: Neither directory contains a build file
meson.build". This message is raised when calling `meson dist` from the
build directory.

According to meson documentation, `meson dist` is supported since 0.52,
and older vesions need to execute `ninja dist`.
https://mesonbuild.com/Creating-releases.html

Also, when using meson.add_dist_script, the env variable MESON_SOURCE_ROOT
is not passed in versions < 0.54. As we don't use it in the script,
don't assert for it.

We claim to support down to meson 0.47.3 (we need to raise it because we
are actually using a bit newer features, but that's another topic). Use
`ninja dist` that will work fine on old and new meson.

Fixes: 61f0531509 ('gitlab-ci: test re-buildability of distribution tarballs')
2024-04-04 08:17:26 +02:00
Íñigo Huguet
723ad4c0ad meson: exclude intermediate files of docs generation from tarball
We want to distribute the generated documentation when we generate the
tarball because we normally do it when we do a release, but `meson dist`
only includes files that are commited to the repository, so a script
meson-dist-data.sh was added with meson.add_dist_script in commit
1c41066a40 ('build: include documentation in meson dist').

This script was copying the whole documentation folders, including some
intermediate files that are not useful for users that wants to read the
docs. Get rid of them and copy only the files that are useful for users:
the generated html pages in docs/api and docs/libnm and the final man
pages.

Also, including these intermediate files caused at least one build
failure, although quite difficult to reproduce:
- Generate tarball with meson
- Untar the generated tarball
- Using the sources from the tarball, configure the project with
  autotools, but building to an out-of-tree folder, not building in
  the source dir (i.e. using a 'build' subfolder). This is called
  a "VPATH build" by autotools and Make. See:
  - https://www.gnu.org/software/make/manual/html_node/General-Search.html
  - https://www.gnu.org/software/automake/manual/html_node/VPATH-Builds.html
- Build

In that scenario, we get an error trying to generate any file under man/
because the man/ subdirectory has not been created. The reason of this
was that the man/ subdirectory is created by the Makefile when
generating the file man/common.ent. However, this file was present in
the source directory because it has been included in the tarball, so
Make detects it and doesn't run the rules to generate it. The result is
that out-of-tree-dir/man folder is not created.

Not including the intermediate files solves this problem.

Fixes: 1c41066a40 ('build: include documentation in meson dist')
2024-04-04 08:16:25 +02:00
Jan Vaclav
095e2ab573 contrib/fedora: use meson to build by default from build_clean.sh 2024-04-03 16:02:06 +02:00
Beniamino Galvani
632c4c260b wifi: merge branch 'bg/wifi-bands'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1899
2024-04-02 16:16:17 +02:00
Beniamino Galvani
4cd4ab518e wifi: fix enumeration of 6 GHz channels from wiphy
Command NL80211_CMD_GET_WIPHY without any flag only returns channels
in the 2 GHz and 5 GHz bands, for backwards compatibility with old
userspace tools. To get the full list we need to pass attribute
NL80211_ATTR_SPLIT_WIPHY_DUMP (added in Linux 3.9 released in 2013),
and allow the handler to be called multiple times.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1500
2024-04-02 16:12:57 +02:00
Beniamino Galvani
8ca7433a14 wifi: fix the ranges of 5 GHz and 6 GHz bands
The 6 GHz band starts from frequency 5950, anything below is 5 GHz.
2024-04-02 16:09:28 +02:00
Fernando Fernandez Mancera
9ac1d6e22b libnm-lldp: use ETH_P_ALL instead of NM_ETHERTYPE_LLDP for the socket
When creating the socket for listening to LLDP frames we are setting
NM_ETHERTYPE_LLDP (0x88cc) as protocol. In most of the cases, that is
correct but when the interface is attached as a port to a OVS bridge,
kernel is not matching the protocol correctly. The reason might be that
some metadata is added to the packet, but we are not completely sure
about it.

Instead, we should use ETH_P_ALL to match all the protocols. Later, we
have a eBPF filter to drop the packet by multicast MAC address or
protocol. This is how lldpd is doing it for example.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1903
2024-04-02 15:59:43 +02:00
Gris Ge
28565cdd32 merge: branch 'fix_f40_build'
fix gcc warnings

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1908
2024-04-02 13:34:12 +00:00
Gris Ge
98cabe557f fix gcc warnings
In Fedora 40+, we have complaining failure:

```
src/libnm-glib-aux/nm-uuid.c: In function 'nm_uuid_generate_from_strings_strv':
src/libnm-glib-aux/nm-uuid.c:490:12: error: '_1' may be used
uninitialized [-Werror=maybe-uninitialized]
  490 |     return nm_uuid_generate_from_string_str(s, slen, uuid_type,
  type_args);
      |            ^
src/libnm-glib-aux/nm-uuid.c:392:1: note: by argument 1 of type 'const
char *' to 'nm_uuid_generate_from_string_str' declared here
  392 | nm_uuid_generate_from_string_str(const char   *s,
      | ^
lto1: all warnings being treated as errors
lto-wrapper: fatal error: gcc returned 1 exit status
```

Fixed by set the `s` initial variable to NULL;

Signed-off-by: Gris Ge <fge@redhat.com>
2024-04-02 21:03:51 +08:00
Íñigo Huguet
1556bf3855 merge: branch 'ih/meson-qt-auto'
meson: autodetect Qt dependencies

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1906
2024-04-02 12:59:12 +00:00
Íñigo Huguet
f57513097f meson: autodetect Qt dependencies
Configuring the build directory with meson often fails if you don't have
the right Qt dependencies. As they are used only to build some examples,
it is better to autodetect them and, if present, then build the
examples but skip them otherwise.

Still accept forcing qt=true or qt=false as before.

Note that there is a option type called "feature" whose purpose is to
support exactly this: features with enable/disable/auto possible values:
https://mesonbuild.com/Build-options.html#features.  However, they don't
accept true/false values so scripts using qt=true/false would start
failing. Since meson 0.60 the "deprecated" argument can be used for
options (https://mesonbuild.com/Build-options.html#deprecated-options),
but that's a too new version of meson.

Also, this fixes some Gitlab-CI failures that happen when generating the
tarball with make distcheck or meson dist. This is because it tries to
check that the tarball content can be configured and built, but it uses
the default configurations so it was using qt=yes. Now it will use
qt=auto, avoiding the failure.

Fixes: 61f0531509 ('gitlab-ci: test re-buildability of distribution tarballs')
2024-04-02 12:58:26 +00:00
Beniamino Galvani
d534f984f7 device: ignore error setting mac if it's a global special value
If the distro sets a global special value for the cloned MAC address
(for example, "stable-ssid") and the driver doesn't support changing
the MAC, all activations will fail on the interface unless users know
that they need to change the cloned MAC. Be more tolerant to errors in
case the MAC is global and special.

https://bugzilla.redhat.com/show_bug.cgi?id=2270062
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1898
2024-03-29 09:48:23 +01:00
Beniamino Galvani
f58b281ef4 ndisc: accept unknown ip6-privacy value
The value can be unknown for different reasons:

 - we don't have a value saved in NMDevice's "ip6_saved_properties"
   because NM was restarted or because the device didn't have an
   ifindex when it became managed.

 - the value read from /proc is outside the allowed range (kernel
   allows "echo 42 > /proc/sys/net/ipv6/conf/enp1s0/use_tempaddr")

Note that the second case was already possible before commit
797f3cafee ('device: fall back to saved use_tempaddr value instead
of rereading /proc').

If we can't determine the previous value, pass "unknown" to ndisc; it
will generate a l3cd with "unknown" ip6-privacy, which means to not
set the value when committing the configuration.

Fixes: 797f3cafee ('device: fall back to saved use_tempaddr value instead of rereading /proc')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1907
2024-03-28 19:21:43 +01:00
Íñigo Huguet
b4e3095522 merge: branch 'main'
Update Turkish translation

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1884
2024-03-26 16:09:25 +00:00
emintufan
e179fae31e Update Turkish translation 2024-03-26 15:19:25 +00:00
Beniamino Galvani
de130df3e2 manager: fix race condition while enumerating devices at startup
While enumerating devices at startup, we take a snapshot of existing
links from platform and we start creating device instances for
them. It's possible that in the meantime, while processing netlink
events in platform_link_added(), a link gets renamed. If that happens,
then we have two different views of the same ifindex: the cached link
from `links` and the link in platform.

This can cause issues: in platform_link_added() we create the device
with the cached name; then in NMDevice's constructor(), we look up
from platform the ifindex for the given name. Because of the rename,
this lookup can match a newly created, different link.

The end result is that the ifindex from the initial snapshot doesn't
get a NMDevice and is not handled by NetworkManager.

Fix this problem by fetching the latest version of the link from
platform to make sure we have a consistent view of the state.

https://issues.redhat.com/browse/RHEL-25808
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1897
2024-03-26 10:26:02 +01:00
Gris Ge
666dd2840a release: bump version to 1.47.3 (development) 2024-03-22 16:28:21 +08:00
Íñigo Huguet
46245b23ce merge: branch 'ipv6-temp-lifetime'
device: introduce ipv6.temp-valid-lifetime and ipv6.temp-preferred-lifetime properties

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1846
2024-03-21 07:09:35 +00:00
Alex Henrie
6cb14ae6a6 device: introduce ipv6.temp-valid-lifetime and ipv6.temp-preferred-lifetime properties
When IPv6 privacy extensions are enabled, by default temporary addresses
have a valid lifetime of 1 week and a preferred lifetime of 1 day.
That's far too long for privacy-conscious users, some of whom want a new
address once every few seconds. Add connection options that correspond
to /proc/sys/net/ipv6/conf/*/temp_valid_lft and
/proc/sys/net/ipv6/conf/*/temp_prefered_lft to allow configuring the
address rotation time on a per-connection basis.

The new properties are defined as 32-bit signed integers to match the
sysctl parameters which are also signed, although currently only
positive numbers are valid.
2024-03-20 23:46:32 -06:00
Alex Henrie
797f3cafee device: fall back to saved use_tempaddr value instead of rereading /proc
There may be a per-interface default set by the sysctl
net.ipv6.conf.<iface>.use_tempaddr that is different than
net.ipv6.conf.default.use_tempaddr.
2024-03-20 23:42:22 -06:00
Íñigo Huguet
ea43ae9643 merge: branch 'meson-fix-set10'
build: use only booleans in a set10 method

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1893
2024-03-20 17:27:58 +00:00
Yegor Yefremov
76fd8f6775 build: use only booleans in a set10 method
Fixes the following deprecation warning:

meson.build:585: DEPRECATION: configuration_data.set10
with number. the `set10` method should only be used with booleans
2024-03-20 17:27:16 +00:00
Fernando Fernandez Mancera
065e67286d merge: branch 'jv/deprecate-wired-blacklist'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1890
2024-03-20 15:44:45 +01:00
Jan Vaclav
0e283a8917 all: use the new NMSettingWired mac-address-denylist property 2024-03-20 15:32:01 +01:00
Jan Vaclav
f2d91b4a68 wired: deprecate NMSettingWired mac-address-blacklist property
To embrace inclusive language, deprecate the NMSettingWired
mac-address-blacklist property and introduce mac-address-denylist property.
2024-03-20 15:32:00 +01:00
Jan Vaclav
da8b304c38 libnm/wired: replace mac_address_blacklist type GArray with NMValueStrv
This replaces the underlying type of mac_address_blacklist, which is currently GArray,
with a more re-usable NMValueStrv, which allows us to implement it as a direct property.
2024-03-20 15:31:35 +01:00
Jan Vaclav
a9c4c1d84e libnm/wired: fix mac comparison in _remove_mac_blacklist_item_by_value
The comparison checking for MAC address equality had previously been flipped around.

Fixes: b084ad7f2b ('libnm-core: canonicalize hardware addresses in settings')
2024-03-20 15:31:35 +01:00
Jan Vaclav
a810de57b6 libnm-core: drop _NM_DEPRECATED_INCLUSIVE_LANGUAGE_1_48 macro 2024-03-20 15:31:35 +01:00
Beniamino Galvani
6af2fb351c core, libnm: expose the reason for unmanaged devices
A common source for doubts and questions from users is about why
devices are unmanaged. Unfortunately NM doesn't expose that
information properly via D-Bus and so it's not available in nmcli.

The device D-Bus object has two properties that are strictly related:
"state" and "state-reason". The latter represents the reason for the
current state. Introduce new reasons to indicate the possible causes
for the unmanaged state. Note that a device can be unmanaged because
of multiple reasons at the same time, we only return one.

Before:

  $ nmcli -f GENERAL.DEVICE,GENERAL.TYPE,GENERAL.STATE,GENERAL.reason device show

  GENERAL.DEVICE:                         enp7s0
  GENERAL.TYPE:                           ethernet
  GENERAL.STATE:                          10 (unmanaged)
  GENERAL.REASON:                         0 (No reason given)

  GENERAL.DEVICE:                         tun0
  GENERAL.TYPE:                           tun
  GENERAL.STATE:                          10 (unmanaged)
  GENERAL.REASON:                         0 (No reason given)

  GENERAL.DEVICE:                         hwsim0
  GENERAL.TYPE:                           unknown
  GENERAL.STATE:                          10 (unmanaged)
  GENERAL.REASON:                         0 (No reason given)

After:

  $ nmcli -f GENERAL.DEVICE,GENERAL.TYPE,GENERAL.STATE,GENERAL.reason device show

  GENERAL.DEVICE:                         enp7s0
  GENERAL.TYPE:                           ethernet
  GENERAL.STATE:                          10 (unmanaged)
  GENERAL.REASON:                         76 (The device is unmanaged by user decision via settings plugin ("unmanaged-devices" for keyfile or "NM_CONTROLLED=no" for ifcfg-rh))

  GENERAL.DEVICE:                         tun0
  GENERAL.TYPE:                           tun
  GENERAL.STATE:                          10 (unmanaged)
  GENERAL.REASON:                         75 (The device is unmanaged by explicit user decision (e.g. 'nmcli device set $DEV managed no')

  GENERAL.DEVICE:                         hwsim0
  GENERAL.TYPE:                           unknown
  GENERAL.STATE:                          10 (unmanaged)
  GENERAL.REASON:                         69 (The device is unmanaged because the device type is unmanaged by default)

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1887
2024-03-20 15:25:09 +01:00